diff --git a/LEGALNOTICE b/LEGALNOTICE index 93c2f03493f95cc09bb9a3b9533b31036e90d8b2..3b79580ed68f04728afa6b7c2d2d86bee39cf8c6 100644 --- a/LEGALNOTICE +++ b/LEGALNOTICE @@ -78,7 +78,7 @@ THIRD-PARTY COMPONENTS AND LIBRARIES Name: jqPlot Link: http://www.jqplot.com/ License: Dual-licensed: MIT (Expat) or GPL v2 - + Name: jQuery Link: http://jquery.com/ License: Dual-licensed: MIT (Expat) or GPL @@ -187,7 +187,7 @@ THIRD-PARTY COMPONENTS AND LIBRARIES Name: Zend Framework Link: http://www.zendframework.com/ License: New BSD - + Name: pChart 2.1.3 Link: http://www.pchart.net License: GPL v3 diff --git a/README.md b/README.md index b62682949866ca0c3d7140e43359c0f009876555..c3d72af4a37c9b5e3f706be35229cf8d7f237d84 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Piwik - piwik.org +# Piwik - piwik.org ## We’re seeking a talented Software Engineer @@ -37,9 +37,9 @@ Piwik is released under the GPL v3 (or later) license, see [misc/gpl-3.0.txt](mi See http://piwik.org/docs/requirements/ -## Install +## Install - * Upload piwik to your webserver + * Upload piwik to your webserver * Point your browser to the directory * Follow the steps * Add the given javascript code to your pages @@ -72,7 +72,7 @@ About us: http://piwik.org/the-piwik-team/ What makes Piwik unique from the competition: - * Real time web analytics reports: in Piwik, reports are by default generated in real time. + * Real time web analytics reports: in Piwik, reports are by default generated in real time. For high traffic websites, you can choose the frequency for reports to be processed. * You own your web analytics data: since Piwik is installed on your server, the data is stored in your own database and you can get all the statistics @@ -82,12 +82,12 @@ What makes Piwik unique from the competition: * Modern, easy to use User Interface: you can fully customize your dashboard, drag and drop widgets and more. - * Piwik features are built inside plugins: you can add new features and remove the ones you don’t need. + * Piwik features are built inside plugins: you can add new features and remove the ones you don’t need. You can build your own web analytics plugins or hire a consultant to have your custom feature built in Piwik * Vibrant international Open community of more than 200,000 active users (tracking even more websites!) - * Advanced Web Analytics capabilities such as Ecommerce Tracking, Goal tracking, Campaign tracking, + * Advanced Web Analytics capabilities such as Ecommerce Tracking, Goal tracking, Campaign tracking, Custom Variables, Email Reports, Custom Segment Editor, Geo Location, Real time maps, and more! Documentation and more info on http://piwik.org diff --git a/config/global.ini.php b/config/global.ini.php index 19fbef68bc0b5f524c03b12bf8b5f50749c5a2d1..c47fd385b4830f0e482e31992dc6f307287be49e 100644 --- a/config/global.ini.php +++ b/config/global.ini.php @@ -247,7 +247,7 @@ session_save_handler = files ; If set to 1, Piwik will automatically redirect all http:// requests to https:// ; If SSL / https is not correctly configured on the server, this will break Piwik -; If you set this to 1, and your SSL configuration breaks later on, you can always edit this back to 0 +; If you set this to 1, and your SSL configuration breaks later on, you can always edit this back to 0 ; it is recommended for security reasons to always use Piwik over https force_ssl = 0 @@ -553,7 +553,7 @@ referrer_urls_spam = "semalt.com" ; DO NOT USE THIS SETTING ON PUBLICLY AVAILABLE PIWIK SERVER ; !!! Security risk: if set to 0, it would allow anyone to push data to Piwik with custom dates in the past/future and even with fake IPs! -; When using the Tracking API, to override either the datetime and/or the visitor IP, +; When using the Tracking API, to override either the datetime and/or the visitor IP, ; token_auth with an "admin" access is required. If you set this setting to 0, the token_auth will not be required anymore. ; DO NOT USE THIS SETTING ON PUBLIC PIWIK SERVERS tracking_requests_require_authentication = 1 @@ -678,10 +678,10 @@ Plugins_Tracker[] = Login [APISettings] ; Any key/value pair can be added in this section, they will be available via the REST call -; index.php?module=API&method=API.getSettings +; index.php?module=API&method=API.getSettings ; This can be used to expose values from Piwik, to control for example a Mobile app tracking SDK_batch_size = 10 SDK_interval_value = 30 ; NOTE: do not directly edit this file! See notice at the top - + diff --git a/core/API/Proxy.php b/core/API/Proxy.php index 43d57bcb38e81dcfcefcd163af68dac40dff9195..d3e1fbad3ff15cf26813d22c7d93d305a74cad24 100644 --- a/core/API/Proxy.php +++ b/core/API/Proxy.php @@ -164,11 +164,11 @@ class Proxy extends Singleton /** * Triggered before an API request is dispatched. - * + * * This event can be used to modify the arguments passed to one or more API methods. - * + * * **Example** - * + * * Piwik::addAction('API.Request.dispatch', function (&$parameters, $pluginName, $methodName) { * if ($pluginName == 'Actions') { * if ($methodName == 'getPageUrls') { @@ -178,7 +178,7 @@ class Proxy extends Singleton * } * } * }); - * + * * @param array &$finalParameters List of parameters that will be passed to the API method. * @param string $pluginName The name of the plugin the API method belongs to. * @param string $methodName The name of the API method that will be called. @@ -187,20 +187,20 @@ class Proxy extends Singleton /** * Triggered before an API request is dispatched. - * + * * This event exists for convenience and is triggered directly after the {@hook API.Request.dispatch} * event is triggered. It can be used to modify the arguments passed to a **single** API method. - * + * * _Note: This is can be accomplished with the {@hook API.Request.dispatch} event as well, however * event handlers for that event will have to do more work._ - * + * * **Example** - * + * * Piwik::addAction('API.Actions.getPageUrls', function (&$parameters) { * // force use of a single website. for some reason. * $parameters['idSite'] = 1; * }); - * + * * @param array &$finalParameters List of parameters that will be passed to the API method. */ Piwik::postEvent(sprintf('API.%s.%s', $pluginName, $methodName), array(&$finalParameters)); @@ -218,16 +218,16 @@ class Proxy extends Singleton /** * Triggered directly after an API request is dispatched. - * + * * This event exists for convenience and is triggered immediately before the * {@hook API.Request.dispatch.end} event. It can be used to modify the output of a **single** * API method. - * + * * _Note: This can be accomplished with the {@hook API.Request.dispatch.end} event as well, * however event handlers for that event will have to do more work._ * * **Example** - * + * * // append (0 hits) to the end of row labels whose row has 0 hits * Piwik::addAction('API.Actions.getPageUrls', function (&$returnValue, $info)) { * $returnValue->filter('ColumnCallbackReplace', 'label', function ($label, $hits) { @@ -238,13 +238,13 @@ class Proxy extends Singleton * } * }, null, array('nb_hits')); * } - * + * * @param mixed &$returnedValue The API method's return value. Can be an object, such as a * {@link Piwik\DataTable DataTable} instance. * could be a {@link Piwik\DataTable DataTable}. * @param array $extraInfo An array holding information regarding the API request. Will * contain the following data: - * + * * - **className**: The namespace-d class name of the API instance * that's being called. * - **module**: The name of the plugin the API request was @@ -257,11 +257,11 @@ class Proxy extends Singleton /** * Triggered directly after an API request is dispatched. - * + * * This event can be used to modify the output of any API method. - * + * * **Example** - * + * * // append (0 hits) to the end of row labels whose row has 0 hits for any report that has the 'nb_hits' metric * Piwik::addAction('API.Actions.getPageUrls', function (&$returnValue, $info)) { * // don't process non-DataTable reports and reports that don't have the nb_hits column @@ -270,7 +270,7 @@ class Proxy extends Singleton * ) { * return; * } - * + * * $returnValue->filter('ColumnCallbackReplace', 'label', function ($label, $hits) { * if ($hits === 0) { * return $label . " (0 hits)"; @@ -279,12 +279,12 @@ class Proxy extends Singleton * } * }, null, array('nb_hits')); * } - * + * * @param mixed &$returnedValue The API method's return value. Can be an object, such as a * {@link Piwik\DataTable DataTable} instance. * @param array $extraInfo An array holding information regarding the API request. Will * contain the following data: - * + * * - **className**: The namespace-d class name of the API instance * that's being called. * - **module**: The name of the plugin the API request was diff --git a/core/API/Request.php b/core/API/Request.php index 5c796a067d8015708df53ef7bff47122ab66cf0c..d1944ea2ac4452c7c6e6192f30dd306e501a1ab5 100644 --- a/core/API/Request.php +++ b/core/API/Request.php @@ -20,38 +20,38 @@ use Piwik\UrlHelper; /** * Dispatches API requests to the appropriate API method. - * + * * The Request class is used throughout Piwik to call API methods. The difference * between using Request and calling API methods directly is that Request * will do more after calling the API including: applying generic filters, applying queued filters, * and handling the **flat** and **label** query parameters. - * + * * Additionally, the Request class will **forward current query parameters** to the request * which is more convenient than calling {@link Piwik\Common::getRequestVar()} many times over. - * + * * In most cases, using a Request object to query the API is the correct approach. * * ### Post-processing - * + * * The return value of API methods undergo some extra processing before being returned by Request. * To learn more about what happens to API results, read [this](/guides/piwiks-web-api#extra-report-processing). * * ### Output Formats - * + * * The value returned by Request will be serialized to a certain format before being returned. * To see the list of supported output formats, read [this](/guides/piwiks-web-api#output-formats). - * + * * ### Examples - * + * * **Basic Usage** - * + * * $request = new Request('method=UserSettings.getWideScreen&idSite=1&date=yesterday&period=week' * . '&format=xml&filter_limit=5&filter_offset=0') * $result = $request->process(); * echo $result; - * + * * **Getting a unrendered DataTable** - * + * * // use the convenience method 'processRequest' * $dataTable = Request::processRequest('UserSettings.getWideScreen', array( * 'idSite' => 1, @@ -59,7 +59,7 @@ use Piwik\UrlHelper; * 'period' => 'week', * 'filter_limit' => 5, * 'filter_offset' => 0 - * + * * 'format' => 'original', // this is the important bit * )); * echo "This DataTable has " . $dataTable->getRowsCount() . " rows."; @@ -168,9 +168,9 @@ class Request /** * Dispatches the API request to the appropriate API method and returns the result * after post-processing. - * + * * Post-processing includes: - * + * * - flattening if **flat** is 0 * - running generic filters unless **disable_generic_filters** is set to 1 * - URL decoding label column values @@ -178,10 +178,10 @@ class Request * - removing columns based on the values of the **hideColumns** and **showColumns** query parameters * - filtering rows if the **label** query parameter is set * - converting the result to the appropriate format (ie, XML, JSON, etc.) - * + * * If `'original'` is supplied for the output format, the result is returned as a PHP * object. - * + * * @throws PluginDeactivatedException if the module plugin is not activated. * @throws Exception if the requested API method cannot be called, if required parameters for the * API method are missing or if the API method throws an exception and the **format** @@ -223,7 +223,7 @@ class Request /** * Returns the name of a plugin's API class by plugin name. - * + * * @param string $plugin The plugin name, eg, `'Referrers'`. * @return string The fully qualified API class name, eg, `'\Piwik\Plugins\Referrers\API'`. */ @@ -250,11 +250,11 @@ class Request /** * Triggered when authenticating an API request, but only if the **token_auth** * query parameter is found in the request. - * + * * Plugins that provide authentication capabilities should subscribe to this event * and make sure the global authentication object (the object returned by `Registry::get('auth')`) * is setup to use `$token_auth` when its `authenticate()` method is executed. - * + * * @param string $token_auth The value of the **token_auth** query parameter. */ Piwik::postEvent('API.Request.authenticate', array($token_auth)); @@ -305,7 +305,7 @@ class Request * Returns the original request parameters in the current query string as an array mapping * query parameter names with values. The result of this function will not be affected * by any modifications to `$_GET` and will not include parameters in `$_POST`. - * + * * @return array */ public static function getRequestParametersGET() @@ -379,7 +379,7 @@ class Request /** * Returns the segment query parameter from the original request, without modifications. - * + * * @return array|bool */ public static function getRawSegmentFromRequest() diff --git a/core/Access.php b/core/Access.php index a1b823a2ccd726be4682f58ea0c1c8c63fa3f0ba..bd3dbbb6a141d15d2bef249c568ec7818b6d3946 100644 --- a/core/Access.php +++ b/core/Access.php @@ -12,24 +12,24 @@ use Piwik\Db; /** * Singleton that manages user access to Piwik resources. - * + * * To check whether a user has access to a resource, use one of the {@link Piwik Piwik::checkUser...} * methods. * * In Piwik there are four different access levels: - * + * * - **no access**: Users with this access level cannot view the resource. * - **view access**: Users with this access level can view the resource, but cannot modify it. * - **admin access**: Users with this access level can view and modify the resource. * - **Super User access**: Only the Super User has this access level. It means the user can do * whatever he/she wants. - * + * * Super user access is required to set some configuration options. * All other options are specific to the user or to a website. * * Access is granted per website. Uses with access for a website can view all * data associated with that website. - * + * */ class Access { diff --git a/core/Archive.php b/core/Archive.php index c7407c0af0f05aa211a2928f640750f257a5b4e1..63f0a61dc87799ade938d2d62b2ebfeaab41b5a4 100644 --- a/core/Archive.php +++ b/core/Archive.php @@ -16,49 +16,49 @@ use Piwik\Period\Factory; /** * The **Archive** class is used to query cached analytics statistics * (termed "archive data"). - * + * * You can use **Archive** instances to get data that was archived for one or more sites, * for one or more periods and one optional segment. - * + * * If archive data is not found, this class will initiate the archiving process. [1](#footnote-1) - * + * * **Archive** instances must be created using the {@link build()} factory method; * they cannot be constructed. - * + * * You can search for metrics (such as `nb_visits`) using the {@link getNumeric()} and * {@link getDataTableFromNumeric()} methods. You can search for * reports using the {@link getBlob()}, {@link getDataTable()} and {@link getDataTableExpanded()} methods. - * + * * If you're creating an API that returns report data, you may want to use the * {@link getDataTableFromArchive()} helper function. - * + * * ### Learn more - * + * * Learn more about _archiving_ [here](/guides/all-about-analytics-data). - * + * * ### Limitations - * + * * - You cannot get data for multiple range periods in a single query. * - You cannot get data for periods of different types in a single query. - * + * * ### Examples - * + * * **_Querying metrics for an API method_** - * + * * // one site and one period * $archive = Archive::build($idSite = 1, $period = 'week', $date = '2013-03-08'); * return $archive->getDataTableFromNumeric(array('nb_visits', 'nb_actions')); - * + * * // all sites and multiple dates * $archive = Archive::build($idSite = 'all', $period = 'month', $date = '2013-01-02,2013-03-08'); * return $archive->getDataTableFromNumeric(array('nb_visits', 'nb_actions')); - * + * * **_Querying and using metrics immediately_** - * + * * // one site and one period * $archive = Archive::build($idSite = 1, $period = 'week', $date = '2013-03-08'); * $data = $archive->getNumeric(array('nb_visits', 'nb_actions')); - * + * * $visits = $data['nb_visits']; * $actions = $data['nb_actions']; * @@ -67,37 +67,37 @@ use Piwik\Period\Factory; * // multiple sites and multiple dates * $archive = Archive::build($idSite = '1,2,3', $period = 'month', $date = '2013-01-02,2013-03-08'); * $data = $archive->getNumeric('nb_visits'); - * + * * $janSite1Visits = $data['1']['2013-01-01,2013-01-31']['nb_visits']; * $febSite1Visits = $data['1']['2013-02-01,2013-02-28']['nb_visits']; * // ... etc. - * + * * **_Querying for reports_** - * + * * $archive = Archive::build($idSite = 1, $period = 'week', $date = '2013-03-08'); * $dataTable = $archive->getDataTable('MyPlugin_MyReport'); * // ... manipulate $dataTable ... * return $dataTable; - * + * * **_Querying a report for an API method_** - * + * * public function getMyReport($idSite, $period, $date, $segment = false, $expanded = false) * { * $dataTable = Archive::getDataTableFromArchive('MyPlugin_MyReport', $idSite, $period, $date, $segment, $expanded); * $dataTable->queueFilter('ReplaceColumnNames'); * return $dataTable; * } - * + * * **_Querying data for multiple range periods_** - * + * * // get data for first range * $archive = Archive::build($idSite = 1, $period = 'range', $date = '2013-03-08,2013-03-12'); * $dataTable = $archive->getDataTableFromNumeric(array('nb_visits', 'nb_actions')); - * + * * // get data for second range * $archive = Archive::build($idSite = 1, $period = 'range', $date = '2013-03-15,2013-03-20'); * $dataTable = $archive->getDataTableFromNumeric(array('nb_visits', 'nb_actions')); - * + * * <a name="footnote-1"></a> * [1]: The archiving process will not be launched if browser archiving is disabled * and the current request came from a browser. @@ -215,13 +215,13 @@ class Archive /** * Returns a new Archive instance that will query archive data for the given set of * sites and periods, using an optional segment. - * + * * This method uses an array of Period instances and a Segment instance, instead of strings * like {@link build()}. - * + * * If you want to create an Archive instance using data found in query parameters, * use {@link build()}. - * + * * @param Segment $segment The segment to use. For no segment, use `new Segment('', $idSites)`. * @param array $periods An array of Period instances. * @param array $idSites An array of site IDs (eg, `array(1, 2, 3)`). @@ -253,16 +253,16 @@ class Archive /** * Queries and returns metric data in an array. - * + * * If multiple sites were requested in {@link build()} or {@link factory()} the result will * be indexed by site ID. - * + * * If multiple periods were requested in {@link build()} or {@link factory()} the result will * be indexed by period. - * + * * The site ID index is always first, so if multiple sites & periods were requested, the result * will be indexed by site ID first, then period. - * + * * @param string|array $names One or more archive names, eg, `'nb_visits'`, `'Referrers_distinctKeywords'`, * etc. * @return false|numeric|array `false` if there is no data to return, a single numeric value if we're not querying @@ -289,17 +289,17 @@ class Archive /** * Queries and returns blob data in an array. - * + * * Reports are stored in blobs as serialized arrays of {@link DataTable\Row} instances, but this * data can technically be anything. In other words, you can store whatever you want * as archive data blobs. * * If multiple sites were requested in {@link build()} or {@link factory()} the result will * be indexed by site ID. - * + * * If multiple periods were requested in {@link build()} or {@link factory()} the result will * be indexed by period. - * + * * The site ID index is always first, so if multiple sites & periods were requested, the result * will be indexed by site ID first, then period. * @@ -317,20 +317,20 @@ class Archive /** * Queries and returns metric data in a DataTable instance. - * + * * If multiple sites were requested in {@link build()} or {@link factory()} the result will * be a DataTable\Map that is indexed by site ID. - * + * * If multiple periods were requested in {@link build()} or {@link factory()} the result will * be a {@link DataTable\Map} that is indexed by period. - * + * * The site ID index is always first, so if multiple sites & periods were requested, the result * will be a {@link DataTable\Map} indexed by site ID which contains {@link DataTable\Map} instances that are * indexed by period. - * + * * _Note: Every DataTable instance returned will have at most one row in it. The contents of each * row will be the requested metrics for the appropriate site and period._ - * + * * @param string|array $names One or more archive names, eg, 'nb_visits', 'Referrers_distinctKeywords', * etc. * @return DataTable|DataTable\Map A DataTable if multiple sites and periods were not requested. @@ -344,20 +344,20 @@ class Archive /** * Queries and returns one or more reports as DataTable instances. - * + * * This method will query blob data that is a serialized array of of {@link DataTable\Row}'s and * unserialize it. - * + * * If multiple sites were requested in {@link build()} or {@link factory()} the result will * be a {@link DataTable\Map} that is indexed by site ID. - * + * * If multiple periods were requested in {@link build()} or {@link factory()} the result will * be a DataTable\Map that is indexed by period. - * + * * The site ID index is always first, so if multiple sites & periods were requested, the result * will be a {@link DataTable\Map} indexed by site ID which contains {@link DataTable\Map} instances that are * indexed by period. - * + * * @param string $name The name of the record to get. This method can only query one record at a time. * @param int|string|null $idSubtable The ID of the subtable to get (if any). * @return DataTable|DataTable\Map A DataTable if multiple sites and periods were not requested. @@ -371,13 +371,13 @@ class Archive /** * Queries and returns one report with all of its subtables loaded. - * + * * If multiple sites were requested in {@link build()} or {@link factory()} the result will * be a DataTable\Map that is indexed by site ID. - * + * * If multiple periods were requested in {@link build()} or {@link factory()} the result will * be a DataTable\Map that is indexed by period. - * + * * The site ID index is always first, so if multiple sites & periods were requested, the result * will be a {@link DataTable\Map indexed} by site ID which contains {@link DataTable\Map} instances that are * indexed by period. @@ -399,7 +399,7 @@ class Archive /** * Returns the list of plugins that archive the given reports. - * + * * @param array $archiveNames * @return array */ @@ -426,7 +426,7 @@ class Archive /** * Helper function that creates an Archive instance and queries for report data using * query parameter data. API methods can use this method to reduce code redundancy. - * + * * @param string $name The name of the report to return. * @param int|string|array $idSite @see {@link build()} * @param string $period @see {@link build()} diff --git a/core/ArchiveProcessor.php b/core/ArchiveProcessor.php index 10374f18c47a737e4a08196b27d25ad721e70708..cd3fc0138c970ae90ce45eb7d4418ccacfc759a1 100644 --- a/core/ArchiveProcessor.php +++ b/core/ArchiveProcessor.php @@ -20,58 +20,58 @@ use Piwik\Period; /** * Used by {@link Piwik\Plugin\Archiver} instances to insert and aggregate archive data. - * + * * ### See also - * + * * - **{@link Piwik\Plugin\Archiver}** - to learn how plugins should implement their own analytics * aggregation logic. * - **{@link Piwik\DataAccess\LogAggregator}** - to learn how plugins can perform data aggregation * across Piwik's log tables. - * + * * ### Examples - * + * * **Inserting numeric data** - * + * * // function in an Archiver descendant * public function aggregateDayReport() * { * $archiveProcessor = $this->getProcessor(); - * + * * $myFancyMetric = // ... calculate the metric value ... * $archiveProcessor->insertNumericRecord('MyPlugin_myFancyMetric', $myFancyMetric); * } - * + * * **Inserting serialized DataTables** - * + * * // function in an Archiver descendant * public function aggregateDayReport() * { * $archiveProcessor = $this->getProcessor(); - * + * * $maxRowsInTable = Config::getInstance()->General['datatable_archiving_maximum_rows_standard'];j - * + * * $dataTable = // ... build by aggregating visits ... * $serializedData = $dataTable->getSerialized($maxRowsInTable, $maxRowsInSubtable = $maxRowsInTable, * $columnToSortBy = Metrics::INDEX_NB_VISITS); - * + * * $archiveProcessor->insertBlobRecords('MyPlugin_myFancyReport', $serializedData); * } - * + * * **Aggregating archive data** - * + * * // function in Archiver descendant * public function aggregateMultipleReports() * { * $archiveProcessor = $this->getProcessor(); - * + * * // aggregate a metric * $archiveProcessor->aggregateNumericMetrics('MyPlugin_myFancyMetric'); * $archiveProcessor->aggregateNumericMetrics('MyPlugin_mySuperFancyMetric', 'max'); - * - * // aggregate a report + * + * // aggregate a report * $archiveProcessor->aggregateDataTableRecords('MyPlugin_myFancyReport'); * } - * + * */ class ArchiveProcessor { @@ -172,7 +172,7 @@ class ArchiveProcessor * when summed because they cannot be summed, eg, * `array('nb_uniq_visitors' => 'sum_daily_nb_uniq_visitors')`. * @return array Returns the row counts of each aggregated report before truncation, eg, - * + * * array( * 'report1' => array('level0' => $report1->getRowsCount, * 'recursive' => $report1->getRowsCountRecursive()), @@ -227,12 +227,12 @@ class ArchiveProcessor * @return array|int Returns the array of aggregate values. If only one metric was aggregated, * the aggregate value will be returned as is, not in an array. * For example, if `array('nb_visits', 'nb_hits')` is supplied for `$columns`, - * + * * array( * 'nb_visits' => 3040, * 'nb_hits' => 405 * ) - * + * * could be returned. If `array('nb_visits')` or `'nb_visits'` is used for `$columns`, * then `3040` would be returned. * @api @@ -272,7 +272,7 @@ class ArchiveProcessor * * @param array $numericRecords A name-value mapping of numeric values that should be * archived, eg, - * + * * array('Referrers_distinctKeywords' => 23, 'Referrers_distinctCampaigns' => 234) * @api */ diff --git a/core/ArchiveProcessor/Parameters.php b/core/ArchiveProcessor/Parameters.php index b6aa1c63f929d6ffc2b3c1194bd5e211c0980bb2..79cb1c719685fafe90ae19e3f3b7f2a06c684905 100644 --- a/core/ArchiveProcessor/Parameters.php +++ b/core/ArchiveProcessor/Parameters.php @@ -45,7 +45,7 @@ class Parameters /** * Constructor. - * + * * @ignore */ public function __construct(Site $site, Period $period, Segment $segment, $skipAggregationOfSubTables = false) diff --git a/core/ArchiveProcessor/Rules.php b/core/ArchiveProcessor/Rules.php index dec40d756877e313d9202dadf43ace3c4439c55a..03b26acf2f7ba817568d5f80672ebefeaf917a49 100644 --- a/core/ArchiveProcessor/Rules.php +++ b/core/ArchiveProcessor/Rules.php @@ -23,7 +23,7 @@ use Piwik\Tracker\Cache; /** * This class contains Archiving rules/logic which are used when creating and processing Archives. - * + * */ class Rules { diff --git a/core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php b/core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php index 11d6a633af67ea8ab846431430ba615ad00fc3d7..de0f5f1ffa7720bd96181c2dc41c31fce6548b97 100644 --- a/core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php +++ b/core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php @@ -81,7 +81,7 @@ class StylesheetUIAssetMerger extends UIAssetMerger protected function processFileContent($uiAsset) { - $pathsRewriter = $this->getCssPathsRewriter($uiAsset); + $pathsRewriter = $this->getCssPathsRewriter($uiAsset); $content = $uiAsset->getContent(); $content = $this->rewriteCssImagePaths($content, $pathsRewriter); $content = $this->rewriteCssImportPaths($content, $pathsRewriter); @@ -128,7 +128,7 @@ class StylesheetUIAssetMerger extends UIAssetMerger return function ($matches) use ($baseDirectory) { $absolutePath = PIWIK_USER_PATH . "/$baseDirectory/" . $matches[2]; - + // Allow to import extension less file if (strpos($matches[2], '.') === false) { $absolutePath .= '.less'; diff --git a/core/CliMulti/CliPhp.php b/core/CliMulti/CliPhp.php index b4c3d376a1a2c94897bf0a522a24db7ff4a5fe8b..df82e05376787703b51b4f3c9dd31c219a455eae 100644 --- a/core/CliMulti/CliPhp.php +++ b/core/CliMulti/CliPhp.php @@ -54,9 +54,9 @@ class CliPhp if (!$this->isValidPhpVersion($bin)) { return false; } - + $bin .= ' -q'; - + return $bin; } diff --git a/core/CliMulti/Process.php b/core/CliMulti/Process.php index 907d178e40900fd4602cbfb76cd45898bb5b8d4b..1b77dc152adda31f46c67d7ede803fd5cf9cd55d 100644 --- a/core/CliMulti/Process.php +++ b/core/CliMulti/Process.php @@ -201,7 +201,7 @@ class Process * ps -e requires /proc * @return bool */ - private static function isProcFSMounted() + private static function isProcFSMounted() { return is_resource(@fopen('/proc', 'r')); } diff --git a/core/Common.php b/core/Common.php index 511f1ca61f78b6963472e8c709848cd9cae4ff06..3b49dc9bd9963e32af49077f52ee4238668cd7f2 100644 --- a/core/Common.php +++ b/core/Common.php @@ -48,7 +48,7 @@ class Common /** * Returns a prefixed table name. - * + * * The table prefix is determined by the `[database] tables_prefix` INI config * option. * @@ -82,7 +82,7 @@ class Common * * The table prefix is determined by the `[database] tables_prefix` INI config * option. - * + * * @param string $table The prefixed table name, eg "piwik-production_log_visit". * @return string The unprefixed table name, eg "log_visit". * @api @@ -168,7 +168,7 @@ class Common /** * Multi-byte substr() - works with UTF-8. - * + * * Calls `mb_substr` if available and falls back to `substr` if it's not. * * @param string $string @@ -192,7 +192,7 @@ class Common /** * Multi-byte strlen() - works with UTF-8 - * + * * Calls `mb_substr` if available and falls back to `substr` if not. * * @param string $string @@ -210,9 +210,9 @@ class Common /** * Multi-byte strtolower() - works with UTF-8. - * + * * Calls `mb_strtolower` if available and falls back to `strtolower` if not. - * + * * @param string $string * @return string * @api @@ -232,18 +232,18 @@ class Common /** * Sanitizes a string to help avoid XSS vulnerabilities. - * + * * This function is automatically called when {@link getRequestVar()} is called, * so you should not normally have to use it. - * + * * This function should be used when outputting data that isn't escaped and was * obtained from the user (for example when using the `|raw` twig filter on goal names). - * + * * _NOTE: Sanitized input should not be used directly in an SQL query; SQL placeholders * should still be used._ - * + * * **Implementation Details** - * + * * - [htmlspecialchars](http://php.net/manual/en/function.htmlspecialchars.php) is used to escape text. * - Single quotes are not escaped so **Piwik's amazing community** will still be * **Piwik's amazing community**. @@ -318,7 +318,7 @@ class Common /** * Unsanitizes a single input value and returns the result. - * + * * @param string $value * @return string unsanitized input */ @@ -332,10 +332,10 @@ class Common * * This method should be used when you need to unescape data that was obtained from * the user. - * + * * Some data in Piwik is stored sanitized (such as site name). In this case you may * have to use this method to unsanitize it in order to, for example, output it in JSON. - * + * * @param string|array $value The data to unsanitize. If an array is passed, the * array is sanitized recursively. Key values are not unsanitized. * @return string|array The unsanitized data. @@ -381,9 +381,9 @@ class Common /** * Gets a sanitized request parameter by name from the `$_GET` and `$_POST` superglobals. - * + * * Use this function to get request parameter values. **_NEVER use `$_GET` and `$_POST` directly._** - * + * * If the variable cannot be found, and a default value was not provided, an exception is raised. * * _See {@link sanitizeInputValues()} to learn more about sanitization._ @@ -393,7 +393,7 @@ class Common * @param string|null $varDefault The value to return if the request parameter cannot be found or has an empty value. * @param string|null $varType Expected type of the request variable. This parameters value must be one of the following: * `'array'`, `'int'`, `'integer'`, `'string'`, `'json'`. - * + * * If `'json'`, the string value will be `json_decode`-d and then sanitized. * @param array|null $requestArrayToUse The array to use instead of `$_GET` and `$_POST`. * @throws Exception If the request parameter doesn't exist and there is no default value, or if the request parameter @@ -1012,10 +1012,10 @@ class Common /** * Returns a string with a comma separated list of placeholders for use in an SQL query. Used mainly * to fill the `IN (...)` part of a query. - * + * * @param array|string $fields The names of the mysql table fields to bind, e.g. * `array(fieldName1, fieldName2, fieldName3)`. - * + * * _Note: The content of the array isn't important, just its length._ * @return string The placeholder string, e.g. `"?, ?, ?"`. * @api diff --git a/core/Config.php b/core/Config.php index 0c56f95b0cad010fdffb57806d050932a8ba18d7..f71baa710af491f5f0ed5ce5f14e94c15ffcdf80 100644 --- a/core/Config.php +++ b/core/Config.php @@ -13,13 +13,13 @@ use Exception; /** * Singleton that provides read & write access to Piwik's INI configuration. - * + * * This class reads and writes to the `config/config.ini.php` file. If config * options are missing from that file, this class will look for their default * values in `config/global.ini.php`. - * + * * ### Examples - * + * * **Getting a value:** * * // read the minimum_memory_limit option under the [General] section @@ -30,12 +30,12 @@ use Exception; * // set the minimum_memory_limit option * Config::getInstance()->General['minimum_memory_limit'] = 256; * Config::getInstance()->forceSave(); - * + * * **Setting an entire section:** - * + * * Config::getInstance()->MySection = array('myoption' => 1); * Config::getInstance()->forceSave(); - * + * * @method static \Piwik\Config getInstance() */ class Config extends Singleton diff --git a/core/Console.php b/core/Console.php index d03fe0501fa5ac919b55ba21e3bbe9f0c79bc33f..e0e9a3a32c5448a1bf1f0bf147c52e65d3049c9d 100644 --- a/core/Console.php +++ b/core/Console.php @@ -136,7 +136,7 @@ class Console extends Application $commands = array( 'Piwik\CliMulti\RequestCommand' ); - + if (class_exists('Piwik\Plugins\EnterpriseAdmin\EnterpriseAdmin')) { $extra = new \Piwik\Plugins\EnterpriseAdmin\EnterpriseAdmin(); $extra->addConsoleCommands($commands); diff --git a/core/CronArchive.php b/core/CronArchive.php index ae5c6fd8f91dc191ae2a75d53f2525369d06b49d..15493928761a7dc429ae9dcc8ce10572ec027c08 100644 --- a/core/CronArchive.php +++ b/core/CronArchive.php @@ -76,7 +76,7 @@ class CronArchive private $requests = 0; private $output = ''; private $archiveAndRespectTTL = true; - + private $lastSuccessRunTimestamp = false; private $errors = array(); private $isCoreInited = false; @@ -97,7 +97,7 @@ class CronArchive * The list of IDs of sites to ignore when launching archiving. Archiving will not be launched * for any site whose ID is in this list (even if the ID is supplied in {@link $shouldArchiveSpecifiedSites} * or if {@link $shouldArchiveAllSites} is true). - * + * * @var int[] */ public $shouldSkipSpecifiedSites = array(); @@ -921,10 +921,10 @@ class CronArchive /** * Triggered by the **core:archive** console command so plugins can modify the list of * websites that the archiving process will be launched for. - * + * * Plugins can use this hook to add websites to archive, remove websites to archive, or change * the order in which websites will be archived. - * + * * @param array $websiteIds The list of website IDs to launch the archiving process for. */ Piwik::postEvent('CronArchive.filterWebsiteIds', array(&$websiteIds)); diff --git a/core/DataAccess/LogAggregator.php b/core/DataAccess/LogAggregator.php index e790bab4580699166a06438588c4b63d93c1f8b0..d52ff8b7a067b7213db40ad4eda5a38ad8486dd8 100644 --- a/core/DataAccess/LogAggregator.php +++ b/core/DataAccess/LogAggregator.php @@ -17,43 +17,43 @@ use Piwik\Tracker\GoalManager; /** * Contains methods that calculate metrics by aggregating log data (visits, actions, conversions, * ecommerce items). - * + * * You can use the methods in this class within {@link Piwik\Plugin\Archiver Archiver} descendants * to aggregate log data without having to write SQL queries. - * + * * ### Aggregation Dimension - * + * * All aggregation methods accept a **dimension** parameter. These parameters are important as * they control how rows in a table are aggregated together. - * + * * A **_dimension_** is just a table column. Rows that have the same values for these columns are * aggregated together. The result of these aggregations is a set of metrics for every recorded value * of a **dimension**. - * + * * _Note: A dimension is essentially the same as a **GROUP BY** field._ - * + * * ### Examples - * + * * **Aggregating visit data** - * + * * $archiveProcessor = // ... * $logAggregator = $archiveProcessor->getLogAggregator(); - * + * * // get metrics for every used browser language of all visits by returning visitors * $query = $logAggregator->queryVisitsByDimension( * $dimensions = array('log_visit.location_browser_lang'), * $where = 'log_visit.visitor_returning = 1', - * + * * // also count visits for each browser language that are not located in the US * $additionalSelects = array('sum(case when log_visit.location_country <> 'us' then 1 else 0 end) as nonus'), - * + * * // we're only interested in visits, unique visitors & actions, so don't waste time calculating anything else * $metrics = array(Metrics::INDEX_NB_UNIQ_VISITORS, Metrics::INDEX_NB_VISITS, Metrics::INDEX_NB_ACTIONS), * ); * if ($query === false) { * return; * } - * + * * while ($row = $query->fetch()) { * $uniqueVisitors = $row[Metrics::INDEX_NB_UNIQ_VISITORS]; * $visits = $row[Metrics::INDEX_NB_VISITS]; @@ -136,7 +136,7 @@ class LogAggregator /** * Constructor. - * + * * @param \Piwik\ArchiveProcessor\Parameters $params */ public function __construct(Parameters $params) @@ -268,7 +268,7 @@ class LogAggregator * clause. These can be aggregate expressions, eg, `SUM(somecol)`. * @param bool|array $metrics The set of metrics to calculate and return. If false, the query will select * all of them. The following values can be used: - * + * * - {@link Piwik\Metrics::INDEX_NB_UNIQ_VISITORS} * - {@link Piwik\Metrics::INDEX_NB_VISITS} * - {@link Piwik\Metrics::INDEX_NB_ACTIONS} @@ -590,7 +590,7 @@ class LogAggregator * clause. These can be aggregate expressions, eg, `SUM(somecol)`. * @param bool|array $metrics The set of metrics to calculate and return. If `false`, the query will select * all of them. The following values can be used: - * + * * - {@link Piwik\Metrics::INDEX_NB_UNIQ_VISITORS} * - {@link Piwik\Metrics::INDEX_NB_VISITS} * - {@link Piwik\Metrics::INDEX_NB_ACTIONS} @@ -601,7 +601,7 @@ class LogAggregator * log_action should be joined on. The table alias used for each join * is `"log_action$i"` where `$i` is the index of the column in this * array. - * + * * If a string is used for this parameter, the table alias is not * suffixed (since there is only one column). * @return mixed A Zend_Db_Statement if `$rankingQuery` isn't supplied, otherwise the result of @@ -688,32 +688,32 @@ class LogAggregator * - **{@link Piwik\Metrics::INDEX_GOAL_ECOMMERCE_REVENUE_SUBTOTAL}**: The total cost of all ecommerce items sold * within these conversions. This value does not * include tax, shipping or any applied discount. - * + * * _This metric is only applicable to the special * **ecommerce** goal (where `idGoal == 'ecommerceOrder'`)._ * - **{@link Piwik\Metrics::INDEX_GOAL_ECOMMERCE_REVENUE_TAX}**: The total tax applied to every transaction in these * conversions. - * + * * _This metric is only applicable to the special * **ecommerce** goal (where `idGoal == 'ecommerceOrder'`)._ * - **{@link Piwik\Metrics::INDEX_GOAL_ECOMMERCE_REVENUE_SHIPPING}**: The total shipping cost for every transaction * in these conversions. - * + * * _This metric is only applicable to the special * **ecommerce** goal (where `idGoal == 'ecommerceOrder'`)._ * - **{@link Piwik\Metrics::INDEX_GOAL_ECOMMERCE_REVENUE_DISCOUNT}**: The total discount applied to every transaction * in these conversions. - * + * * _This metric is only applicable to the special * **ecommerce** goal (where `idGoal == 'ecommerceOrder'`)._ * - **{@link Piwik\Metrics::INDEX_GOAL_ECOMMERCE_ITEMS}**: The total number of ecommerce items sold in each transaction * in these conversions. - * + * * _This metric is only applicable to the special * **ecommerce** goal (where `idGoal == 'ecommerceOrder'`)._ - * + * * Additional data can be selected through the `$additionalSelects` parameter. - * + * * _Note: This method will only query the **log_conversion** table. Other tables cannot be joined * using this method._ * @@ -747,9 +747,9 @@ class LogAggregator * * **Note:** The result of this function is meant for use in the `$additionalSelects` parameter * in one of the query... methods (for example {@link queryVisitsByDimension()}). - * + * * **Example** - * + * * // summarize one column * $visitTotalActionsRanges = array( * array(1, 1), @@ -757,7 +757,7 @@ class LogAggregator * array(10) * ); * $selects = LogAggregator::getSelectsFromRangedColumn('visit_total_actions', $visitTotalActionsRanges, 'log_visit', 'vta'); - * + * * // summarize another column in the same request * $visitCountVisitsRanges = array( * array(1, 1), @@ -768,17 +768,17 @@ class LogAggregator * $selects, * LogAggregator::getSelectsFromRangedColumn('visitor_count_visits', $visitCountVisitsRanges, 'log_visit', 'vcv') * ); - * + * * // perform the query * $logAggregator = // get the LogAggregator somehow * $query = $logAggregator->queryVisitsByDimension($dimensions = array(), $where = false, $selects); * $tableSummary = $query->fetch(); - * + * * $numberOfVisitsWithOneAction = $tableSummary['vta0']; * $numberOfVisitsBetweenTwoAnd10 = $tableSummary['vta1']; - * + * * $numberOfVisitsWithVisitCountOfOne = $tableSummary['vcv0']; - * + * * @param string $column The name of a column in `$table` that will be summarized. * @param array $ranges The array of ranges over which the data in the table * will be summarized. For example, diff --git a/core/DataFiles/Socials.php b/core/DataFiles/Socials.php index 41f7f565c05a1864c697598bf2378c7c76e51c08..ffd8511c6bfa428e5d9da1460b98633724958603 100755 --- a/core/DataFiles/Socials.php +++ b/core/DataFiles/Socials.php @@ -219,7 +219,7 @@ if (!isset($GLOBALS['Piwik_socialUrl'])) { // Vimeo 'vimeo.com' => 'Vimeo', - + //tumblr 'tumblr.com' => 'tumblr', ); diff --git a/core/DataTable.php b/core/DataTable.php index 796bcd8ce4f9e2abf85e7bab6a0dde515cf048b3..3f112edb1f5700429aac2834db9abafa8c9c80bf 100644 --- a/core/DataTable.php +++ b/core/DataTable.php @@ -27,83 +27,83 @@ require_once PIWIK_INCLUDE_PATH . '/core/Common.php'; /** * The primary data structure used to store analytics data in Piwik. - * + * * <a name="class-desc-the-basics"></a> * ### The Basics - * + * * DataTables consist of rows and each row consists of columns. A column value can be * a numeric, a string or an array. - * + * * Every row has an ID. The ID is either the index of the row or {@link ID_SUMMARY_ROW}. - * + * * DataTables are hierarchical data structures. Each row can also contain an additional * nested sub-DataTable (commonly referred to as a 'subtable'). - * + * * Both DataTables and DataTable rows can hold **metadata**. _DataTable metadata_ is information * regarding all the data, such as the site or period that the data is for. _Row metadata_ * is information regarding that row, such as a browser logo or website URL. - * + * * Finally, all DataTables contain a special _summary_ row. This row, if it exists, is * always at the end of the DataTable. - * + * * ### Populating DataTables - * + * * Data can be added to DataTables in three different ways. You can either: - * + * * 1. create rows one by one and add them through {@link addRow()} then truncate if desired, * 2. create an array of DataTable\Row instances or an array of arrays and add them using * {@link addRowsFromArray()} or {@link addRowsFromSimpleArray()} * then truncate if desired, * 3. or set the maximum number of allowed rows (with {@link setMaximumAllowedRows()}) * and add rows one by one. - * + * * If you want to eventually truncate your data (standard practice for all Piwik plugins), * the third method is the most memory efficient. It is, unfortunately, not always possible * to use since it requires that the data be sorted before adding. - * + * * ### Manipulating DataTables - * + * * There are two ways to manipulate a DataTable. You can either: - * + * * 1. manually iterate through each row and manipulate the data, * 2. or you can use predefined filters. - * + * * A filter is a class that has a 'filter' method which will manipulate a DataTable in * some way. There are several predefined Filters that allow you to do common things, * such as, - * + * * - add a new column to each row, * - add new metadata to each row, * - modify an existing column value for each row, * - sort an entire DataTable, * - and more. - * + * * Using these filters instead of writing your own code will increase code clarity and * reduce code redundancy. Additionally, filters have the advantage that they can be * applied to DataTable\Map instances. So you can visit every DataTable in a {@link DataTable\Map} * without having to write a recursive visiting function. - * + * * All predefined filters exist in the **Piwik\DataTable\BaseFilter** namespace. - * + * * _Note: For convenience, [anonymous functions](http://www.php.net/manual/en/functions.anonymous.php) * can be used as DataTable filters._ - * + * * ### Applying Filters - * + * * Filters can be applied now (via {@link filter()}), or they can be applied later (via * {@link queueFilter()}). - * + * * Filters that sort rows or manipulate the number of rows should be applied right away. * Non-essential, presentation filters should be queued. - * + * * ### Learn more - * + * * - See **{@link ArchiveProcessor}** to learn how DataTables are persisted. - * + * * ### Examples - * + * * **Populating a DataTable** - * + * * // adding one row at a time * $dataTable = new DataTable(); * $dataTable->addRow(new Row(array( @@ -114,7 +114,7 @@ require_once PIWIK_INCLUDE_PATH . '/core/Common.php'; * Row::COLUMNS => array('label' => 'thing2', 'nb_visits' => 2, 'nb_actions' => 2), * Row::METADATA => array('url' => 'http://thing2.com') * ))); - * + * * // using an array of rows * $dataTable = new DataTable(); * $dataTable->addRowsFromArray(array( @@ -127,32 +127,32 @@ require_once PIWIK_INCLUDE_PATH . '/core/Common.php'; * Row::METADATA => array('url' => 'http://thing2.com') * ) * )); - * + * * // using a "simple" array * $dataTable->addRowsFromSimpleArray(array( * array('label' => 'thing1', 'nb_visits' => 1, 'nb_actions' => 1), * array('label' => 'thing2', 'nb_visits' => 2, 'nb_actions' => 2) * )); - * + * * **Getting & setting metadata** - * + * * $dataTable = \Piwik\Plugins\Referrers\API::getInstance()->getSearchEngines($idSite = 1, $period = 'day', $date = '2007-07-24'); * $oldPeriod = $dataTable->metadata['period']; * $dataTable->metadata['period'] = Period\Factory::build('week', Date::factory('2013-10-18')); - * + * * **Serializing & unserializing** - * + * * $maxRowsInTable = Config::getInstance()->General['datatable_archiving_maximum_rows_standard'];j - * + * * $dataTable = // ... build by aggregating visits ... * $serializedData = $dataTable->getSerialized($maxRowsInTable, $maxRowsInSubtable = $maxRowsInTable, * $columnToSortBy = Metrics::INDEX_NB_VISITS); - * + * * $serializedDataTable = $serializedData[0]; * $serailizedSubTable = $serializedData[$idSubtable]; - * + * * **Filtering for an API method** - * + * * public function getMyReport($idSite, $period, $date, $segment = false, $expanded = false) * { * $dataTable = Archive::getDataTableFromArchive('MyPlugin_MyReport', $idSite, $period, $date, $segment, $expanded); @@ -161,7 +161,7 @@ require_once PIWIK_INCLUDE_PATH . '/core/Common.php'; * $dataTable->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', __NAMESPACE__ . '\getUrlFromLabelForMyReport')); * return $dataTable; * } - * + * * * @api */ @@ -181,14 +181,14 @@ class DataTable implements DataTableInterface /** * Name for metadata that describes how individual columns should be aggregated when {@link addDataTable()} * or {@link Piwik\DataTable\Row::sumRow()} is called. - * + * * This metadata value must be an array that maps column names with valid operations. Valid aggregation operations are: - * + * * - `'skip'`: do nothing * - `'max'`: does `max($column1, $column2)` * - `'min'`: does `min($column1, $column2)` * - `'sum'`: does `$column1 + $column2` - * + * * See {@link addDataTable()} and {@link DataTable\Row::sumRow()} for more information. */ const COLUMN_AGGREGATION_OPS_METADATA_NAME = 'column_aggregation_ops'; @@ -290,7 +290,7 @@ class DataTable implements DataTableInterface /** * Table metadata. Read [this](#class-desc-the-basics) to learn more. - * + * * Any data that describes the data held in the table's rows should go here. * * @var array @@ -390,7 +390,7 @@ class DataTable implements DataTableInterface /** * Applies a filter to this datatable. - * + * * If {@link enableRecursiveFilters()} was called, the filter will be applied * to all subtables as well. * @@ -428,7 +428,7 @@ class DataTable implements DataTableInterface /** * Adds a filter and a list of parameters to the list of queued filters. These filters will be * executed when {@link applyQueuedFilters()} is called. - * + * * Filters that prettify the column values or don't need the full set of rows should be queued. This * way they will be run after the table is truncated which will result in better performance. * @@ -457,17 +457,17 @@ class DataTable implements DataTableInterface /** * Sums a DataTable to this one. - * + * * This method will sum rows that have the same label. If a row is found in `$tableToSum` whose * label is not found in `$this`, the row will be added to `$this`. - * + * * If the subtables for this table are loaded, they will be summed as well. - * + * * Rows are summed together by summing individual columns. By default columns are summed by * adding one column value to another. Some columns cannot be aggregated this way. In these * cases, the {@link COLUMN_AGGREGATION_OPS_METADATA_NAME} * metadata can be used to specify a different type of operation. - * + * * @param \Piwik\DataTable $tableToSum */ public function addDataTable(DataTable $tableToSum, $doAggregateSubTables = true) @@ -487,10 +487,10 @@ class DataTable implements DataTableInterface /** * Returns the Row whose `'label'` column is equal to `$label`. - * + * * This method executes in constant time except for the first call which caches row * label => row ID mappings. - * + * * @param string $label `'label'` column value to look for. * @return Row|false The row if found, `false` if otherwise. */ @@ -516,7 +516,7 @@ class DataTable implements DataTableInterface * * This method executes in constant time except for the first call which caches row * label => row ID mappings. - * + * * @param string $label `'label'` column value to look for. * @return int The row ID. */ @@ -591,7 +591,7 @@ class DataTable implements DataTableInterface /** * Returns the row that has a subtable with ID matching `$idSubtable`. - * + * * @param int $idSubTable The subtable ID. * @return Row|false The row or false if not found */ @@ -608,7 +608,7 @@ class DataTable implements DataTableInterface /** * Adds a row to this table. - * + * * If {@link setMaximumAllowedRows()} was called and the current row count is * at the maximum, the new row will be summed to the summary row. If there is no summary row, * this row is set as the summary row. @@ -648,7 +648,7 @@ class DataTable implements DataTableInterface /** * Sets the summary row. - * + * * _Note: A DataTable can have only one summary row._ * * @param Row $row @@ -683,7 +683,7 @@ class DataTable implements DataTableInterface /** * Adds a new row from an array. - * + * * You can add row metadata with this method. * * @param array $row eg. `array(Row::COLUMNS => array('visits' => 13, 'test' => 'toto'), @@ -696,7 +696,7 @@ class DataTable implements DataTableInterface /** * Adds a new row a from an array of column values. - * + * * Row metadata cannot be added with this method. * * @param array $row eg. `array('name' => 'google analytics', 'license' => 'commercial')` @@ -758,10 +758,10 @@ class DataTable implements DataTableInterface /** * Returns the names of every column this DataTable contains. This method will return the * columns of the first row with data and will assume they occur in every other row as well. - * + * *_ Note: If column names still use their in-database INDEX values (@see Metrics), they * will be converted to their string name in the array result._ - * + * * @return array Array of string column names. */ public function getColumns() @@ -787,7 +787,7 @@ class DataTable implements DataTableInterface /** * Returns an array containing the requested metadata value of each row. - * + * * @param string $name The metadata column to return. * @return array */ @@ -802,7 +802,7 @@ class DataTable implements DataTableInterface /** * Returns the number of rows in the table including the summary row. - * + * * @return int */ public function getRowsCount() @@ -999,7 +999,7 @@ class DataTable implements DataTableInterface /** * Returns a string representation of this DataTable for convenient viewing. - * + * * _Note: This uses the **html** DataTable renderer._ * * @return string @@ -1018,7 +1018,7 @@ class DataTable implements DataTableInterface * each row has a label that exists in the other table, and if each row * is equal to the row in the other table with the same label. The order * of rows is not important. - * + * * @param \Piwik\DataTable $table1 * @param \Piwik\DataTable $table2 * @return bool @@ -1048,10 +1048,10 @@ class DataTable implements DataTableInterface /** * Serializes an entire DataTable hierarchy and returns the array of serialized DataTables. - * + * * The first element in the returned array will be the serialized representation of this DataTable. * Every subsequent element will be a serialized subtable. - * + * * This DataTable and subtables can optionally be truncated before being serialized. In most * cases where DataTables can become quite large, they should be truncated before being persisted * in an archive. @@ -1063,7 +1063,7 @@ class DataTable implements DataTableInterface * @param int $maximumRowsInSubDataTable If not null, defines the maximum number of rows allowed in serialized subtables. * @param string $columnToSortByBeforeTruncation The column to sort by before truncating, eg, `Metrics::INDEX_NB_VISITS`. * @return array The array of serialized DataTables: - * + * * array( * // this DataTable (the root) * 0 => 'eghuighahgaueytae78yaet7yaetae', @@ -1073,7 +1073,7 @@ class DataTable implements DataTableInterface * * // another subtable * 2 => 'gqegJHUIGHEQjkgneqjgnqeugUGEQHGUHQE', - * + * * // etc. * ); */ @@ -1140,9 +1140,9 @@ class DataTable implements DataTableInterface * Adds a set of rows from a serialized DataTable string. * * See {@link serialize()}. - * + * * _Note: This function will successfully load DataTables serialized by Piwik 1.X._ - * + * * @param string $stringSerialized A string with the format of a string in the array returned by * {@link serialize()}. * @throws Exception if `$stringSerialized` is invalid. @@ -1150,7 +1150,7 @@ class DataTable implements DataTableInterface public function addRowsFromSerializedArray($stringSerialized) { require_once PIWIK_INCLUDE_PATH . "/core/DataTable/Bridges.php"; - + $serialized = unserialize($stringSerialized); if ($serialized === false) { throw new Exception("The unserialization has failed!"); @@ -1160,11 +1160,11 @@ class DataTable implements DataTableInterface /** * Adds multiple rows from an array. - * + * * You can add row metadata with this method. * * @param array $array Array with the following structure - * + * * array( * // row1 * array( @@ -1191,11 +1191,11 @@ class DataTable implements DataTableInterface /** * Adds multiple rows from an array containing arrays of column values. - * + * * Row metadata cannot be added with this method. * * @param array $array Array with the following structure: - * + * * array( * array( col1_name => valueA, col2_name => valueC, ...), * array( col1_name => valueB, col2_name => valueD, ...), @@ -1272,28 +1272,28 @@ class DataTable implements DataTableInterface /** * Rewrites the input `$array` - * + * * array ( * LABEL => array(col1 => X, col2 => Y), * LABEL2 => array(col1 => X, col2 => Y), * ) - * + * * to a DataTable with rows that look like: - * + * * array ( * array( Row::COLUMNS => array('label' => LABEL, col1 => X, col2 => Y)), * array( Row::COLUMNS => array('label' => LABEL2, col1 => X, col2 => Y)), * ) * - * Will also convert arrays like: - * + * Will also convert arrays like: + * * array ( * LABEL => X, * LABEL2 => Y, * ) - * + * * to: - * + * * array ( * array( Row::COLUMNS => array('label' => LABEL, 'value' => X)), * array( Row::COLUMNS => array('label' => LABEL2, 'value' => Y)), @@ -1327,11 +1327,11 @@ class DataTable implements DataTableInterface /** * Sets the maximum depth level to at least a certain value. If the current value is * greater than `$atLeastLevel`, the maximum nesting level is not changed. - * + * * The maximum depth level determines the maximum number of subtable levels in the * DataTable tree. For example, if it is set to `2`, this DataTable is allowed to * have subtables, but the subtables are not. - * + * * @param int $atLeastLevel */ public static function setMaximumDepthLevelAllowedAtLeast($atLeastLevel) @@ -1379,7 +1379,7 @@ class DataTable implements DataTableInterface /** * Sets several metadata values by name. - * + * * @param array $values Array mapping metadata names with metadata values. */ public function setMetadataValues($values) @@ -1391,7 +1391,7 @@ class DataTable implements DataTableInterface /** * Sets metadata, erasing existing values. - * + * * @param array $values Array mapping metadata names with metadata values. */ public function setAllTableMetadata($metadata) @@ -1415,14 +1415,14 @@ class DataTable implements DataTableInterface * Traverses a DataTable tree using an array of labels and returns the row * it finds or `false` if it cannot find one. The number of path segments that * were successfully walked is also returned. - * + * * If `$missingRowColumns` is supplied, the specified path is created. When * a subtable is encountered w/o the required label, a new row is created * with the label, and a new subtable is added to the row. * * Read [http://en.wikipedia.org/wiki/Tree_(data_structure)#Traversal_methods](http://en.wikipedia.org/wiki/Tree_(data_structure)#Traversal_methods) * for more information about tree walking. - * + * * @param array $path The path to walk. An array of label values. The first element * refers to a row in this DataTable, the second in a subtable of * the first row, the third a subtable of the second row, etc. @@ -1493,7 +1493,7 @@ class DataTable implements DataTableInterface * * @param string|bool $labelColumn If supplied the label of the parent row will be added to * a new column in each subtable row. - * + * * If set to, `'label'` each subtable row's label will be prepended * w/ the parent row's label. So `'child_label'` becomes * `'parent_label - child_label'`. @@ -1549,9 +1549,9 @@ class DataTable implements DataTableInterface /** * Returns a new DataTable created with data from a 'simple' array. - * + * * See {@link addRowsFromSimpleArray()}. - * + * * @param array $array * @return \Piwik\DataTable */ @@ -1564,7 +1564,7 @@ class DataTable implements DataTableInterface /** * Creates a new DataTable instance from a serialized DataTable string. - * + * * See {@link getSerialized()} and {@link addRowsFromSerializedArray()} * for more information on DataTable serialization. * diff --git a/core/DataTable/BaseFilter.php b/core/DataTable/BaseFilter.php index 7e8f1c4dd4a662a8d8c1a3bd9d1a69312846a56f..fb2dc009f9db209f26361e63b4051ae9c73737e6 100644 --- a/core/DataTable/BaseFilter.php +++ b/core/DataTable/BaseFilter.php @@ -13,7 +13,7 @@ use Piwik\DataTable\Row; /** * A filter is set of logic that manipulates a DataTable. Existing filters do things like, - * + * * - remove rows * - change column values (change string to lowercase, truncate, etc.) * - add/remove columns or metadata (compute percentage values, add an 'icon' metadata based on the label, etc.) @@ -22,10 +22,10 @@ use Piwik\DataTable\Row; * * Filters are called with a DataTable instance and extra parameters that are specified * in {@link Piwik\DataTable::filter()} and {@link Piwik\DataTable::queueFilter()}. - * + * * To see examples of Filters look at the existing ones in the Piwik\DataTable\BaseFilter * namespace. - * + * * @api */ abstract class BaseFilter @@ -37,7 +37,7 @@ abstract class BaseFilter /** * Constructor. - * + * * @param DataTable $table */ public function __construct(DataTable $table) diff --git a/core/DataTable/Filter/AddColumnsProcessedMetrics.php b/core/DataTable/Filter/AddColumnsProcessedMetrics.php index 8ad329e6104af7ccc8868fcba2e3ea7c71496e3c..f3d8191b1f9d40c149b2320d10eb4e286ea225c3 100644 --- a/core/DataTable/Filter/AddColumnsProcessedMetrics.php +++ b/core/DataTable/Filter/AddColumnsProcessedMetrics.php @@ -17,22 +17,22 @@ use Piwik\Metrics; * Adds processed metrics columns to a {@link DataTable} using metrics that already exist. * * Columns added are: - * + * * - **conversion_rate**: percent value of `nb_visits_converted / nb_visits * - **nb_actions_per_visit**: `nb_actions / nb_visits` * - **avg_time_on_site**: in number of seconds, `round(visit_length / nb_visits)`. Not * pretty formatted. * - **bounce_rate**: percent value of `bounce_count / nb_visits` - * + * * Adding the **filter_add_columns_when_show_all_columns** query parameter to * an API request will trigger the execution of this Filter. - * + * * _Note: This filter must be called before {@link ReplaceColumnNames} is called._ - * + * * **Basic usage example** - * + * * $dataTable->filter('AddColumnsProcessedMetrics'); - * + * * @api */ class AddColumnsProcessedMetrics extends BaseFilter @@ -43,7 +43,7 @@ class AddColumnsProcessedMetrics extends BaseFilter /** * Constructor. - * + * * @param DataTable $table The table to eventually filter. * @param bool $deleteRowsWithNoVisit Whether to delete rows with no visits or not. */ diff --git a/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php b/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php index 7f828a1f62dab52267e1c35b4179b1e0bda41c3a..742f1aef6ddb5f357fa3b0cb0bc76714aa2f0f2b 100644 --- a/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php +++ b/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php @@ -38,17 +38,17 @@ use Piwik\Tracker\GoalManager; * reports. * - **goal_%idGoal%_items**: number of items. Only for ecommerce order and abandoned cart * reports. - * + * * Adding the **filter_update_columns_when_show_all_goals** query parameter to * an API request will trigger the execution of this Filter. - * + * * _Note: This filter must be called before {@link ReplaceColumnNames} is called._ - * + * * **Basic usage example** - * + * * $dataTable->filter('AddColumnsProcessedMetricsGoal', * array($enable = true, $idGoal = Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_ORDER)); - * + * * @api */ class AddColumnsProcessedMetricsGoal extends AddColumnsProcessedMetrics @@ -72,7 +72,7 @@ class AddColumnsProcessedMetricsGoal extends AddColumnsProcessedMetrics /** * Constructor. - * + * * @param DataTable $table The table that will eventually filtered. * @param bool $enable Always set to true. * @param string $processOnlyIdGoal Defines what metrics to add (don't process metrics when you don't display them). diff --git a/core/DataTable/Filter/AddSummaryRow.php b/core/DataTable/Filter/AddSummaryRow.php index 09f6725db0d22be6219ef40022c689dbabb67ef8..9cb4b3e2f1a584b4b1f27646775ba5fa67ce9ff6 100644 --- a/core/DataTable/Filter/AddSummaryRow.php +++ b/core/DataTable/Filter/AddSummaryRow.php @@ -16,12 +16,12 @@ use Piwik\DataTable\Row\DataTableSummaryRow; * Adds a summary row to {@link DataTable}s that contains the sum of all other table rows. * * **Basic usage example** - * + * * $dataTable->filter('AddSummaryRow'); - * + * * // use a human readable label for the summary row (instead of '-1') * $dataTable->filter('AddSummaryRow', array($labelSummaryRow = Piwik::translate('General_Total'))); - * + * * @api */ class AddSummaryRow extends BaseFilter diff --git a/core/DataTable/Filter/BeautifyRangeLabels.php b/core/DataTable/Filter/BeautifyRangeLabels.php index 7f60bdd714e93489fb4ea14062f7b814df41669e..534f484bff1aebca0160eea7ef816df4fa001a3a 100644 --- a/core/DataTable/Filter/BeautifyRangeLabels.php +++ b/core/DataTable/Filter/BeautifyRangeLabels.php @@ -28,11 +28,11 @@ use Piwik\Piwik; * This filter can be extended to vary exactly how ranges are prettified based * on the range values found in the DataTable. To see an example of this, * take a look at the {@link BeautifyTimeRangeLabels} filter. - * + * * **Basic usage example** - * + * * $dataTable->queueFilter('BeautifyRangeLabels', array("1 visit", "%s visits")); - * + * * @api */ class BeautifyRangeLabels extends ColumnCallbackReplace diff --git a/core/DataTable/Filter/BeautifyTimeRangeLabels.php b/core/DataTable/Filter/BeautifyTimeRangeLabels.php index 1841d94f489e282cd71826124bd3f37494318bbc..aed7af7d8dcb6c03c1f677f6871243df69237162 100644 --- a/core/DataTable/Filter/BeautifyTimeRangeLabels.php +++ b/core/DataTable/Filter/BeautifyTimeRangeLabels.php @@ -17,11 +17,11 @@ use Piwik\DataTable; * This filter customizes the behavior of the {@link BeautifyRangeLabels} filter * so range values that are less than one minute are displayed in seconds but * other ranges are displayed in minutes. - * + * * **Basic usage** - * + * * $dataTable->filter('BeautifyTimeRangeLabels', array("%1$s-%2$s min", "1 min", "%s min")); - * + * * @api */ class BeautifyTimeRangeLabels extends BeautifyRangeLabels diff --git a/core/DataTable/Filter/CalculateEvolutionFilter.php b/core/DataTable/Filter/CalculateEvolutionFilter.php index 28022952e0dea60b371e91ecac727bc293456bf6..80f789919e6d65b1d46d7abd4e2cc8f5859be4a9 100755 --- a/core/DataTable/Filter/CalculateEvolutionFilter.php +++ b/core/DataTable/Filter/CalculateEvolutionFilter.php @@ -17,12 +17,12 @@ use Piwik\Site; * it to each row as a percentage. * * **This filter cannot be used as an argument to {@link Piwik\DataTable::filter()}** since - * it requires corresponding data from another DataTable. Instead, + * it requires corresponding data from another DataTable. Instead, * you must manually perform a binary filter (see the **MultiSites** API for an * example). * * The evolution metric is calculated as: - * + * * ((currentValue - pastValue) / pastValue) * 100 * * @api diff --git a/core/DataTable/Filter/ColumnCallbackAddColumn.php b/core/DataTable/Filter/ColumnCallbackAddColumn.php index 0084fd076bb2d09acaea11c1eb7f4b3215c187e3..27746c4f286098e087e445f19fad54e9c92a9424 100755 --- a/core/DataTable/Filter/ColumnCallbackAddColumn.php +++ b/core/DataTable/Filter/ColumnCallbackAddColumn.php @@ -13,13 +13,13 @@ use Piwik\DataTable\BaseFilter; /** * Adds a new column to every row of a {@link DataTable} based on the result of callback. - * + * * **Basic usage example** - * + * * $callback = function ($visits, $timeSpent) { * return round($timeSpent / $visits, 2); * }; - * + * * $dataTable->filter('ColumnCallbackAddColumn', array(array('nb_visits', 'sum_time_spent'), 'avg_time_on_site', $callback)); * * @api @@ -93,7 +93,7 @@ class ColumnCallbackAddColumn extends BaseFilter } $parameters = array_merge($columnValues, $functionParams); - + return call_user_func_array($functionToApply, $parameters); }); diff --git a/core/DataTable/Filter/ColumnCallbackAddColumnPercentage.php b/core/DataTable/Filter/ColumnCallbackAddColumnPercentage.php index de1e5e950a59f694862e51c954f9c8b08b84ec7b..056c1294400194cc397abc3a396d22cce6f69d8f 100644 --- a/core/DataTable/Filter/ColumnCallbackAddColumnPercentage.php +++ b/core/DataTable/Filter/ColumnCallbackAddColumnPercentage.php @@ -13,11 +13,11 @@ use Piwik\Piwik; /** * Calculates a percentage value for each row of a {@link DataTable} and adds the result * to each row. - * + * * See {@link ColumnCallbackAddColumnQuotient} for more information. * * **Basic usage example** - * + * * $nbVisits = // ... get the visits for a period ... * $dataTable->queueFilter('ColumnCallbackAddColumnPercentage', array('nb_visits', 'nb_visits_percentage', $nbVisits, 1)); * diff --git a/core/DataTable/Filter/ColumnCallbackAddColumnQuotient.php b/core/DataTable/Filter/ColumnCallbackAddColumnQuotient.php index d82599be5ccb484ee1ffd87f753da05f3b6b6ef3..5cc83d8e3d2c3ec9e20ae4bf325179ea7cc72204 100644 --- a/core/DataTable/Filter/ColumnCallbackAddColumnQuotient.php +++ b/core/DataTable/Filter/ColumnCallbackAddColumnQuotient.php @@ -15,14 +15,14 @@ use Piwik\DataTable\Row; /** * Calculates the quotient of two columns and adds the result as a new column * for each row of a DataTable. - * + * * This filter is used to calculate rate values (eg, `'bounce_rate'`), averages * (eg, `'avg_time_on_page'`) and other types of values. * * **Basic usage example** - * + * * $dataTable->queueFilter('ColumnCallbackAddColumnQuotient', array('bounce_rate', 'bounce_count', 'nb_visits', $precision = 2)); - * + * * @api */ class ColumnCallbackAddColumnQuotient extends BaseFilter @@ -38,7 +38,7 @@ class ColumnCallbackAddColumnQuotient extends BaseFilter /** * Constructor. - * + * * @param DataTable $table The DataTable that will eventually be filtered. * @param string $columnNameToAdd The name of the column to add the quotient value to. * @param string $columnValueToRead The name of the column that holds the dividend. diff --git a/core/DataTable/Filter/ColumnCallbackAddMetadata.php b/core/DataTable/Filter/ColumnCallbackAddMetadata.php index 1a2b9b27f732f0ac8f1d8a6c0a0d438977339383..e89000f8fdc6b99b893a0a1c3734078ac0191524 100644 --- a/core/DataTable/Filter/ColumnCallbackAddMetadata.php +++ b/core/DataTable/Filter/ColumnCallbackAddMetadata.php @@ -14,11 +14,11 @@ use Piwik\DataTable\BaseFilter; /** * Executes a callback for each row of a {@link DataTable} and adds the result as a new * row metadata value. - * + * * **Basic usage example** - * + * * $dataTable->filter('ColumnCallbackAddMetadata', array('label', 'logo', 'Piwik\Plugins\MyPlugin\getLogoFromLabel')); - * + * * @api */ class ColumnCallbackAddMetadata extends BaseFilter @@ -31,7 +31,7 @@ class ColumnCallbackAddMetadata extends BaseFilter /** * Constructor. - * + * * @param DataTable $table The DataTable instance that will be filtered. * @param string|array $columnsToRead The columns to read from each row and pass on to the callback. * @param string $metadataToAdd The name of the metadata field that will be added to each row. diff --git a/core/DataTable/Filter/ColumnCallbackDeleteRow.php b/core/DataTable/Filter/ColumnCallbackDeleteRow.php index f5883d1b6aa45ad049f77ef8bc9c84ba69268c58..189fbd3b814de902674913fe572d2d75f2adf5b2 100644 --- a/core/DataTable/Filter/ColumnCallbackDeleteRow.php +++ b/core/DataTable/Filter/ColumnCallbackDeleteRow.php @@ -15,12 +15,12 @@ use Piwik\DataTable\BaseFilter; * Deletes all rows for which a callback returns true. * * **Basic usage example** - * + * * $labelsToRemove = array('label1', 'label2', 'label2'); * $dataTable->filter('ColumnCallbackDeleteRow', array('label', function ($label) use ($labelsToRemove) { * return in_array($label, $labelsToRemove); * })); - * + * * @api */ class ColumnCallbackDeleteRow extends BaseFilter @@ -31,7 +31,7 @@ class ColumnCallbackDeleteRow extends BaseFilter /** * Constructor. - * + * * @param DataTable $table The DataTable that will be filtered eventually. * @param array|string $columnsToFilter The column or array of columns that should be * passed to the callback. diff --git a/core/DataTable/Filter/ColumnCallbackReplace.php b/core/DataTable/Filter/ColumnCallbackReplace.php index bec7d683f527c10229f4022d24b5cd0da709d284..e33dfa9a147b6070de57b60e29b684a268851011 100644 --- a/core/DataTable/Filter/ColumnCallbackReplace.php +++ b/core/DataTable/Filter/ColumnCallbackReplace.php @@ -15,9 +15,9 @@ use Piwik\DataTable\Row; /** * Replaces one or more column values in each row of a DataTable with the results * of a callback. - * + * * **Basic usage example** - * + * * $truncateString = function ($value, $truncateLength) { * if (strlen($value) > $truncateLength) { * return substr(0, $truncateLength); @@ -25,10 +25,10 @@ use Piwik\DataTable\Row; * return $value; * } * }; - * + * * // label, url and truncate_length are columns in $dataTable * $dataTable->filter('ColumnCallbackReplace', array('label', 'url'), $truncateString, null, array('truncate_length')); - * + * */ class ColumnCallbackReplace extends BaseFilter { @@ -39,7 +39,7 @@ class ColumnCallbackReplace extends BaseFilter /** * Constructor. - * + * * @param DataTable $table The DataTable to filter. * @param array|string $columnsToFilter The columns whose values should be passed to the callback * and then replaced with the callback's result. diff --git a/core/DataTable/Filter/ColumnDelete.php b/core/DataTable/Filter/ColumnDelete.php index 7631c7a9c2e36e5583c628cccfed251281447af5..976519c6fae220609a116f485dbbe099f1594213 100644 --- a/core/DataTable/Filter/ColumnDelete.php +++ b/core/DataTable/Filter/ColumnDelete.php @@ -16,15 +16,15 @@ use Piwik\DataTable\BaseFilter; * whitelist or both. * * This filter is used to handle the **hideColumn** and **showColumn** query parameters. - * + * * **Basic usage example** - * + * * $columnsToRemove = array('nb_hits', 'nb_pageviews'); * $dataTable->filter('ColumnDelete', array($columnsToRemove)); - * + * * $columnsToKeep = array('nb_visits'); * $dataTable->filter('ColumnDelete', array(array(), $columnsToKeep)); - * + * * @api */ class ColumnDelete extends BaseFilter diff --git a/core/DataTable/Filter/ExcludeLowPopulation.php b/core/DataTable/Filter/ExcludeLowPopulation.php index e346ea28fc89318da04e0f52d18a33d75552f8c2..ee135b59d6bc33696512f51ede870ac17c6bc50f 100644 --- a/core/DataTable/Filter/ExcludeLowPopulation.php +++ b/core/DataTable/Filter/ExcludeLowPopulation.php @@ -14,17 +14,17 @@ use Piwik\DataTable\BaseFilter; /** * Deletes all rows for which a specific column has a value that is lower than * specified minimum threshold value. - * + * * **Basic usage examples** - * + * * // remove all countries from UserCountry.getCountry that have less than 3 visits * $dataTable = // ... get a DataTable whose queued filters have been run ... * $dataTable->filter('ExcludeLowPopulation', array('nb_visits', 3)); - * + * * // remove all countries from UserCountry.getCountry whose percent of total visits is less than 5% * $dataTable = // ... get a DataTable whose queued filters have been run ... * $dataTable->filter('ExcludeLowPopulation', array('nb_visits', false, 0.05)); - * + * * // remove all countries from UserCountry.getCountry whose bounce rate is less than 10% * $dataTable = // ... get a DataTable that has a numerical bounce_rate column ... * $dataTable->filter('ExcludeLowPopulation', array('bounce_rate', 0.10)); @@ -50,7 +50,7 @@ class ExcludeLowPopulation extends BaseFilter * @param string $columnToFilter The name of the column whose value will determine whether * a row is deleted or not. * @param number|false $minimumValue The minimum column value. Rows with column values < - * this number will be deleted. If false, + * this number will be deleted. If false, * `$minimumPercentageThreshold` is used. * @param bool|float $minimumPercentageThreshold If supplied, column values must be a greater * percentage of the sum of all column values than diff --git a/core/DataTable/Filter/GroupBy.php b/core/DataTable/Filter/GroupBy.php index d783db8bca74376f1d59a3e4bdb8d7e59fe147c0..8633fb2e9d54df4ddf5e2557bbd41a25b4fc58b3 100755 --- a/core/DataTable/Filter/GroupBy.php +++ b/core/DataTable/Filter/GroupBy.php @@ -18,12 +18,12 @@ use Piwik\DataTable\BaseFilter; * _NOTE: This filter should never be queued, it must be applied directly on a {@link DataTable}._ * * **Basic usage example** - * + * * // group URLs by host * $dataTable->filter('GroupBy', array('label', function ($labelUrl) { * return parse_url($labelUrl, PHP_URL_HOST); * })); - * + * * @api */ class GroupBy extends BaseFilter diff --git a/core/DataTable/Filter/Limit.php b/core/DataTable/Filter/Limit.php index c06bac49c59b0fe774dcfcf19ac1b9b22fb33253..5cf848a50eef018579831464ef5fdf2dabe5bbd4 100644 --- a/core/DataTable/Filter/Limit.php +++ b/core/DataTable/Filter/Limit.php @@ -13,9 +13,9 @@ use Piwik\DataTable\BaseFilter; /** * Delete all rows from the table that are not in the given [offset, offset+limit) range. - * + * * **Basic example usage** - * + * * // delete all rows from 5 -> 15 * $dataTable->filter('Limit', array(5, 10)); * diff --git a/core/DataTable/Filter/MetadataCallbackAddMetadata.php b/core/DataTable/Filter/MetadataCallbackAddMetadata.php index 0f7af76a2915fc058205215c1fe838cab85b17a2..7f6aaef1235bdd0f98c82afb305ae9f402023987 100644 --- a/core/DataTable/Filter/MetadataCallbackAddMetadata.php +++ b/core/DataTable/Filter/MetadataCallbackAddMetadata.php @@ -16,7 +16,7 @@ use Piwik\DataTable\BaseFilter; * row as a metadata value. Only metadata values are passed to the callback. * * **Basic usage example** - * + * * // add a logo metadata based on the url metadata * $dataTable->filter('MetadataCallbackAddMetadata', array('url', 'logo', 'Piwik\Plugins\MyPlugin\getLogoFromUrl')); * @@ -31,7 +31,7 @@ class MetadataCallbackAddMetadata extends BaseFilter /** * Constructor. - * + * * @param DataTable $table The DataTable that will eventually be filtered. * @param string|array $metadataToRead The metadata to read from each row and pass to the callback. * @param string $metadataToAdd The name of the metadata to add. @@ -57,7 +57,7 @@ class MetadataCallbackAddMetadata extends BaseFilter /** * See {@link MetadataCallbackAddMetadata}. - * + * * @param DataTable $table */ public function filter($table) diff --git a/core/DataTable/Filter/MetadataCallbackReplace.php b/core/DataTable/Filter/MetadataCallbackReplace.php index 50e773c98eb6efe559af47088a6a78ef91cc14b3..cb04cdb164dcab0cc39ce6171d181f19cfce37fb 100644 --- a/core/DataTable/Filter/MetadataCallbackReplace.php +++ b/core/DataTable/Filter/MetadataCallbackReplace.php @@ -14,9 +14,9 @@ use Piwik\DataTable\Row; /** * Execute a callback for each row of a {@link DataTable} passing certain column values and metadata * as metadata, and replaces row metadata with the callback result. - * + * * **Basic usage example** - * + * * $dataTable->filter('MetadataCallbackReplace', array('url', function ($url) { * return $url . '#index'; * })); @@ -27,7 +27,7 @@ class MetadataCallbackReplace extends ColumnCallbackReplace { /** * Constructor. - * + * * @param DataTable $table The DataTable that will eventually be filtered. * @param array|string $metadataToFilter The metadata whose values should be passed to the callback * and then replaced with the callback's result. diff --git a/core/DataTable/Filter/Pattern.php b/core/DataTable/Filter/Pattern.php index 94893e6d9ecab75dc102733c8f06c7f41e8b0ebe..832fb856a210cf7140400351023f3bf598e052c9 100644 --- a/core/DataTable/Filter/Pattern.php +++ b/core/DataTable/Filter/Pattern.php @@ -13,9 +13,9 @@ use Piwik\DataTable\BaseFilter; /** * Deletes every row for which a specific column does not match a supplied regex pattern. - * + * * **Example** - * + * * // filter out all rows whose labels doesn't start with piwik * $dataTable->filter('Pattern', array('label', '^piwik')); * @@ -30,7 +30,7 @@ class Pattern extends BaseFilter /** * Constructor. - * + * * @param DataTable $table The table to eventually filter. * @param string $columnToFilter The column to match with the `$patternToSearch` pattern. * @param string $patternToSearch The regex pattern to use. @@ -74,7 +74,7 @@ class Pattern extends BaseFilter /** * See {@link Pattern}. - * + * * @param DataTable $table */ public function filter($table) diff --git a/core/DataTable/Filter/PatternRecursive.php b/core/DataTable/Filter/PatternRecursive.php index 10bf918f688b7cf82a6f376371a8e472aa7415db..697403c2e340d3c6b6341a16780958b908e0a56e 100644 --- a/core/DataTable/Filter/PatternRecursive.php +++ b/core/DataTable/Filter/PatternRecursive.php @@ -16,9 +16,9 @@ use Piwik\DataTable\Manager; /** * Deletes rows that do not contain a column that matches a regex pattern and do not contain a * subtable that contains a column that matches a regex pattern. - * + * * **Example** - * + * * // only display index pageviews in Actions.getPageUrls * $dataTable->filter('PatternRecursive', array('label', 'index')); * @@ -32,7 +32,7 @@ class PatternRecursive extends BaseFilter /** * Constructor. - * + * * @param DataTable $table The table to eventually filter. * @param string $columnToFilter The column to match with the `$patternToSearch` pattern. * @param string $patternToSearch The regex pattern to use. @@ -48,7 +48,7 @@ class PatternRecursive extends BaseFilter /** * See {@link PatternRecursive}. - * + * * @param DataTable $table * @return int The number of deleted rows. */ diff --git a/core/DataTable/Filter/ReplaceColumnNames.php b/core/DataTable/Filter/ReplaceColumnNames.php index 4dd3218902b42dc0a579bc645337444c1ee7a0c1..27875db41a7ebf0d9487835108a1995be085c9c7 100644 --- a/core/DataTable/Filter/ReplaceColumnNames.php +++ b/core/DataTable/Filter/ReplaceColumnNames.php @@ -18,15 +18,15 @@ use Piwik\Tracker\GoalManager; /** * Replaces column names in each row of a table using an array that maps old column * names new ones. - * + * * If no mapping is provided, this column will use one that maps index metric names * (which are integers) with their string column names. In the database, reports are * stored with integer metric names because it results in blobs that take up less space. * When loading the reports, the column names must be replaced, which is handled by this * class. (See {@link Piwik\Metrics} for more information about integer metric names.) - * + * * **Basic example** - * + * * // filter use in a plugin's API method * public function getMyReport($idSite, $period, $date, $segment = false, $expanded = false) * { @@ -34,7 +34,7 @@ use Piwik\Tracker\GoalManager; * $dataTable->queueFilter('ReplaceColumnNames'); * return $dataTable; * } - * + * * @api */ class ReplaceColumnNames extends BaseFilter @@ -43,14 +43,14 @@ class ReplaceColumnNames extends BaseFilter /** * Constructor. - * + * * @param DataTable $table The table that will be eventually filtered. * @param array|null $mappingToApply The name mapping to apply. Must map old column names * with new ones, eg, - * + * * array('OLD_COLUMN_NAME' => 'NEW_COLUMN NAME', * 'OLD_COLUMN_NAME2' => 'NEW_COLUMN NAME2') - * + * * If null, {@link Piwik\Metrics::$mappingFromIdToName} is used. */ public function __construct($table, $mappingToApply = null) diff --git a/core/DataTable/Filter/ReplaceSummaryRowLabel.php b/core/DataTable/Filter/ReplaceSummaryRowLabel.php index 23a59266914bdbd2972eb6cfb0ea8b48c4f0cc5e..3c1e31e2d0cd9a99e22c0fc3c2fb4b55536ae887 100644 --- a/core/DataTable/Filter/ReplaceSummaryRowLabel.php +++ b/core/DataTable/Filter/ReplaceSummaryRowLabel.php @@ -15,24 +15,24 @@ use Piwik\Piwik; /** * Replaces the label of the summary row with a supplied label. - * + * * This filter is only used to prettify the summary row label and so it should * always be queued on a {@link DataTable}. - * + * * This filter always recurses. In other words, this filter will always apply itself to * all subtables in the given {@link DataTable}'s table hierarchy. - * + * * **Basic example** - * + * * $dataTable->queueFilter('ReplaceSummaryRowLabel', array(Piwik::translate('General_Others'))); - * + * * @api */ class ReplaceSummaryRowLabel extends BaseFilter { /** * Constructor. - * + * * @param DataTable $table The table that will eventually be filtered. * @param string|null $newLabel The new label for summary row. If null, defaults to * `Piwik::translate('General_Others')`. diff --git a/core/DataTable/Filter/SafeDecodeLabel.php b/core/DataTable/Filter/SafeDecodeLabel.php index 8922482398fc637fac2578fef6964a35edf7e2e4..f2629618b1b80643cd9529181e87ed454a04bed7 100644 --- a/core/DataTable/Filter/SafeDecodeLabel.php +++ b/core/DataTable/Filter/SafeDecodeLabel.php @@ -13,7 +13,7 @@ use Piwik\DataTable\BaseFilter; /** * Sanitizes DataTable labels as an extra precaution. Called internally by Piwik. - * + * */ class SafeDecodeLabel extends BaseFilter { diff --git a/core/DataTable/Filter/Sort.php b/core/DataTable/Filter/Sort.php index e11749a0e44adb23eaeed4a0c8d0e8cfc97ce3a2..6ba2cd1ff06c3eaaf606fcda02aae101f84004ab 100644 --- a/core/DataTable/Filter/Sort.php +++ b/core/DataTable/Filter/Sort.php @@ -16,7 +16,7 @@ use Piwik\Metrics; /** * Sorts a {@link DataTable} based on the value of a specific column. - * + * * It is possible to specify a natural sorting (see [php.net/natsort](http://php.net/natsort) for details). * * @api @@ -28,7 +28,7 @@ class Sort extends BaseFilter /** * Constructor. - * + * * @param DataTable $table The table to eventually filter. * @param string $columnToSort The name of the column to sort by. * @param string $order order `'asc'` or `'desc'`. diff --git a/core/DataTable/Filter/Truncate.php b/core/DataTable/Filter/Truncate.php index 13d2a619c03498cfa00a3f184f23998c924573e5..192d85b82fdf38bcac8154c7c5b3e76c4d6daa52 100644 --- a/core/DataTable/Filter/Truncate.php +++ b/core/DataTable/Filter/Truncate.php @@ -16,26 +16,26 @@ use Piwik\Piwik; /** * Truncates a {@link DataTable} by merging all rows after a certain index into a new summary * row. If the count of rows is less than the index, nothing happens. - * + * * The {@link ReplaceSummaryRowLabel} filter will be queued after the table is truncated. - * + * * ### Examples - * + * * **Basic usage** - * + * * $dataTable->filter('Truncate', array($truncateAfter = 500)); - * + * * **Using a custom summary row label** - * + * * $dataTable->filter('Truncate', array($truncateAfter = 500, $summaryRowLabel = Piwik::translate('General_Total'))); - * + * * @api */ class Truncate extends BaseFilter { /** * Constructor. - * + * * @param DataTable $table The table that will be filtered eventually. * @param int $truncateAfter The row index to truncate at. All rows passed this index will * be removed. diff --git a/core/DataTable/Map.php b/core/DataTable/Map.php index 028c40b480757ea386a2e86cd6ee5adcf8e832f0..dd8bec7ca5b6d9dbed57556375ac857762d31608 100644 --- a/core/DataTable/Map.php +++ b/core/DataTable/Map.php @@ -15,10 +15,10 @@ use Piwik\DataTable\Renderer\Console; /** * Stores an array of {@link DataTable}s indexed by one type of {@link DataTable} metadata (such as site ID * or period). - * + * * DataTable Maps are returned on all queries that involve multiple sites and/or multiple * periods. The Maps will contain a {@link DataTable} for each site and period combination. - * + * * The Map implements some {@link DataTable} such as {@link queueFilter()} and {@link getRowsCount}. * * @@ -73,7 +73,7 @@ class Map implements DataTableInterface /** * Queue a filter to {@link DataTable} child of contained by this instance. - * + * * See {@link Piwik\DataTable::queueFilter()} for more information.. * * @param string|Closure $className Filter name, eg. `'Limit'` or a Closure. @@ -142,7 +142,7 @@ class Map implements DataTableInterface /** * Returns the last element in the Map's array. - * + * * @return DataTable|Map|false */ public function getLastRow() @@ -188,7 +188,7 @@ class Map implements DataTableInterface * Renames the given column in each contained {@link DataTable}. * * See {@link DataTable::renameColumn()}. - * + * * @param string $oldName * @param string $newName */ @@ -203,7 +203,7 @@ class Map implements DataTableInterface * Deletes the specified columns in each contained {@link DataTable}. * * See {@link DataTable::deleteColumns()}. - * + * * @param array $columns The columns to delete. * @param bool $deleteRecursiveInSubtables This param is currently not used. */ @@ -216,7 +216,7 @@ class Map implements DataTableInterface /** * Deletes a table from the array of DataTables. - * + * * @param string $id The label associated with {@link DataTable}. */ public function deleteRow($id) @@ -263,19 +263,19 @@ class Map implements DataTableInterface * The result of this function is determined by the type of DataTable * this instance holds. If this DataTable\Map instance holds an array * of DataTables, this function will transform it from: - * + * * Label 0: * DataTable(row1) * Label 1: * DataTable(row2) - * + * * to: - * + * * DataTable(row1[label = 'Label 0'], row2[label = 'Label 1']) * * If this instance holds an array of DataTable\Maps, this function will * transform it from: - * + * * Outer Label 0: // the outer DataTable\Map * Inner Label 0: // one of the inner DataTable\Maps * DataTable(row1) @@ -286,9 +286,9 @@ class Map implements DataTableInterface * DataTable(row3) * Inner Label 1: * DataTable(row4) - * + * * to: - * + * * Inner Label 0: * DataTable(row1[label = 'Outer Label 0'], row3[label = 'Outer Label 1']) * Inner Label 1: @@ -366,11 +366,11 @@ class Map implements DataTableInterface /** * Sums a DataTable to all the tables in this array. - * + * * _Note: Will only add `$tableToSum` if the childTable has some rows._ * * See {@link Piwik\DataTable::addDataTable()}. - * + * * @param DataTable $tableToSum */ public function addDataTable(DataTable $tableToSum) diff --git a/core/DataTable/Row.php b/core/DataTable/Row.php index 18a72283594f1431e0f1c520ce9e61573139ba70..3612cbe96af8eabb8519206b7b11d5baae22e981 100644 --- a/core/DataTable/Row.php +++ b/core/DataTable/Row.php @@ -14,7 +14,7 @@ use Piwik\Metrics; /** * This is what a {@link Piwik\DataTable} is composed of. - * + * * DataTable rows contain columns, metadata and a subtable ID. Columns and metadata * are stored as an array of name => value mappings. * @@ -59,7 +59,7 @@ class Row * Constructor. * * @param array $row An array with the following structure: - * + * * array( * Row::COLUMNS => array('label' => 'Piwik', * 'column1' => 42, @@ -264,7 +264,7 @@ class Row * Returns the array containing all the columns. * * @return array Example: - * + * * array( * 'column1' => VALUE, * 'label' => 'www.php.net' @@ -315,9 +315,9 @@ class Row /** * Sums a DataTable to this row's subtable. If this row has no subtable a new * one is created. - * + * * See {@link Piwik\DataTable::addDataTable()} to learn how DataTables are summed. - * + * * @param DataTable $subTable Table to sum to this row's subtable. */ public function sumSubtable(DataTable $subTable) @@ -495,7 +495,7 @@ class Row * Sums the given `$rowToSum` columns values to the existing row column values. * Only the int or float values will be summed. Label columns will be ignored * even if they have a numeric value. - * + * * Columns in `$rowToSum` that don't exist in `$this` are added to `$this`. * * @param \Piwik\DataTable\Row $rowToSum The row to sum to this row. @@ -573,7 +573,7 @@ class Row /** * Sums the metadata in `$rowToSum` with the metadata in `$this` row. - * + * * @param Row $rowToSum */ public function sumRowMetadata($rowToSum) @@ -597,7 +597,7 @@ class Row /** * Returns `true` if this row is the summary row, `false` if otherwise. This function * depends on the label of the row, and so, is not 100% accurate. - * + * * @return bool */ public function isSummaryRow() @@ -679,10 +679,10 @@ class Row * Helper function that tests if two rows are equal. * * Two rows are equal if: - * + * * - they have exactly the same columns / metadata * - they have a subDataTable associated, then we check that both of them are the same. - * + * * Column order is not important. * * @param \Piwik\DataTable\Row $row1 first to compare diff --git a/core/DataTable/Row/DataTableSummaryRow.php b/core/DataTable/Row/DataTableSummaryRow.php index 480631f2b8fc6ebe66367d4e4246b9ad23b89ff0..7d477a304cee1ef7737a45ffcbc9e5bc9d45049d 100644 --- a/core/DataTable/Row/DataTableSummaryRow.php +++ b/core/DataTable/Row/DataTableSummaryRow.php @@ -14,9 +14,9 @@ use Piwik\DataTable\Row; /** * A special row whose column values are the aggregate of the row's subtable. - * + * * This class creates sets its own columns to the sum of each row in the row's subtable. - * + * * Non-numeric columns are bypassed during summation and do not appear in this * rows columns. * @@ -27,7 +27,7 @@ class DataTableSummaryRow extends Row { /** * Constructor. - * + * * @param DataTable|null $subTable The subtable of this row. This parameter is mostly for * convenience. If set, its rows will be summed to this one, * but it will not be set as this row's subtable (so diff --git a/core/DataTable/Simple.php b/core/DataTable/Simple.php index f21aa62b9d539831fbe5887ccda2c85ee55473ae..018818c203ce3927c93806f9bb81a31182d9e8e4 100644 --- a/core/DataTable/Simple.php +++ b/core/DataTable/Simple.php @@ -12,7 +12,7 @@ use Piwik\DataTable; /** * A {@link Piwik\DataTable} where every row has two columns: **label** and **value**. - * + * * Simple DataTables are only used to slightly alter the output of some renderers * (notably the XML renderer). * @@ -25,7 +25,7 @@ class Simple extends DataTable * values. * * @param array $array Array containing the rows, eg, - * + * * array( * 'Label row 1' => $value1, * 'Label row 2' => $value2, diff --git a/core/Date.php b/core/Date.php index 09205abac70dff10a5aaca06638465d6296be624..7af59e1f2aa58e1d1f2b9f9a1dfd3d55ebde05d3 100644 --- a/core/Date.php +++ b/core/Date.php @@ -14,22 +14,22 @@ use Exception; /** * Utility class that wraps date/time related PHP functions. Using this class can * be easier than using `date`, `time`, `date_default_timezone_set`, etc. - * + * * ### Performance concerns - * + * * The helper methods in this class are instance methods and thus `Date` instances * need to be constructed before they can be used. The memory allocation can result * in noticeable performance degradation if you construct thousands of Date instances, * say, in a loop. - * + * * ### Examples - * + * * **Basic usage** - * + * * $date = Date::factory('2007-07-24 14:04:24', 'EST'); * $date->addHour(5); * echo $date->getLocalized("%longDay% the %day% of %longMonth% at %time%"); - * + * * @api */ class Date @@ -164,7 +164,7 @@ class Date /** * Returns a new date object with the same timestamp as `$this` but with a new * timezone. - * + * * See {@link getTimestamp()} to see how the timezone is used. * * @param string $timezone eg, `'UTC'`, `'Europe/London'`, etc. @@ -383,7 +383,7 @@ class Date /** * Returns `true` if current date is today. - * + * * @return bool */ public function isToday() @@ -560,9 +560,9 @@ class Date /** * Returns a localized date string using the given template. * The template should contain tags that will be replaced with localized date strings. - * + * * Allowed tags include: - * + * * - **%day%**: replaced with the day of the month without leading zeros, eg, **1** or **20**. * - **%shortMonth%**: the short month in the current language, eg, **Jan**, **Feb**. * - **%longMonth%**: the whole month name in the current language, eg, **January**, **February**. diff --git a/core/Db.php b/core/Db.php index 427ce1cd3177556406042da3f7215741349ef083..e0393f6a3ca23638da7a861c8a349f201e783452 100644 --- a/core/Db.php +++ b/core/Db.php @@ -14,21 +14,21 @@ use Piwik\Tracker; /** * Contains SQL related helper functions for Piwik's MySQL database. - * + * * Plugins should always use this class to execute SQL against the database. - * + * * ### Examples - * + * * $rows = Db::fetchAll("SELECT col1, col2 FROM mytable WHERE thing = ?", array('thingvalue')); * foreach ($rows as $row) { * doSomething($row['col1'], $row['col2']); * } - * + * * $value = Db::fetchOne("SELECT MAX(col1) FROM mytable"); * doSomethingElse($value); - * + * * Db::query("DELETE FROM mytable WHERE id < ?", array(23)); - * + * * @api */ class Db @@ -88,9 +88,9 @@ class Db /** * Connects to the database. - * + * * Shouldn't be called directly, use {@link get()} instead. - * + * * @param array|null $dbConfig Connection parameters in an array. Defaults to the `[database]` * INI config section. */ @@ -145,7 +145,7 @@ class Db /** * Executes an SQL query and returns the [Zend_Db_Statement](http://framework.zend.com/manual/1.12/en/zend.db.statement.html) * for the query. - * + * * This method is meant for non-query SQL statements like `INSERT` and `UPDATE. If you want to fetch * data from the DB you should use one of the fetch... functions. * @@ -247,16 +247,16 @@ class Db /** * Deletes all desired rows in a table, while using a limit. This function will execute many * DELETE queries until there are no more rows to delete. - * + * * Use this function when you need to delete many thousands of rows from a table without * locking the table for too long. - * + * * **Example** - * + * * // delete all visit rows whose ID is less than a certain value, 100000 rows at a time * $idVisit = // ... * Db::deleteAllRows(Common::prefixTable('log_visit'), "WHERE idvisit <= ?", "idvisit ASC", 100000, array($idVisit)); - * + * * @param string $table The name of the table to delete from. Must be prefixed (see {@link Piwik\Common::prefixTable()}). * @param string $where The where clause of the query. Must include the WHERE keyword. * @param $orderBy The column to order by and the order by direction, eg, `idvisit ASC`. @@ -285,7 +285,7 @@ class Db /** * Runs an `OPTIMIZE TABLE` query on the supplied table or tables. - * + * * Tables will only be optimized if the `[General] enable_sql_optimize_queries` INI config option is * set to **1**. * @@ -370,10 +370,10 @@ class Db /** * Locks the supplied table or tables. - * + * * **NOTE:** Piwik does not require the `LOCK TABLES` privilege to be available. Piwik * should still work if it has not been granted. - * + * * @param string|array $tablesToRead The table or tables to obtain 'read' locks on. Table names must * be prefixed (see {@link Piwik\Common::prefixTable()}). * @param string|array $tablesToWrite The table or tables to obtain 'write' locks on. Table names must @@ -405,7 +405,7 @@ class Db * * **NOTE:** Piwik does not require the `LOCK TABLES` privilege to be available. Piwik * should still work if it has not been granted. - * + * * @return \Zend_Db_Statement */ public static function unlockAllTables() @@ -416,7 +416,7 @@ class Db /** * Performs a `SELECT` statement on a table one chunk at a time and returns the first * successfully fetched value. - * + * * This function will execute a query on one set of rows in a table. If nothing * is fetched, it will execute the query on the next set of rows and so on until * the query returns a value. @@ -425,10 +425,10 @@ class Db * should be used when performing a `SELECT` that can take a long time to finish. * Using several smaller `SELECT`s will ensure that the table will not be locked * for too long. - * + * * **Example** - * - * // find the most recent visit that is older than a certain date + * + * // find the most recent visit that is older than a certain date * $dateStart = // ... * $sql = "SELECT idvisit * FROM $logVisit @@ -469,11 +469,11 @@ class Db /** * Performs a `SELECT` on a table one chunk at a time and returns an array * of every fetched value. - * + * * This function will break up a `SELECT` query into several smaller queries by * using only a limited number of rows at a time. It will accumulate the results * of each smaller query and return the result. - * + * * This function should be used when performing a `SELECT` that can * take a long time to finish. Using several smaller queries will ensure that * the table will not be locked for too long. @@ -509,11 +509,11 @@ class Db * This function will break up a `SELECT` query into several smaller queries by * using only a limited number of rows at a time. It will accumulate the results * of each smaller query and return the result. - * + * * This function should be used when performing a `SELECT` that can * take a long time to finish. Using several smaller queries will ensure that * the table will not be locked for too long. - * + * * @param string $sql The SQL to perform. The last two conditions of the `WHERE` * expression must be as follows: `'id >= ? AND id < ?'` where * **id** is the int id of the table. @@ -543,14 +543,14 @@ class Db /** * Performs a `UPDATE` or `DELETE` statement on a table one chunk at a time. - * + * * This function will break up a query into several smaller queries by * using only a limited number of rows at a time. - * + * * This function should be used when executing a non-query statement will * take a long time to finish. Using several smaller queries will ensure that * the table will not be locked for too long. - * + * * @param string $sql The SQL to perform. The last two conditions of the `WHERE` * expression must be as follows: `'id >= ? AND id < ?'` where * **id** is the int id of the table. diff --git a/core/Filesystem.php b/core/Filesystem.php index bcf36d29e1a4ad6221f0bac7d2b239609d40bb7d..ca0a30d5e2347b4e941ed1a4e766b0bebe6d7da3 100644 --- a/core/Filesystem.php +++ b/core/Filesystem.php @@ -14,7 +14,7 @@ use Piwik\Tracker\Cache; /** * Contains helper functions that deal with the filesystem. - * + * */ class Filesystem { @@ -70,7 +70,7 @@ class Filesystem /** * Attempts to create a new directory. All errors are silenced. - * + * * _Note: This function does **not** create directories recursively._ * * @param string $path The path of the directory to create. @@ -143,7 +143,7 @@ class Filesystem /** * Recursively find pathnames that match a pattern. - * + * * See {@link http://php.net/manual/en/function.glob.php glob} for more info. * * @param string $sDir directory The directory to glob in. @@ -239,7 +239,7 @@ class Filesystem /** * Copies the contents of a directory recursively from `$source` to `$target`. - * + * * @param string $source A directory or file to copy, eg. './tmp/latest'. * @param string $target A directory to copy to, eg. '.'. * @param bool $excludePhp Whether to avoid copying files if the file is related to PHP diff --git a/core/FrontController.php b/core/FrontController.php index 4de8eb4379aa02de8f912c8410837e9d99cfbaba..dc10f72e94e186d8905de9b5b6273ad21b5c0d57 100644 --- a/core/FrontController.php +++ b/core/FrontController.php @@ -20,14 +20,14 @@ use Piwik\Plugins\CoreHome\Controller as CoreHomeController; /** * This singleton dispatches requests to the appropriate plugin Controller. - * + * * Piwik uses this class for all requests that go through **index.php**. Plugins can * use it to call controller actions of other plugins. - * + * * ### Examples - * + * * **Forwarding controller requests** - * + * * public function myConfiguredRealtimeMap() * { * $_GET['changeVisitAlpha'] = false; @@ -35,16 +35,16 @@ use Piwik\Plugins\CoreHome\Controller as CoreHomeController; * $_GET['showFooterMessage'] = false; * return FrontController::getInstance()->dispatch('UserCountryMap', 'realtimeMap'); * } - * + * * **Using other plugin controller actions** - * + * * public function myPopupWithRealtimeMap() * { * $_GET['changeVisitAlpha'] = false; * $_GET['removeOldVisits'] = false; * $_GET['showFooterMessage'] = false; * $realtimeMap = FrontController::getInstance()->fetchDispatch('UserCountryMap', 'realtimeMap'); - * + * * $view = new View('@MyPlugin/myPopupWithRealtimeMap.twig'); * $view->realtimeMap = $realtimeMap; * return $realtimeMap->render(); @@ -66,7 +66,7 @@ class FrontController extends Singleton /** * Executes the requested plugin controller method. - * + * * @throws Exception|\Piwik\PluginDeactivatedException in case the plugin doesn't exist, the action doesn't exist, * there is not enough permission, etc. * @@ -90,10 +90,10 @@ class FrontController extends Singleton /** * Triggered when a user with insufficient access permissions tries to view some resource. - * + * * This event can be used to customize the error that occurs when a user is denied access * (for example, displaying an error message, redirecting to a page other than login, etc.). - * + * * @param \Piwik\NoAccessException $exception The exception that was caught. */ Piwik::postEvent('User.isNotAuthorized', array($exception), $pending = true); @@ -181,10 +181,10 @@ class FrontController extends Singleton /** * Executes the requested plugin controller method and returns the data, capturing anything the * method `echo`s. - * + * * _Note: If the plugin controller returns something, the return value is returned instead * of whatever is in the output buffer._ - * + * * @param string $module The name of the plugin whose controller to execute, eg, `'UserCountryMap'`. * @param string $action The controller action name, eg, `'realtimeMap'`. * @param array $parameters Array of parameters to pass to the controller action method. @@ -268,9 +268,9 @@ class FrontController extends Singleton /** * Triggered when the configuration file cannot be found or read, which usually * means Piwik is not installed yet. - * + * * This event can be used to start the installation process or to display a custom error message. - * + * * @param Exception $exception The exception that was thrown by `Config::getInstance()`. */ Piwik::postEvent('Config.NoConfigurationFile', array($exception), $pending = true); @@ -379,9 +379,9 @@ class FrontController extends Singleton /** * Triggered just after the platform is initialized and plugins are loaded. - * + * * This event can be used to do early initialization. - * + * * _Note: At this point the user is not authenticated yet._ */ Piwik::postEvent('Request.dispatchCoreAndPluginUpdatesScreen'); @@ -396,12 +396,12 @@ class FrontController extends Singleton /** * Triggered before the user is authenticated, when the global authentication object * should be created. - * + * * Plugins that provide their own authentication implementation should use this event * to set the global authentication object (which must derive from {@link Piwik\Auth}). - * + * * **Example** - * + * * Piwik::addAction('Request.initAuthenticationObject', function() { * Piwik\Registry::set('auth', new MyAuthImplementation()); * }); @@ -430,7 +430,7 @@ class FrontController extends Singleton /** * Triggered after the platform is initialized and after the user has been authenticated, but * before the platform has handled the request. - * + * * Piwik uses this event to check for updates to Piwik. */ Piwik::postEvent('Platform.initialized'); diff --git a/core/Http.php b/core/Http.php index 7eb9ea94f9f3f35440b74855d59ebad3b18544d4..6645edfb228b053f36a0bae0ad50475bf6ca2139 100644 --- a/core/Http.php +++ b/core/Http.php @@ -13,7 +13,7 @@ use Exception; /** * Contains HTTP client related helper methods that can retrieve content from remote servers * and optionally save to a local file. - * + * * Used to check for the latest Piwik version and download updates. * */ @@ -21,7 +21,7 @@ class Http { /** * Returns the "best" available transport method for {@link sendHttpRequest()} calls. - * + * * @return string Either `'curl'`, `'fopen'` or `'socket'`. * @api */ @@ -70,11 +70,11 @@ class Http * is returned on failure. * If `$getExtendedInfo` is `true` and `$destinationPath` is not specified an array with * the following information is returned on success: - * + * * - **status**: the HTTP status code * - **headers**: the HTTP headers * - **data**: the HTTP response data - * + * * `false` is still returned on failure. * @api */ @@ -544,17 +544,17 @@ class Http * is determined by the existing file's size and the expected file size, which * is stored in the piwik_option table before starting a download. The expected * file size is obtained through a `HEAD` HTTP request. - * + * * _Note: this function uses the **Range** HTTP header to accomplish downloading in * parts. Not every server supports this header._ - * + * * The proper use of this function is to call it once per request. The browser * should continue to send requests to Piwik which will in turn call this method * until the file has completely downloaded. In this way, the user can be informed * of a download's progress. - * + * * **Example Usage** - * + * * ``` * // browser JavaScript * var downloadFile = function (isStart) { @@ -572,10 +572,10 @@ class Http * }); * ajax.send(); * } - * + * * downloadFile(true); * ``` - * + * * ``` * // PHP controller action * public function myAction() @@ -585,7 +585,7 @@ class Http * Http::downloadChunk("http://bigfiles.com/averybigfile.zip", $outputPath, $isStart == 1); * } * ``` - * + * * @param string $url The url to download from. * @param string $outputPath The path to the file to save/append to. * @param bool $isContinuation `true` if this is the continuation of a download, diff --git a/core/IP.php b/core/IP.php index ca9d2702afbf2325d1de3dcf88ac0c863aea9f94..52f5f7c23ff88c70cd67557042fc76db0c2b8478 100644 --- a/core/IP.php +++ b/core/IP.php @@ -246,7 +246,7 @@ class IP /** * Returns an IPv4 address from a 'mapped' IPv6 address. - * + * * @param string $ip eg, `'::ffff:192.0.2.128'` * @return string eg, `'192.0.2.128'` */ diff --git a/core/Log.php b/core/Log.php index 34364978840ede5ba92143055c697d52b5953a36..db3961923d12bca0aa9b7e742cae7c18837e9bbf 100644 --- a/core/Log.php +++ b/core/Log.php @@ -12,29 +12,29 @@ use Piwik\Db; /** * Logging utility class. - * + * * Log entries are made with a message and log level. The logging utility will tag each * log entry with the name of the plugin that's doing the logging. If no plugin is found, * the name of the current class is used. - * + * * You can log messages using one of the public static functions (eg, 'error', 'warning', * 'info', etc.). Messages logged with the **error** level will **always** be logged to * the screen, regardless of whether the [log] log_writer config option includes the * screen writer. * * Currently, Piwik supports the following logging backends: - * + * * - **screen**: logging to the screen * - **file**: logging to a file * - **database**: logging to Piwik's MySQL database * * ### Logging configuration - * + * * The logging utility can be configured by manipulating the INI config options in the * `[log]` section. - * + * * The following configuration options can be set: - * + * * - `log_writers[]`: This is an array of log writer IDs. The three log writers provided * by Piwik core are **file**, **screen** and **database**. You can * get more by installing plugins. The default value is **screen**. @@ -51,53 +51,53 @@ use Piwik\Db; * to log to or a path to a directory to store logs in. If a * directory, the file name is piwik.log. Can be relative to * Piwik's root dir or an absolute path. Defaults to **tmp/logs**. - * + * * ### Custom message formatting - * + * * If you'd like to format log messages differently for different backends, you can use * one of the `'Log.format...Message'` events. - * + * * These events are fired when an object is logged. You can create your own custom class * containing the information to log and listen to these events to format it correctly for * different backends. - * + * * If you don't care about the backend when formatting an object, implement a `__toString()` * in the custom class. - * + * * ### Custom log writers - * + * * New logging backends can be added via the {@hook Log.getAvailableWriters}` event. A log * writer is just a callback that accepts log entry information (such as the message, * level, etc.), so any backend could conceivably be used (including existing PSR3 * backends). - * + * * ### Examples - * + * * **Basic logging** - * + * * Log::error("This log message will end up on the screen and in a file.") * Log::verbose("This log message uses %s params, but %s will only be called if the" * . " configured log level includes %s.", "sprintf", "sprintf", "verbose"); - * + * * **Logging objects** - * + * * class MyDebugInfo * { * // ... - * + * * public function __toString() * { * return // ... * } * } - * + * * try { * $myThirdPartyServiceClient->doSomething(); * } catch (Exception $unexpectedError) { * $debugInfo = new MyDebugInfo($unexpectedError, $myThirdPartyServiceClient); * Log::debug($debugInfo); * } - * + * * @method static \Piwik\Log getInstance() */ class Log extends Singleton @@ -331,7 +331,7 @@ class Log extends Singleton * make new logging writers available. * * A logging writer is a callback with the following signature: - * + * * function (int $level, string $tag, string $datetime, string $message) * * `$level` is the log level to use, `$tag` is the log tag used, `$datetime` is the date time @@ -341,7 +341,7 @@ class Log extends Singleton * name specified can be used in Piwik's INI configuration. * * **Example** - * + * * public function getAvailableWriters(&$writers) { * $writers['myloggername'] = function ($level, $tag, $datetime, $message) { * // ... @@ -349,7 +349,7 @@ class Log extends Singleton * } * * // 'myloggername' can now be used in the log_writers config option. - * + * * @param array $writers Array mapping writer names with logging writers. */ Piwik::postEvent(self::GET_AVAILABLE_WRITERS_EVENT, array(&$writers)); diff --git a/core/Menu/MenuAbstract.php b/core/Menu/MenuAbstract.php index 3c3fd4e01309d4a5b39f5c17703026b1290bb909..baf5c659cbdb6e6e78cc4288399601bdc9b963f7 100644 --- a/core/Menu/MenuAbstract.php +++ b/core/Menu/MenuAbstract.php @@ -16,11 +16,11 @@ use Piwik\Plugin\Manager as PluginManager; /** * Base class for classes that manage one of Piwik's menus. - * + * * There are three menus in Piwik, the main menu, the top menu and the admin menu. * Each menu has a class that manages the menu's content. Each class invokes * a different event to allow plugins to add new menu items. - * + * * @static \Piwik\Menu\MenuAbstract getInstance() */ abstract class MenuAbstract extends Singleton diff --git a/core/Menu/MenuAdmin.php b/core/Menu/MenuAdmin.php index cff021bb568835677ddf08d189cdb1b4eac02655..5c814b6706014781c5cf5ba1e89ff1aeb38146f4 100644 --- a/core/Menu/MenuAdmin.php +++ b/core/Menu/MenuAdmin.php @@ -14,7 +14,7 @@ use Piwik\Piwik; * Contains menu entries for the Admin menu. * Plugins can implement the `configureAdminMenu()` method of the `Menu` plugin class to add, rename of remove * items. If your plugin does not have a `Menu` class yet you can create one using `./console generate:menu`. - * + * * **Example** * * public function configureAdminMenu(MenuAdmin $menu) @@ -27,7 +27,7 @@ use Piwik\Piwik; * $order = 2 * ); * } - * + * * @method static \Piwik\Menu\MenuAdmin getInstance() */ class MenuAdmin extends MenuAbstract diff --git a/core/Menu/MenuTop.php b/core/Menu/MenuTop.php index 2901c82fe64555eefa449f1261c06962486b2216..86fc1ab0c63c875174d898df35e0503a812d6196 100644 --- a/core/Menu/MenuTop.php +++ b/core/Menu/MenuTop.php @@ -14,7 +14,7 @@ use Piwik\Piwik; * Contains menu entries for the Top menu (the menu at the very top of the page). * Plugins can implement the `configureTopMenu()` method of the `Menu` plugin class to add, rename of remove * items. If your plugin does not have a `Menu` class yet you can create one using `./console generate:menu`. - * + * * **Example** * * public function configureTopMenu(MenuTop $menu) @@ -27,7 +27,7 @@ use Piwik\Piwik; * $order = 2 * ); * } - * + * * @method static \Piwik\Menu\MenuTop getInstance() */ class MenuTop extends MenuAbstract diff --git a/core/Menu/MenuUser.php b/core/Menu/MenuUser.php index 6cbd9be7fe6e08e2a21959bf8b8e044477ca5720..ad9b195d46b402c652b162988a880f67cadf36a1 100755 --- a/core/Menu/MenuUser.php +++ b/core/Menu/MenuUser.php @@ -12,7 +12,7 @@ namespace Piwik\Menu; * Contains menu entries for the User menu (the menu at the very top of the page). * Plugins can implement the `configureUserMenu()` method of the `Menu` plugin class to add, rename of remove * items. If your plugin does not have a `Menu` class yet you can create one using `./console generate:menu`. - * + * * **Example** * * public function configureUserMenu(MenuUser $menu) @@ -25,7 +25,7 @@ namespace Piwik\Menu; * $order = 2 * ); * } - * + * * @method static \Piwik\Menu\MenuUser getInstance() */ class MenuUser extends MenuAbstract diff --git a/core/Metrics.php b/core/Metrics.php index 3d6e8b84f7f29e96271aaa3d11ebdc7816364de8..8ac04a9a397026f75255efedc5130b18f4868bed 100644 --- a/core/Metrics.php +++ b/core/Metrics.php @@ -17,7 +17,7 @@ require_once PIWIK_INCLUDE_PATH . "/core/Piwik.php"; /** * This class contains metadata regarding core metrics and contains several * related helper functions. - * + * * Of note are the `INDEX_...` constants. In the database, metric column names * in {@link DataTable} rows are stored as integers to save space. The integer * values used are determined by these constants. diff --git a/core/MetricsFormatter.php b/core/MetricsFormatter.php index 049850496a79e2c17042ca6158bc78d8142bc6de..8c58215e301c4f54102f68e59c3453fa6ffa53b1 100644 --- a/core/MetricsFormatter.php +++ b/core/MetricsFormatter.php @@ -12,7 +12,7 @@ use Piwik\Tracker\GoalManager; /** * Contains helper function that format numerical values in different ways. - * + * * @api */ class MetricsFormatter @@ -181,7 +181,7 @@ class MetricsFormatter /** * Prettifies a metric value based on the column name. - * + * * @param int $idSite The ID of the site the metric is for (used if the column value is an amount of money). * @param string $columnName The metric name. * @param mixed $value The metric value. diff --git a/core/Nonce.php b/core/Nonce.php index 825b9aea5690fa351f0d0646b9165e9c6b178869..3937c4f94b030c3d338714314fa07da793bfe5af 100644 --- a/core/Nonce.php +++ b/core/Nonce.php @@ -16,11 +16,11 @@ use Piwik\Session\SessionNamespace; * A cryptographic nonce -- "number used only once" -- is often recommended as * part of a robust defense against cross-site request forgery (CSRF/XSRF). This * class provides static methods that create and manage nonce values. - * + * * Nonces in Piwik are stored as a session variable and have a configurable expiration. * * Learn more about nonces [here](http://en.wikipedia.org/wiki/Cryptographic_nonce). - * + * * @api */ class Nonce @@ -56,10 +56,10 @@ class Nonce /** * Returns if a nonce is valid and comes from a valid request. - * + * * A nonce is valid if it matches the current nonce and if the current nonce * has not expired. - * + * * The request is valid if the referrer is a local URL (see {@link Url::isLocalUrl()}) * and if the HTTP origin is valid (see {@link getAcceptableOrigins()}). * @@ -108,7 +108,7 @@ class Nonce /** * Returns the **Origin** HTTP header or `false` if not found. - * + * * @return string|bool */ public static function getOrigin() @@ -156,7 +156,7 @@ class Nonce /** * Verifies and discards a nonce. - * + * * @param string $nonceName The nonce's unique ID. See {@link getNonce()}. * @param string|null $nonce The nonce from the client. If `null`, the value from the * **nonce** query parameter is used. diff --git a/core/Notification.php b/core/Notification.php index fcf1357a78905233e9f46ee3489a7c67de2f771d..b7c576eba0674925ac1222eb739501d7a01ebde2 100644 --- a/core/Notification.php +++ b/core/Notification.php @@ -10,39 +10,39 @@ namespace Piwik; /** * Describes a UI notification. - * + * * UI notifications are messages displayed to the user near the top of the screen. * Notifications consist of a message, a context (the message type), a priority * and a display type. - * + * * **The context** affects the way the message looks, but not how it is displayed. - * + * * **The display type** determines how the message is displayed. - * + * * **The priority** determines where it is shown in the list of all displayed notifications. - * + * * ### Examples - * + * * **Display an error message** - * + * * $notification = new Notification('My Error Message'); * $notification->context = Notification::CONTEXT_ERROR; * Notification\Manager::notify('myUniqueNotificationId', $notification); - * + * * **Display a temporary success message** - * + * * $notification = new Notificiation('Success'); * $notification->context = Notification::CONTEXT_SUCCESS; * $notification->type = Notification::TYPE_TOAST; * Notification\Manager::notify('myUniqueNotificationId', $notification); - * + * * **Display a message near the top of the screen** - * + * * $notification = new Notification('Urgent: Your password has expired!'); * $notification->context = Notification::CONTEXT_INFO; * $notification->type = Notification::TYPE_PERSISTENT; * $notification->priority = Notification::PRIORITY_MAX; - * + * * @api */ class Notification @@ -75,7 +75,7 @@ class Notification /** * If this flag is applied, no close icon will be displayed. _Note: persistent notifications always have a close * icon._ - * + * * See {@link $flags}. */ const FLAG_NO_CLEAR = 1; @@ -99,39 +99,39 @@ class Notification /** * The notification title. The title is optional and is displayed directly before the message content. - * + * * @var string */ public $title; /** * The notification message. Must be set. - * + * * @var string */ public $message; /** * Contains extra display options. - * + * * Usage: `$notification->flags = Notification::FLAG_BAR | Notification::FLAG_FOO`. - * + * * @var int */ public $flags = self::FLAG_NO_CLEAR; /** * The notification's display type. See `TYPE_*` constants in {@link Notification}. - * + * * @var string */ public $type = self::TYPE_TRANSIENT; /** * The notification's context (message type). See `CONTEXT_*` constants in {@link Notification}. - * + * * A notification's context determines how it will be styled. - * + * * @var string */ public $context = self::CONTEXT_INFO; @@ -139,7 +139,7 @@ class Notification /** * The notification's priority. The higher the priority, the higher the order. See `PRIORITY_*` * constants in {@link Notification} to see possible priority values. - * + * * @var int */ public $priority; @@ -147,14 +147,14 @@ class Notification /** * If true, the message will not be escaped before being outputted as HTML. If you set this to * `true`, make sure you escape text yourself in order to avoid XSS vulnerabilities. - * + * * @var bool */ public $raw = false; /** * Constructor. - * + * * @param string $message The notification message. * @throws \Exception If the message is empty. */ @@ -169,7 +169,7 @@ class Notification /** * Returns `1` if the notification will be displayed without a close button, `0` if otherwise. - * + * * @return int `1` or `0`. */ public function hasNoClear() @@ -184,7 +184,7 @@ class Notification /** * Returns the notification's priority. If no priority has been set, a priority will be set based * on the notification's context. - * + * * @return int */ public function getPriority() diff --git a/core/Notification/Manager.php b/core/Notification/Manager.php index 54727fcfb6492993e765599e0019ff770ef4eeb5..921dc3fb82314283b87193da233275a904d87882 100644 --- a/core/Notification/Manager.php +++ b/core/Notification/Manager.php @@ -13,7 +13,7 @@ use Piwik\Session\SessionNamespace; /** * Posts and removes UI notifications (see {@link Piwik\Notification} to learn more). - * + * */ class Manager { @@ -41,7 +41,7 @@ class Manager /** * Removes a posted notification by ID. - * + * * @param $id The notification ID, see {@link notify()}. */ public static function cancel($id) @@ -53,7 +53,7 @@ class Manager /** * Removes all temporary notifications. - * + * * Call this method after the notifications have been * displayed to make sure temporary notifications won't be displayed twice. */ diff --git a/core/Option.php b/core/Option.php index 1c403547d978f6c4b05779b7a43691d75366cecb..c2c7816bbab33e00f63389bc064a13ee03aa7e03 100644 --- a/core/Option.php +++ b/core/Option.php @@ -11,24 +11,24 @@ namespace Piwik; /** * Convenient key-value storage for user specified options and temporary * data that needs to be persisted beyond one request. - * + * * ### Examples - * + * * **Setting and getting options** - * + * * $optionValue = Option::get('MyPlugin.MyOptionName'); * if ($optionValue === false) { * // if not set, set it * Option::set('MyPlugin.MyOptionName', 'my option value'); * } - * + * * **Storing user specific options** - * + * * $userName = // ... * Option::set('MyPlugin.MyOptionName.' . $userName, 'my option value'); - * + * * **Clearing user specific options** - * + * * Option::deleteLike('MyPlugin.MyOptionName.%'); * * @api @@ -37,7 +37,7 @@ class Option { /** * Returns the option value for the requested option `$name`. - * + * * @param string $name The option name. * @return string|false The value or `false`, if not found. */ diff --git a/core/Period.php b/core/Period.php index fd99954021b3cceb954023114796fddf36bd160c..bff447dc5e7deb4e446430a72d4be4d22e2e169c 100644 --- a/core/Period.php +++ b/core/Period.php @@ -13,12 +13,12 @@ use Piwik\Period\Range; /** * Date range representation. - * + * * Piwik allows users to view aggregated statistics for single days and for date * ranges consisting of several days. When requesting data, a **date** string and * a **period** string must be used to specify the date range that the data regards. * This is the class Piwik uses to represent and manipulate those date ranges. - * + * * There are five types of periods in Piwik: day, week, month, year and range, * where **range** is any date range. The reason the other periods exist instead * of just **range** is that Piwik will pre-archive reports for days, weeks, months @@ -47,7 +47,7 @@ abstract class Period /** * Constructor. - * + * * @param Date $date * @ignore */ @@ -69,16 +69,16 @@ abstract class Period /** * Returns true if `$dateString` and `$period` represent multiple periods. - * + * * Will return true for date/period combinations where date references multiple * dates and period is not `'range'`. For example, will return true for: - * + * * - **date** = `2012-01-01,2012-02-01` and **period** = `'day'` * - **date** = `2012-01-01,2012-02-01` and **period** = `'week'` * - **date** = `last7` and **period** = `'month'` - * + * * etc. - * + * * @static * @param $dateString string The **date** query parameter value. * @param $period string The **period** query parameter value. @@ -137,7 +137,7 @@ abstract class Period /** * Returns the period ID. - * + * * @return int A unique integer for this type of period. */ public function getId() @@ -147,7 +147,7 @@ abstract class Period /** * Returns the label for the current period. - * + * * @return string `"day"`, `"week"`, `"month"`, `"year"`, `"range"` */ public function getLabel() @@ -170,7 +170,7 @@ abstract class Period /** * Returns the number of available subperiods. - * + * * @return int */ public function getNumberOfSubperiods() @@ -182,7 +182,7 @@ abstract class Period /** * Returns the set of Period instances that together make up this period. For a year, * this would be 12 months. For a month this would be 28-31 days. Etc. - * + * * @return Period[] */ public function getSubperiods() @@ -222,7 +222,7 @@ abstract class Period /** * See {@link toString()}. - * + * * @return string */ public function __toString() @@ -232,7 +232,7 @@ abstract class Period /** * Returns a pretty string describing this period. - * + * * @return string */ abstract public function getPrettyString(); @@ -240,7 +240,7 @@ abstract class Period /** * Returns a short string description of this period that is localized with the currently used * language. - * + * * @return string */ abstract public function getLocalizedShortString(); @@ -248,14 +248,14 @@ abstract class Period /** * Returns a long string description of this period that is localized with the currently used * language. - * + * * @return string */ abstract public function getLocalizedLongString(); /** * Returns a succinct string describing this period. - * + * * @return string eg, `'2012-01-01,2012-01-31'`. */ public function getRangeString() diff --git a/core/Piwik.php b/core/Piwik.php index c3be1d7c19d624092c7164158ac74529a3ae85ae..c723c541ca67fff16967c519b3213d5e7dfa36c4 100644 --- a/core/Piwik.php +++ b/core/Piwik.php @@ -26,7 +26,7 @@ require_once PIWIK_INCLUDE_PATH . '/core/Translate.php'; /** * Main piwik helper class. - * + * * Contains helper methods for a variety of common tasks. Plugin developers are * encouraged to reuse these methods as much as possible. */ @@ -46,14 +46,14 @@ class Piwik /** * The idGoal query parameter value for the special 'abandoned carts' goal. - * + * * @api */ const LABEL_ID_GOAL_IS_ECOMMERCE_CART = 'ecommerceAbandonedCart'; /** * The idGoal query parameter value for the special 'ecommerce' goal. - * + * * @api */ const LABEL_ID_GOAL_IS_ECOMMERCE_ORDER = 'ecommerceOrder'; @@ -662,7 +662,7 @@ class Piwik /** * Returns `true` if the login is valid. - * + * * _Warning: does not check if the login already exists! You must use UsersManager_API->userExists as well._ * * @param string $userLogin @@ -776,7 +776,7 @@ class Piwik /** * Register an observer to an event. - * + * * **_Note: Observers should normally be defined in plugin objects. It is unlikely that you will * need to use this function._** * diff --git a/core/Plugin.php b/core/Plugin.php index d646b268668e0238a7f388a275a9dc68e2e2c45e..389e85a6f6caec80b56f1e30da66886538750be0 100644 --- a/core/Plugin.php +++ b/core/Plugin.php @@ -19,7 +19,7 @@ require_once PIWIK_INCLUDE_PATH . '/core/Plugin/MetadataLoader.php'; /** * Base class of all Plugin Descriptor classes. - * + * * Any plugin that wants to add event observers to one of Piwik's {@hook # hooks}, * or has special installation/uninstallation logic must implement this class. * Plugins that can specify everything they need to in the _plugin.json_ files, @@ -27,16 +27,16 @@ require_once PIWIK_INCLUDE_PATH . '/core/Plugin/MetadataLoader.php'; * * Class implementations should be named after the plugin they are a part of * (eg, `class UserCountry extends Plugin`). - * + * * ### Plugin Metadata - * + * * In addition to providing a place for plugins to install/uninstall themselves * and add event observers, this class is also responsible for loading metadata * found in the plugin.json file. - * + * * The plugin.json file must exist in the root directory of a plugin. It can * contain the following information: - * + * * - **description**: An internationalized string description of what the plugin * does. * - **homepage**: The URL to the plugin's website. @@ -45,15 +45,15 @@ require_once PIWIK_INCLUDE_PATH . '/core/Plugin/MetadataLoader.php'; * - **license_homepage**: URL to website describing the license used. * - **version**: The plugin version (eg, 1.0.1). * - **theme**: `true` or `false`. If `true`, the plugin will be treated as a theme. - * + * * ### Examples - * + * * **How to extend** - * + * * use Piwik\Common; * use Piwik\Plugin; * use Piwik\Db; - * + * * class MyPlugin extends Plugin * { * public function getListHooksRegistered() @@ -66,17 +66,17 @@ require_once PIWIK_INCLUDE_PATH . '/core/Plugin/MetadataLoader.php'; * ) * ); * } - * + * * public function install() * { * Db::exec("CREATE TABLE " . Common::prefixTable('mytable') . "..."); * } - * + * * public function uninstall() * { * Db::exec("DROP TABLE IF EXISTS " . Common::prefixTable('mytable')); * } - * + * * public function getReportMetadata(&$metadata) * { * // ... @@ -87,7 +87,7 @@ require_once PIWIK_INCLUDE_PATH . '/core/Plugin/MetadataLoader.php'; * // ... * } * } - * + * * @api */ class Plugin @@ -159,7 +159,7 @@ class Plugin /** * Returns plugin information, including: - * + * * - 'description' => string // 1-2 sentence description of the plugin * - 'author' => string // plugin author * - 'author_homepage' => string // author homepage URL (or email "mailto:youremail@example.org") @@ -179,11 +179,11 @@ class Plugin /** * Returns a list of hooks with associated event observers. - * + * * Derived classes should use this method to associate callbacks with events. * * @return array eg, - * + * * array( * 'API.getReportMetadata' => 'myPluginFunction', * 'Another.event' => array( @@ -213,11 +213,11 @@ class Plugin /** * Installs the plugin. Derived classes should implement this class if the plugin * needs to: - * + * * - create tables * - update existing tables * - etc. - * + * * @throws \Exception if installation of fails for some reason. */ public function install() @@ -228,10 +228,10 @@ class Plugin /** * Uninstalls the plugins. Derived classes should implement this method if the changes * made in {@link install()} need to be undone during uninstallation. - * + * * In most cases, if you have an {@link install()} method, you should provide * an {@link uninstall()} method. - * + * * @throws \Exception if uninstallation of fails for some reason. */ public function uninstall() diff --git a/core/Plugin/API.php b/core/Plugin/API.php index 58de9e6461b30e25a6134978979cf019e66cce8d..cc16cfb64c5834d8098a58fd11330624f9fddb6b 100644 --- a/core/Plugin/API.php +++ b/core/Plugin/API.php @@ -13,17 +13,17 @@ use Piwik\Singleton; /** * The base class of all API singletons. - * + * * Plugins that want to expose functionality through the Reporting API should create a class * that extends this one. Every public method in that class that is not annotated with **@ignore** * will be callable through Piwik's Web API. - * + * * _Note: If your plugin calculates and stores reports, they should be made available through the API._ - * + * * ### Examples - * + * * **Defining an API for a plugin** - * + * * class API extends \Piwik\Plugin\API * { * public function myMethod($idSite, $period, $date, $segment = false) @@ -32,11 +32,11 @@ use Piwik\Singleton; * return $dataTable; * } * } - * + * * **Linking to an API method** - * + * * <a href="?module=API&method=MyPlugin.myMethod&idSite=1&period=day&date=2013-10-23">Link</a> - * + * * @api */ abstract class API extends Singleton diff --git a/core/Plugin/Archiver.php b/core/Plugin/Archiver.php index fa79d07b26e35512662f748cba99e6f524140846..7cc9fe26f533978e44079ca28819e6bc70d0e322 100644 --- a/core/Plugin/Archiver.php +++ b/core/Plugin/Archiver.php @@ -15,41 +15,41 @@ use Piwik\Config as PiwikConfig; /** * The base class that should be extended by plugins that compute their own * analytics data. - * + * * Descendants should implement the {@link aggregateDayReport()} and {@link aggregateMultipleReports()} * methods. - * + * * Both of these methods should persist analytics data using the {@link \Piwik\ArchiveProcessor} * instance returned by {@link getProcessor()}. The {@link aggregateDayReport()} method should * compute analytics data using the {@link \Piwik\DataAccess\LogAggregator} instance * returned by {@link getLogAggregator()}. - * + * * ### Examples - * + * * **Extending Archiver** - * + * * class MyArchiver extends Archiver * { * public function aggregateDayReport() * { * $logAggregator = $this->getLogAggregator(); - * + * * $data = $logAggregator->queryVisitsByDimension(...); - * + * * $dataTable = new DataTable(); * $dataTable->addRowsFromSimpleArray($data); - * + * * $archiveProcessor = $this->getProcessor(); * $archiveProcessor->insertBlobRecords('MyPlugin_myReport', $dataTable->getSerialized(500)); * } - * + * * public function aggregateMultipleReports() * { * $archiveProcessor = $this->getProcessor(); * $archiveProcessor->aggregateDataTableRecords('MyPlugin_myReport', 500); * } * } - * + * * @api */ abstract class Archiver @@ -61,7 +61,7 @@ abstract class Archiver /** * Constructor. - * + * * @param ArchiveProcessor $processor The ArchiveProcessor instance to use when persisting archive * data. */ @@ -73,12 +73,12 @@ abstract class Archiver /** * Archives data for a day period. - * + * * Implementations of this method should do more computation intensive activities such * as aggregating data across log tables. Since this method only deals w/ data logged for a day, * aggregating individual log table rows isn't a problem. Doing this for any larger period, * however, would cause performance degradation. - * + * * Aggregate log table rows using a {@link Piwik\DataAccess\LogAggregator} instance. Get a * {@link Piwik\DataAccess\LogAggregator} instance using the {@link getLogAggregator()} method. */ @@ -86,11 +86,11 @@ abstract class Archiver /** * Archives data for a non-day period. - * + * * Implementations of this method should only aggregate existing reports of subperiods of the * current period. For example, it is more efficient to aggregate reports for each day of a * week than to aggregate each log entry of the week. - * + * * Use {@link Piwik\ArchiveProcessor::aggregateNumericMetrics()} and {@link Piwik\ArchiveProcessor::aggregateDataTableRecords()} * to aggregate archived reports. Get the {@link Piwik\ArchiveProcessor} instance using the {@link getProcessor()} * method. @@ -100,7 +100,7 @@ abstract class Archiver /** * Returns a {@link Piwik\ArchiveProcessor} instance that can be used to insert archive data for * the period, segment and site we are archiving data for. - * + * * @return \Piwik\ArchiveProcessor * @api */ @@ -112,7 +112,7 @@ abstract class Archiver /** * Returns a {@link Piwik\DataAccess\LogAggregator} instance that can be used to aggregate log table rows * for this period, segment and site. - * + * * @return \Piwik\DataAccess\LogAggregator * @api */ diff --git a/core/Plugin/ConsoleCommand.php b/core/Plugin/ConsoleCommand.php index 8db956df45ebc8fa2f374c00e93648250c7c35ef..adb2c33a490d797f14f0bde667ba2327ff490bc3 100644 --- a/core/Plugin/ConsoleCommand.php +++ b/core/Plugin/ConsoleCommand.php @@ -15,14 +15,14 @@ use Symfony\Component\Console\Output\OutputInterface; /** * The base class for console commands. - * + * * @api */ class ConsoleCommand extends SymfonyCommand { /** * Constructor. - * + * * @param string|null $name The name of the command, eg, `'generate:api'`. */ public function __construct($name = null) diff --git a/core/Plugin/Controller.php b/core/Plugin/Controller.php index 729e7da0f6899c5647916d7596f04e5ec4c288a7..5521eaf0c25f07aef1698f5cf361e0d452479d46 100644 --- a/core/Plugin/Controller.php +++ b/core/Plugin/Controller.php @@ -40,18 +40,18 @@ use Piwik\ViewDataTable\Factory as ViewDataTableFactory; /** * Base class of all plugin Controllers. - * + * * Plugins that wish to add display HTML should create a Controller that either * extends from this class or from {@link ControllerAdmin}. Every public method in * the controller will be exposed as a controller method and can be invoked via * an HTTP request. - * + * * Learn more about Piwik's MVC system [here](/guides/mvc-in-piwik). - * + * * ### Examples - * + * * **Defining a controller** - * + * * class Controller extends \Piwik\Plugin\Controller * { * public function index() @@ -61,17 +61,17 @@ use Piwik\ViewDataTable\Factory as ViewDataTableFactory; * return $view->render(); * } * } - * + * * **Linking to a controller action** * * <a href="?module=MyPlugin&action=index&idSite=1&period=day&date=2013-10-10">Link</a> - * + * */ abstract class Controller { /** * The plugin name, eg. `'Referrers'`. - * + * * @var string * @api */ @@ -95,7 +95,7 @@ abstract class Controller /** * The value of the **idSite** query parameter. - * + * * @var int * @api */ @@ -103,7 +103,7 @@ abstract class Controller /** * The Site object created with {@link $idSite}. - * + * * @var Site * @api */ @@ -111,7 +111,7 @@ abstract class Controller /** * Constructor. - * + * * @api */ public function __construct() @@ -444,11 +444,11 @@ abstract class Controller /** * Returns a URL to a sparkline image for a report served by the current plugin. - * + * * The result of this URL should be used with the [sparkline()](/api-reference/Piwik/View#twig) twig function. - * + * * The current site ID and period will be used. - * + * * @param string $action Method name of the controller that serves the report. * @param array $customParameters The array of query parameter name/value pairs that * should be set in result URL. @@ -504,9 +504,9 @@ abstract class Controller /** * Assigns variables to {@link Piwik\View} instances that display an entire page. - * + * * The following variables assigned: - * + * * **date** - The value of the **date** query parameter. * **idSite** - The value of the **idSite** query parameter. * **rawDate** - The value of the **date** query parameter. @@ -519,11 +519,11 @@ abstract class Controller * **config_action_url_category_delimiter** - The value of the `[General] action_url_category_delimiter` * INI config option. * **topMenu** - The result of `MenuTop::getInstance()->getMenu()`. - * + * * As well as the variables set by {@link setPeriodVariablesView()}. - * + * * Will exit on error. - * + * * @param View $view * @return void * @api @@ -592,9 +592,9 @@ abstract class Controller /** * Assigns a set of generally useful variables to a {@link Piwik\View} instance. - * + * * The following variables assigned: - * + * * **enableMeasurePiwikForSiteId** - The value of the `[Debug] enable_measure_piwik_usage_in_idsite` * INI config option. * **isSuperUser** - True if the current user is the Super User, false if otherwise. @@ -607,7 +607,7 @@ abstract class Controller * **hasSVGLogo** - True if there is a SVG logo, false if otherwise. * **enableFrames** - The value of the `[General] enable_framed_pages` INI config option. If * true, {@link Piwik\View::setXFrameOptions()} is called on the view. - * + * * Also calls {@link setHostValidationVariablesView()}. * * @param View $view @@ -738,7 +738,7 @@ abstract class Controller /** * Sets general period variables on a view, including: - * + * * - **displayUniqueVisitors** - Whether unique visitors should be displayed for the current * period. * - **period** - The value of the **period** query parameter. @@ -771,7 +771,7 @@ abstract class Controller /** * Helper method used to redirect the current HTTP request to another module/action. - * + * * This function will exit immediately after executing. * * @param string $moduleToRedirect The plugin to redirect to, eg. `"MultiSites"`. @@ -834,10 +834,10 @@ abstract class Controller /** * Checks that the token_auth in the URL matches the currently logged-in user's token_auth. - * + * * This is a protection against CSRF and should be used in all controller * methods that modify Piwik or any user settings. - * + * * **The token_auth should never appear in the browser's address bar.** * * @throws \Piwik\NoAccessException If the token doesn't match. diff --git a/core/Plugin/ControllerAdmin.php b/core/Plugin/ControllerAdmin.php index 714f3ce464035f3e1d56f8dbfa6bf49c5b555c3b..e37cd7b11b2d996a6acca97daf915b8e81f13ea5 100644 --- a/core/Plugin/ControllerAdmin.php +++ b/core/Plugin/ControllerAdmin.php @@ -22,9 +22,9 @@ use Piwik\View; /** * Base class of plugin controllers that provide administrative functionality. - * + * * See {@link Controller} to learn more about Piwik controllers. - * + * */ abstract class ControllerAdmin extends Controller { diff --git a/core/Plugin/Dimension/VisitDimension.php b/core/Plugin/Dimension/VisitDimension.php index 594791f920291aff8b4e4ca14211a58645e121ee..d906bd804f12b699f55c595b7da4cf5459a1fbcf 100644 --- a/core/Plugin/Dimension/VisitDimension.php +++ b/core/Plugin/Dimension/VisitDimension.php @@ -277,7 +277,7 @@ abstract class VisitDimension extends Dimension $plugins = PluginManager::getInstance()->getLoadedPlugins(); $instances = array(); - + foreach ($plugins as $plugin) { foreach (self::getDimensions($plugin) as $instance) { $instances[] = $instance; diff --git a/core/Plugin/Manager.php b/core/Plugin/Manager.php index 8d3153377da3c3f2cc5115c8b88752809a51e8d1..994aabc6e7742f86c795766d2cf6ebe2f90825e0 100644 --- a/core/Plugin/Manager.php +++ b/core/Plugin/Manager.php @@ -435,7 +435,7 @@ class Manager extends Singleton /** * Returns the currently enabled theme. - * + * * If no theme is enabled, the **Morpheus** plugin is returned (this is the base and default theme). * * @return Plugin @@ -496,7 +496,7 @@ class Manager extends Singleton * * @return array An array that maps plugin names with arrays of plugin information. Plugin * information consists of the following entries: - * + * * - **activated**: Whether the plugin is activated. * - **alwaysActivated**: Whether the plugin should always be activated, * or not. diff --git a/core/Plugin/Settings.php b/core/Plugin/Settings.php index ff214529682881df1226f6f05c66ff95e0d464fe..54e5b0565354ee1c4a9dcb962503850664bc6c71 100644 --- a/core/Plugin/Settings.php +++ b/core/Plugin/Settings.php @@ -17,12 +17,12 @@ use Piwik\SettingsServer; /** * Base class of all plugin settings providers. Plugins that define their own configuration settings * can extend this class to easily make their settings available to Piwik users. - * + * * Descendants of this class should implement the {@link init()} method and call the * {@link addSetting()} method for each of the plugin's settings. - * + * * For an example, see the {@link Piwik\Plugins\ExampleSettingsPlugin\ExampleSettingsPlugin} plugin. - * + * * @api */ abstract class Settings implements StorageInterface @@ -60,7 +60,7 @@ abstract class Settings implements StorageInterface /** * Constructor. - * + * * @param string $pluginName The name of the plugin these settings are for. */ public function __construct($pluginName) @@ -90,7 +90,7 @@ abstract class Settings implements StorageInterface /** * Returns the introduction text for this plugin's settings. - * + * * @return string */ public function getIntroduction() @@ -187,7 +187,7 @@ abstract class Settings implements StorageInterface /** * Sets (overwrites) the value of a setting in memory. To persist the change, {@link save()} must be * called afterwards, otherwise the change has no effect. - * + * * Before the setting is changed, the {@link Piwik\Settings\Setting::$validate} and * {@link Piwik\Settings\Setting::$transform} closures will be invoked (if defined). If there is no validation * filter, the setting value will be casted to the appropriate data type. diff --git a/core/Plugin/ViewDataTable.php b/core/Plugin/ViewDataTable.php index fe603b159d47cccb89e0f7aab5419cd0722bc7e5..14b2f979f75bdeff0bbdb4244360a9eef7d12b0b 100644 --- a/core/Plugin/ViewDataTable.php +++ b/core/Plugin/ViewDataTable.php @@ -22,64 +22,64 @@ use Piwik\ViewDataTable\RequestConfig as VizRequest; /** * The base class of all report visualizations. - * + * * ViewDataTable instances load analytics data via Piwik's Reporting API and then output some * type of visualization of that data. - * + * * Visualizations can be in any format. HTML-based visualizations should extend * {@link Visualization}. Visualizations that use other formats, such as visualizations * that output an image, should extend ViewDataTable directly. * * ### Creating ViewDataTables - * + * * ViewDataTable instances are not created via the new operator, instead the {@link Piwik\ViewDataTable\Factory} * class is used. - * + * * The specific subclass to create is determined, first, by the **viewDataTable** query paramater. * If this parameter is not set, then the default visualization type for the report being * displayed is used. * * ### Configuring ViewDataTables - * + * * **Display properties** - * + * * ViewDataTable output can be customized by setting one of many available display * properties. Display properties are stored as fields in {@link Piwik\ViewDataTable\Config} objects. * ViewDataTables store a {@link Piwik\ViewDataTable\Config} object in the {@link $config} field. - * + * * Display properties can be set at any time before rendering. - * + * * **Request properties** - * + * * Request properties are similar to display properties in the way they are set. They are, * however, not used to customize ViewDataTable instances, but in the request to Piwik's * API when loading analytics data. - * + * * Request properties are set by setting the fields of a {@link Piwik\ViewDataTable\RequestConfig} object stored in * the {@link $requestConfig} field. They can be set at any time before rendering. * Setting them after data is loaded will have no effect. - * + * * **Customizing how reports are displayed** - * + * * Each individual report should be rendered in its own controller method. There are two * ways to render a report within its controller method. You can either: - * + * * 1. manually create and configure a ViewDataTable instance * 2. invoke {@link Piwik\Plugin\Controller::renderReport} and configure the ViewDataTable instance * in the {@hook ViewDataTable.configure} event. - * + * * ViewDataTable instances are configured by setting and modifying display properties and request * properties. - * + * * ### Creating new visualizations - * + * * New visualizations can be created by extending the ViewDataTable class or one of its * descendants. To learn more [read our guide on creating new visualizations](/guides/visualizing-report-data#creating-new-visualizations). - * + * * ### Examples - * + * * **Manually configuring a ViewDataTable** - * + * * // a controller method that displays a single report * public function myReport() * { @@ -89,18 +89,18 @@ use Piwik\ViewDataTable\RequestConfig as VizRequest; * // ... * return $view->render(); * } - * + * * **Using {@link Piwik\Plugin\Controller::renderReport}** - * + * * First, a controller method that displays a single report: - * + * * public function myReport() * { * return $this->renderReport(__FUNCTION__);` * } - * + * * Then the event handler for the {@hook ViewDataTable.configure} event: - * + * * public function configureViewDataTable(ViewDataTable $view) * { * switch ($view->requestConfig->apiMethodToRequestDataTable) { @@ -111,32 +111,32 @@ use Piwik\ViewDataTable\RequestConfig as VizRequest; * break; * } * } - * + * * **Using custom configuration objects in a new visualization** - * + * * class MyVisualizationConfig extends Piwik\ViewDataTable\Config * { * public $my_new_property = true; * } - * + * * class MyVisualizationRequestConfig extends Piwik\ViewDataTable\RequestConfig * { * public $my_new_property = false; * } - * + * * class MyVisualization extends Piwik\Plugin\ViewDataTable * { * public static function getDefaultConfig() * { * return new MyVisualizationConfig(); * } - * + * * public static function getDefaultRequestConfig() * { * return new MyVisualizationRequestConfig(); * } * } - * + * * * @api */ @@ -153,14 +153,14 @@ abstract class ViewDataTable implements ViewInterface /** * Contains display properties for this visualization. - * + * * @var \Piwik\ViewDataTable\Config */ public $config; /** * Contains request properties for this visualization. - * + * * @var \Piwik\ViewDataTable\RequestConfig */ public $requestConfig; @@ -229,10 +229,10 @@ abstract class ViewDataTable implements ViewInterface /** * Triggered during {@link ViewDataTable} construction. Subscribers should customize * the view based on the report that is being displayed. - * + * * Plugins that define their own reports must subscribe to this event in order to * specify how the Piwik UI should display the report. - * + * * **Example** * * // event handler @@ -245,7 +245,7 @@ abstract class ViewDataTable implements ViewInterface * break; * } * } - * + * * @param ViewDataTable $view The instance to configure. */ Piwik::postEvent('ViewDataTable.configure', array($this)); @@ -283,12 +283,12 @@ abstract class ViewDataTable implements ViewInterface /** * Returns the default config instance. - * + * * Visualizations that define their own display properties should override this method and * return an instance of their new {@link Piwik\ViewDataTable\Config} descendant. * * See the last example {@link ViewDataTable here} for more information. - * + * * @return \Piwik\ViewDataTable\Config */ public static function getDefaultConfig() @@ -298,12 +298,12 @@ abstract class ViewDataTable implements ViewInterface /** * Returns the default request config instance. - * + * * Visualizations that define their own request properties should override this method and * return an instance of their new {@link Piwik\ViewDataTable\RequestConfig} descendant. * * See the last example {@link ViewDataTable here} for more information. - * + * * @return \Piwik\ViewDataTable\RequestConfig */ public static function getDefaultRequestConfig() @@ -326,7 +326,7 @@ abstract class ViewDataTable implements ViewInterface /** * Returns the viewDataTable ID for this DataTable visualization. - * + * * Derived classes should not override this method. They should instead declare a const ID field * with the viewDataTable ID. * @@ -348,7 +348,7 @@ abstract class ViewDataTable implements ViewInterface /** * Returns `true` if this instance's or any of its ancestors' viewDataTable IDs equals the supplied ID, * `false` if otherwise. - * + * * Can be used to test whether a ViewDataTable object is an instance of a certain visualization or not, * without having to know where that visualization is. * @@ -479,7 +479,7 @@ abstract class ViewDataTable implements ViewInterface /** * Returns `true` if this visualization can display some type of data or not. - * + * * New visualization classes should override this method if they can only visualize certain * types of data. The evolution graph visualization, for example, can only visualize * sets of DataTables. If the API method used results in a single DataTable, the evolution diff --git a/core/Plugin/Visualization.php b/core/Plugin/Visualization.php index e86274c5ea18d100e8c41790d04ab92ede02030f..1c5a7a3bd84246404111796f0bfab91d2fa98139 100644 --- a/core/Plugin/Visualization.php +++ b/core/Plugin/Visualization.php @@ -24,11 +24,11 @@ use Piwik\ViewDataTable\Manager as ViewDataTableManager; /** * The base class for report visualizations that output HTML and use JavaScript. - * + * * Report visualizations that extend from this class will be displayed like all others in * the Piwik UI. The following extra UI controls will be displayed around the visualization * itself: - * + * * - report documentation, * - a footer message (if {@link Piwik\ViewDataTable\Config::$show_footer_message} is set), * - a list of links to related reports (if {@link Piwik\ViewDataTable\Config::$related_reports} is set), @@ -37,33 +37,33 @@ use Piwik\ViewDataTable\Manager as ViewDataTableManager; * - a limit control that allows users to change the amount of rows displayed (if * {@link Piwik\ViewDataTable\Config::$show_limit_control} is true), * - and more depending on the visualization. - * + * * ### Rendering Process - * + * * The following process is used to render reports: - * + * * - The report is loaded through Piwik's Reporting API. * - The display and request properties that require report data in order to determine a default * value are defaulted. These properties are: - * + * * - {@link Piwik\ViewDataTable\Config::$columns_to_display} * - {@link Piwik\ViewDataTable\RequestConfig::$filter_sort_column} * - {@link Piwik\ViewDataTable\RequestConfig::$filter_sort_order} - * + * * - Priority filters are applied to the report (see {@link Piwik\ViewDataTable\Config::$filters}). * - The filters that are applied to every report in the Reporting API (called **generic filters**) * are applied. (see {@link Piwik\API\Request}) * - The report's queued filters are applied. * - A {@link Piwik\View} instance is created and rendered. - * + * * ### Rendering Hooks - * + * * The Visualization class defines several overridable methods that are called at specific * points during the rendering process. Derived classes can override these methods change * the data that is displayed or set custom properties. - * + * * The overridable methods (called **rendering hooks**) are as follows: - * + * * - **beforeLoadDataTable**: Called at the start of the rendering process before any data * is loaded. * - **beforeGenericFiltersAreAppliedToLoadedDataTable**: Called after data is loaded and after priority @@ -76,20 +76,20 @@ use Piwik\ViewDataTable\Manager as ViewDataTableManager; * - **beforeRender**: Called immediately before a {@link Piwik\View} is created and rendered. * - **isThereDataToDisplay**: Called after a {@link Piwik\View} is created to determine if the report has * data or not. If not, a message is displayed to the user. - * + * * ### The DataTable JavaScript class - * + * * In the UI, visualization behavior is provided by logic in the **DataTable** JavaScript class. * When creating new visualizations, the **DataTable** JavaScript class (or one of its existing * descendants) should be extended. - * + * * To learn more read the [Visualizing Report Data](/guides/visualizing-report-data#creating-new-visualizations) * guide. * * ### Examples - * + * * **Changing the data that is loaded** - * + * * class MyVisualization extends Visualization * { * // load the previous period's data as well as the requested data. this will change @@ -101,20 +101,20 @@ use Piwik\ViewDataTable\Manager as ViewDataTableManager; * * $this->requestConfig->request_parameters_to_modify['date'] = $previousDate . ',' . $date; * } - * + * * // since we load the previous period's data too, we need to override the logic to * // check if there is data or not. * public function isThereDataToDisplay() * { * $tables = $this->dataTable->getDataTables() * $requestedDataTable = end($tables); - * + * * return $requestedDataTable->getRowsCount() != 0; * } * } - * + * * **Force properties to be set to certain values** - * + * * class MyVisualization extends Visualization * { * // ensure that some properties are set to certain values before rendering. @@ -133,9 +133,9 @@ class Visualization extends ViewDataTable { /** * The Twig template file to use when rendering, eg, `"@MyPlugin/_myVisualization.twig"`. - * + * * Must be defined by classes that extend Visualization. - * + * * @api */ const TEMPLATE_FILE = ''; @@ -253,9 +253,9 @@ class Visualization extends ViewDataTable /** * Returns `true` if there is data to display, `false` if otherwise. - * + * * Derived classes should override this method if they change the amount of data that is loaded. - * + * * @api */ protected function isThereDataToDisplay() @@ -507,7 +507,7 @@ class Visualization extends ViewDataTable /** * Hook that is called before loading report data from the API. - * + * * Use this method to change the request parameters that is sent to the API when requesting * data. * @@ -519,7 +519,7 @@ class Visualization extends ViewDataTable /** * Hook that is executed before generic filters are applied. - * + * * Use this method if you need access to the entire dataset (since generic filters will * limit and truncate reports). * diff --git a/core/RankingQuery.php b/core/RankingQuery.php index 0f4db68ab4af91fbc94bbe7097500a4a34bd522f..f40ae1273e39aeb191e59bedfa4911b28d1a4842 100644 --- a/core/RankingQuery.php +++ b/core/RankingQuery.php @@ -88,7 +88,7 @@ class RankingQuery /** * Constructor. - * + * * @param int|false $limit The result row limit. See {@link setLimit()}. */ public function __construct($limit = false) @@ -178,7 +178,7 @@ class RankingQuery * for each possible value you provide (where the rows of each set have a column value * that equals a possible value). Each of these new sets of rows will be individually * limited resulting in several limited result sets. - * + * * For example, you can run a query aggregating some data on the log_action table and * partition by log_action.type with the possible values of {@link Piwik\Tracker\Action::TYPE_PAGE_URL}, * {@link Piwik\Tracker\Action::TYPE_OUTLINK}, {@link Piwik\Tracker\Action::TYPE_DOWNLOAD}. diff --git a/core/ScheduledTask.php b/core/ScheduledTask.php index 18cb2aa94e2e5111ab5524e8b3a770065b471905..15b702dab862333e5d4f348f2fd19142fdd07c4e 100644 --- a/core/ScheduledTask.php +++ b/core/ScheduledTask.php @@ -15,9 +15,9 @@ use Piwik\ScheduledTime; /** * Contains metadata referencing PHP code that should be executed at regular * intervals. - * + * * See the {@link TaskScheduler} docs to learn more about scheduled tasks. - * + * * * @api */ @@ -67,7 +67,7 @@ class ScheduledTask /** * Constructor. - * + * * @param mixed $objectInstance The object or class that contains the method to execute regularly. * Usually this will be a {@link Plugin} instance. * @param string $methodName The name of the method that will be regularly executed. @@ -104,11 +104,11 @@ class ScheduledTask return $namespaced; } - + /** * Returns the object instance that contains the method to execute. Returns a class * name if the method is static. - * + * * @return mixed */ public function getObjectInstance() @@ -118,7 +118,7 @@ class ScheduledTask /** * Returns the name of the class that contains the method to execute. - * + * * @return string */ public function getClassName() @@ -128,7 +128,7 @@ class ScheduledTask /** * Returns the name of the method that will be executed. - * + * * @return string */ public function getMethodName() @@ -139,7 +139,7 @@ class ScheduledTask /** * Returns the value that will be passed to the method when executed, or `null` if * no value will be supplied. - * + * * @return string|null */ public function getMethodParameter() @@ -160,7 +160,7 @@ class ScheduledTask /** * Returns the time in milliseconds when this task will be executed next. - * + * * @return int */ public function getRescheduledTime() @@ -182,11 +182,11 @@ class ScheduledTask /** * Returns a unique name for this scheduled task. The name is stored in the DB and is used * to store a task's previous execution time. The name is created using: - * + * * - the name of the class that contains the method to execute, * - the name of the method to regularly execute, * - and the value that is passed to the executed task. - * + * * @return string */ public function getName() diff --git a/core/ScheduledTime.php b/core/ScheduledTime.php index 6035f830ffe6c376c33819e2ce0cdec1b86a8ee1..f221a82a43e528596f248d9dedf8d7a9e83f393b 100644 --- a/core/ScheduledTime.php +++ b/core/ScheduledTime.php @@ -93,7 +93,7 @@ abstract class ScheduledTime /** * Sets the day of the period to execute the scheduled task. Not a valid operation for all period types. - * + * * @abstract * @param int $_day a number describing the day to set. Its meaning depends on the ScheduledTime's period type. * @throws Exception if method not supported by subclass or parameter _day is invalid @@ -102,7 +102,7 @@ abstract class ScheduledTime /** * Sets the hour of the day on which the task should be executed. - * + * * @param int $hour Must be `>= 0` and `< 24`. * @throws Exception If the current scheduled period is **hourly** or if `$hour` is invalid. * @api @@ -153,7 +153,7 @@ abstract class ScheduledTime // make sure the rescheduled date is in the future $rescheduledTime = (24 * 3600) + $rescheduledTime; } - + return $rescheduledTime; } @@ -181,14 +181,14 @@ abstract class ScheduledTime /** * Returns a new ScheduledTime instance using a string description of the scheduled period type * and a string description of the day within the period to execute the task on. - * + * * @param string $periodType The scheduled period type. Can be `'hourly'`, `'daily'`, `'weekly'`, or `'monthly'`. * @param string|int|false $periodDay A string describing the day within the scheduled period to execute * the task on. Only valid for week and month periods. - * + * * If `'weekly'` is supplied for `$periodType`, this should be a day * of the week, for example, `'monday'` or `'tuesday'`. - * + * * If `'monthly'` is supplied for `$periodType`, this can be a numeric * day in the month or a day in one week of the month. For example, * `12`, `23`, `'first sunday'` or `'fourth tuesday'`. diff --git a/core/ScheduledTime/Weekly.php b/core/ScheduledTime/Weekly.php index e5715b5fd046d3da81d81de9a426f3fe57d73889..5ae499b9eb95a95b85ce097fc6f06fb9151bc49e 100644 --- a/core/ScheduledTime/Weekly.php +++ b/core/ScheduledTime/Weekly.php @@ -46,7 +46,7 @@ class Weekly extends ScheduledTime date('j', $currentTime) + $daysFromNow, date('Y', $currentTime) ); - + // Adjusts the scheduled hour $rescheduledTime = $this->adjustHour($rescheduledTime); $rescheduledTime = $this->adjustTimezone($rescheduledTime); diff --git a/core/Segment.php b/core/Segment.php index 99d2382ef8c76885abc7f31a5170521bdf7b43d9..01e056bf68f4c823a5caada04f9372c354092bd0 100644 --- a/core/Segment.php +++ b/core/Segment.php @@ -13,26 +13,26 @@ use Piwik\Plugins\API\API; /** * Limits the set of visits Piwik uses when aggregating analytics data. - * + * * A segment is a condition used to filter visits. They can, for example, * select visits that have a specific browser or come from a specific * country, or both. - * + * * Individual segment dimensions (such as `browserCode` and `countryCode`) * are defined by plugins. Read about the {@hook API.getSegmentDimensionMetadata} * event to learn more. - * + * * Plugins that aggregate data stored in Piwik can support segments by * using this class when generating aggregation SQL queries. - * + * * ### Examples - * + * * **Basic usage** - * + * * $idSites = array(1,2,3); * $segmentStr = "browserCode==ff;countryCode==CA"; * $segment = new Segment($segmentStr, $idSites); - * + * * $query = $segment->getSelectQuery( * $select = "table.col1, table2.col2", * $from = array("table", "table2"), @@ -41,15 +41,15 @@ use Piwik\Plugins\API\API; * $orderBy = "table.col1 DESC", * $groupBy = "table2.col2" * ); - * + * * Db::fetchAll($query['sql'], $query['bind']); - * + * * **Creating a _null_ segment** - * + * * $idSites = array(1,2,3); * $segment = new Segment('', $idSites); * // $segment->getSelectQuery will return a query that selects all visits - * + * * @api */ class Segment @@ -66,7 +66,7 @@ class Segment /** * Constructor. - * + * * @param string $segmentCondition The segment condition, eg, `'browserCode=ff;countryCode=CA'`. * @param array $idSites The list of sites the segment will be used with. Some segments are * dependent on the site, such as goal segments. @@ -186,7 +186,7 @@ class Segment /** * Returns the segment condition. - * + * * @return string */ public function getString() @@ -197,7 +197,7 @@ class Segment /** * Returns a hash of the segment condition, or the empty string if the segment * condition is empty. - * + * * @return string */ public function getHash() diff --git a/core/Settings/Setting.php b/core/Settings/Setting.php index 41cffbe5265f19049725b22f150e5c6ac983bab7..2b8e53bf269c6e7b838ef39e11ad2887df8950d9 100644 --- a/core/Settings/Setting.php +++ b/core/Settings/Setting.php @@ -19,7 +19,7 @@ abstract class Setting /** * Describes the setting's PHP data type. When saved, setting values will always be casted to this * type. - * + * * See {@link Piwik\Plugin\Settings} for a list of supported data types. * * @var string @@ -30,7 +30,7 @@ abstract class Setting * Describes what HTML element should be used to manipulate the setting through Piwik's UI. * * See {@link Piwik\Plugin\Settings} for a list of supported control types. - * + * * @var string */ public $uiControlType = null; @@ -38,22 +38,22 @@ abstract class Setting /** * Name-value mapping of HTML attributes that will be added HTML form control, eg, * `array('size' => 3)`. Attributes will be escaped before outputting. - * + * * @var array */ public $uiControlAttributes = array(); /** * The list of all available values for this setting. If null, the setting can have any value. - * + * * If supplied, this field should be an array mapping available values with their prettified * display value. Eg, if set to `array('nb_visits' => 'Visits', 'nb_actions' => 'Actions')`, * the UI will display **Visits** and **Actions**, and when the user selects one, Piwik will * set the setting to **nb_visits** or **nb_actions** respectively. - * + * * The setting value will be validated if this field is set. If the value is not one of the * available values, an error will be triggered. - * + * * _Note: If a custom validator is supplied (see {@link $validate}), the setting value will * not be validated._ * @@ -63,7 +63,7 @@ abstract class Setting /** * Text that will appear above this setting's section in the _Plugin Settings_ admin page. - * + * * @var null|string */ public $introduction = null; @@ -71,7 +71,7 @@ abstract class Setting /** * Text that will appear directly underneath the setting title in the _Plugin Settings_ admin * page. If set, should be a short description of the setting. - * + * * @var null|string */ public $description = null; @@ -80,20 +80,20 @@ abstract class Setting * Text that will appear next to the setting's section in the _Plugin Settings_ admin page. If set, * it should contain information about the setting that is more specific than a general description, * such as the format of the setting value if it has a special format. - * + * * @var null|string */ public $inlineHelp = null; /** * A closure that does some custom validation on the setting before the setting is persisted. - * + * * The closure should take two arguments: the setting value and the {@link Setting} instance being * validated. If the value is found to be invalid, the closure should throw an exception with * a message that describes the error. - * + * * **Example** - * + * * $setting->validate = function ($value, Setting $setting) { * if ($value > 60) { * throw new \Exception('The time limit is not allowed to be greater than 60 minutes.'); @@ -107,13 +107,13 @@ abstract class Setting /** * A closure that transforms the setting value. If supplied, this closure will be executed after * the setting has been validated. - * + * * _Note: If a transform is supplied, the setting's {@link $type} has no effect. This means the * transformation function will be responsible for casting the setting value to the appropriate * data type._ * * **Example** - * + * * $setting->transform = function ($value, Setting $setting) { * if ($value > 30) { * $value = 30; @@ -128,7 +128,7 @@ abstract class Setting /** * Default value of this setting. - * + * * The default value is not casted to the appropriate data type. This means _**you**_ have to make * sure the value is of the correct type. * @@ -169,7 +169,7 @@ abstract class Setting /** * Returns the setting's persisted name, eg, `'refreshInterval'`. - * + * * @return string */ public function getName() @@ -179,7 +179,7 @@ abstract class Setting /** * Returns `true` if this setting can be displayed for the current user, `false` if otherwise. - * + * * @return bool */ public function isWritableByCurrentUser() @@ -199,7 +199,7 @@ abstract class Setting /** * Sets the object used to persist settings. - * + * * @return StorageInterface */ public function setStorage(StorageInterface $storage) @@ -210,7 +210,7 @@ abstract class Setting /** * Returns the previously persisted setting value. If no value was set, the default value * is returned. - * + * * @return mixed * @throws \Exception If the current user is not allowed to change the value of this setting. */ @@ -221,7 +221,7 @@ abstract class Setting /** * Sets and persists this setting's value overwriting any existing value. - * + * * @param mixed $value * @throws \Exception If the current user is not allowed to change the value of this setting. */ @@ -242,7 +242,7 @@ abstract class Setting /** * Returns the display order. The lower the return value, the earlier the setting will be displayed. - * + * * @return int */ public function getOrder() diff --git a/core/Settings/SystemSetting.php b/core/Settings/SystemSetting.php index f26c979ae1b4c559aedf7d2a8421505372a69b2e..935aec13883ba96a346c4917495f5c307d46954e 100644 --- a/core/Settings/SystemSetting.php +++ b/core/Settings/SystemSetting.php @@ -14,7 +14,7 @@ use Piwik\Piwik; /** * Describes a system wide setting. Only the Super User can change this type of setting and * the value of this setting will affect all users. - * + * * See {@link \Piwik\Plugin\Settings}. * * @@ -33,7 +33,7 @@ class SystemSetting extends Setting /** * Constructor. - * + * * @param string $name The persisted name of the setting. * @param string $title The display name of the setting. */ @@ -47,7 +47,7 @@ class SystemSetting extends Setting /** * Returns the display order. System settings are displayed before user settings. - * + * * @return int */ public function getOrder() diff --git a/core/Settings/UserSetting.php b/core/Settings/UserSetting.php index 8f56f7104df4e1b498f82d20d084cb8f26ad2d06..fa29269707b4e39193944a3c9af931fe7bf7d9f3 100644 --- a/core/Settings/UserSetting.php +++ b/core/Settings/UserSetting.php @@ -24,7 +24,7 @@ class UserSetting extends Setting /** * Constructor. - * + * * @param string $name The setting's persisted name. * @param string $title The setting's display name. * @param null|string $userLogin The user this setting applies to. Will default to the current user login. @@ -41,7 +41,7 @@ class UserSetting extends Setting /** * Returns the display order. User settings are displayed after system settings. - * + * * @return int */ public function getOrder() diff --git a/core/SettingsPiwik.php b/core/SettingsPiwik.php index c096182b7392cadd5b620ac17fb9c6d485fe2ea7..4e83190e703da42a1d6753d0a0638088d53f8a09 100644 --- a/core/SettingsPiwik.php +++ b/core/SettingsPiwik.php @@ -12,7 +12,7 @@ use Exception; /** * Contains helper methods that can be used to get common Piwik settings. - * + * */ class SettingsPiwik { @@ -63,27 +63,27 @@ class SettingsPiwik * Triggered during the cron archiving process to collect segments that * should be pre-processed for all websites. The archiving process will be launched * for each of these segments when archiving data. - * + * * This event can be used to add segments to be pre-processed. If your plugin depends * on data from a specific segment, this event could be used to provide enhanced * performance. - * + * * _Note: If you just want to add a segment that is managed by the user, use the * SegmentEditor API._ - * + * * **Example** - * + * * Piwik::addAction('Segments.getKnownSegmentsToArchiveAllSites', function (&$segments) { * $segments[] = 'country=jp;city=Tokyo'; * }); - * + * * @param array &$segmentsToProcess List of segment definitions, eg, - * + * * array( * 'browserCode=ff;resolution=800x600', * 'country=jp;city=Tokyo' * ) - * + * * Add segments to this array in your event handler. */ Piwik::postEvent('Segments.getKnownSegmentsToArchiveAllSites', array(&$segmentsToProcess)); @@ -97,7 +97,7 @@ class SettingsPiwik /** * Returns the list of stored segments to pre-process for an individual site when executing * cron archiving. - * + * * @param int $idSite The ID of the site to get stored segments for. * @return string The list of stored segments that apply to the requested site. */ @@ -109,25 +109,25 @@ class SettingsPiwik * Triggered during the cron archiving process to collect segments that * should be pre-processed for one specific site. The archiving process will be launched * for each of these segments when archiving data for that one site. - * + * * This event can be used to add segments to be pre-processed for one site. - * + * * _Note: If you just want to add a segment that is managed by the user, you should use the * SegmentEditor API._ - * + * * **Example** - * + * * Piwik::addAction('Segments.getKnownSegmentsToArchiveForSite', function (&$segments, $idSite) { * $segments[] = 'country=jp;city=Tokyo'; * }); - * + * * @param array &$segmentsToProcess List of segment definitions, eg, - * + * * array( * 'browserCode=ff;resolution=800x600', * 'country=JP;city=Tokyo' * ) - * + * * Add segments to this array in your event handler. * @param int $idSite The ID of the site to get segments for. */ @@ -231,7 +231,7 @@ class SettingsPiwik /** * Returns true if unique visitors should be processed for the given period type. - * + * * Unique visitor processing is controlled by the `[General] enable_processing_unique_visitors_...` * INI config options. By default, unique visitors are processed only for day/week/month periods. * diff --git a/core/SettingsServer.php b/core/SettingsServer.php index 679a00192d5569c9d4a724fbabc49adf9035de07..6c172c3ecffe89d50cd943106622e24f77b53edf 100644 --- a/core/SettingsServer.php +++ b/core/SettingsServer.php @@ -19,7 +19,7 @@ class SettingsServer * Returns true if the current script execution was triggered by the cron archiving script. * * Helpful for error handling: directly throw error without HTML (eg. when DB is down). - * + * * @return bool * @api */ @@ -102,7 +102,7 @@ class SettingsServer /** * Returns `true` if the GD PHP extension is available, `false` if otherwise. - * + * * _Note: ImageGraph and the sparkline report visualization depend on the GD extension._ * * @return bool diff --git a/core/Singleton.php b/core/Singleton.php index e2a0d6056988d48066ff488d49f8a21cdf60cd75..1dff87db5f2e7921cf7b9783eb3cd3ab5863eccc 100644 --- a/core/Singleton.php +++ b/core/Singleton.php @@ -11,7 +11,7 @@ namespace Piwik; /** * The singleton base class restricts the instantiation of derived classes to one object only. - * + * * All plugin APIs are singletons and thus extend this class. * * @api diff --git a/core/Site.php b/core/Site.php index a0b728b035bd8c379b78902a6dfa4472a9d2603a..7efeee77ef1ba2f72c8329d61d20d9897f36a575 100644 --- a/core/Site.php +++ b/core/Site.php @@ -15,27 +15,27 @@ use Piwik\Plugins\SitesManager\API; /** * Provides access to individual [site entity](/guides/persistence-and-the-mysql-backend#websites-aka-sites) data * (including name, URL, etc.). - * + * * **Data Cache** - * + * * Site data can be cached in order to avoid performing too many queries. * If a method needs many site entities, it is more efficient to query all of what * you need beforehand via the **SitesManager** API, then cache it using {@link setSites()} or * {@link setSitesFromArray()}. - * + * * Subsequent calls to `new Site($id)` will use the data in the cache instead of querying the database. - * + * * ### Examples - * + * * **Basic usage** - * + * * $site = new Site($idSite); * $name = $site->getName(); - * + * * **Without allocation** - * + * * $name = Site::getNameFor($idSite); - * + * * @api */ class Site @@ -54,7 +54,7 @@ class Site /** * Constructor. - * + * * @param int $idsite The ID of the site we want data for. */ public function __construct($idsite) @@ -71,7 +71,7 @@ class Site * individual site data. * * @param array $sites The array of sites data. Indexed by site ID. eg, - * + * * array('1' => array('name' => 'Site 1', ...), * '2' => array('name' => 'Site 2', ...))` */ @@ -100,17 +100,17 @@ class Site /** * Triggered so plugins can modify website entities without modifying the database. - * + * * This event should **not** be used to add data that is expensive to compute. If you * need to make HTTP requests or query the database for more information, this is not * the place to do it. * * **Example** - * + * * Piwik::addAction('Site.setSite', function ($idSite, &$info) { * $info['name'] .= " (original)"; * }); - * + * * @param int $idSite The ID of the website entity that will be modified. * @param array $infoSite The website entity. [Learn more.](/guides/persistence-and-the-mysql-backend#websites-aka-sites) */ @@ -121,9 +121,9 @@ class Site /** * Sets the cached Site data with a non-associated array of site data. - * + * * @param array $sites The array of sites data. eg, - * + * * array( * array('idsite' => '1', 'name' => 'Site 1', ...), * array('idsite' => '2', 'name' => 'Site 2', ...), @@ -172,9 +172,9 @@ class Site /** * Returns a string representation of the site this instance references. - * + * * Useful for debugging. - * + * * @return string */ public function __toString() @@ -223,7 +223,7 @@ class Site /** * Returns a site property by name. - * + * * @param string $name Name of the property to return (eg, `'main_url'` or `'name'`). * @return mixed * @throws Exception @@ -238,7 +238,7 @@ class Site /** * Returns the website type (by default `"website"`, which means it is a single website). - * + * * @return string */ public function getType() @@ -316,7 +316,7 @@ class Site /** * Returns the site search keyword query parameters for the site. - * + * * @return string * @throws Exception if data for the site cannot be found. */ @@ -327,7 +327,7 @@ class Site /** * Returns the site search category query parameters for the site. - * + * * @return string * @throws Exception if data for the site cannot be found. */ @@ -382,7 +382,7 @@ class Site /** * Clears the site data cache. - * + * * See also {@link setSites()} and {@link setSitesFromArray()}. */ public static function clearCache() diff --git a/core/TaskScheduler.php b/core/TaskScheduler.php index d2ddec32388caa7c3c45976de03d837f99d4fca0..602c1987a675bfd6b05b5d6a4668b7500c9cd100 100644 --- a/core/TaskScheduler.php +++ b/core/TaskScheduler.php @@ -17,17 +17,17 @@ define('DEBUG_FORCE_SCHEDULED_TASKS', false); /** * Manages scheduled task execution. - * + * * A scheduled task is a callback that should be executed every so often (such as daily, * weekly, monthly, etc.). They are registered with **TaskScheduler** through the * {@hook TaskScheduler.getScheduledTasks} event. - * + * * Tasks are executed when the cron core:archive command is executed. - * + * * ### Examples - * + * * **Scheduling a task** - * + * * // event handler for TaskScheduler.getScheduledTasks event * public function getScheduledTasks(&$tasks) * { @@ -39,14 +39,14 @@ define('DEBUG_FORCE_SCHEDULED_TASKS', false); * ScheduledTask::LOWEST_PRIORITY * ); * } - * + * * **Executing all pending tasks** - * + * * $results = TaskScheduler::runTasks(); * $task1Result = $results[0]; * $task1Name = $task1Result['task']; * $task1Output = $task1Result['output']; - * + * * echo "Executed task '$task1Name'. Task output:\n$task1Output"; * * @method static \Piwik\TaskScheduler getInstance() @@ -69,7 +69,7 @@ class TaskScheduler extends Singleton * * @return array An array describing the results of scheduled task execution. Each element * in the array will have the following format: - * + * * ``` * array( * 'task' => 'task name', @@ -157,10 +157,10 @@ class TaskScheduler extends Singleton /** * Determines a task's scheduled time and persists it, overwriting the previous scheduled time. - * + * * Call this method if your task's scheduled time has changed due to, for example, an option that * was changed. - * + * * @param ScheduledTask $task Describes the scheduled task being rescheduled. * @api */ @@ -171,7 +171,7 @@ class TaskScheduler extends Singleton /** * Returns true if the TaskScheduler is currently running a scheduled task. - * + * * @return bool */ public static function isTaskBeingExecuted() diff --git a/core/Tracker/Action.php b/core/Tracker/Action.php index d0926225638d904e131b2dd8f4019f11f080b9d6..b3ca851f61216fe0cef92e09b7e78387610bb90a 100644 --- a/core/Tracker/Action.php +++ b/core/Tracker/Action.php @@ -356,7 +356,7 @@ abstract class Action /** * Triggered after successfully persisting a [visit action entity](/guides/persistence-and-the-mysql-backend#visit-actions). - * + * * @param Action $tracker Action The Action tracker instance. * @param array $visitAction The visit action entity that was persisted. Read * [this](/guides/persistence-and-the-mysql-backend#visit-actions) to see what it contains. diff --git a/core/Tracker/Cache.php b/core/Tracker/Cache.php index 77f9d37689dd390dc92698aab6119c9214efbf33..0217b175de1b3ae70bf3ac198e13d6e770c934b0 100644 --- a/core/Tracker/Cache.php +++ b/core/Tracker/Cache.php @@ -65,22 +65,22 @@ class Cache Piwik::setUserHasSuperUserAccess(); $content = array(); - + /** * Triggered to get the attributes of a site entity that might be used by the * Tracker. - * + * * Plugins add new site attributes for use in other tracking events must * use this event to put those attributes in the Tracker Cache. - * + * * **Example** - * + * * public function getSiteAttributes($content, $idSite) * { * $sql = "SELECT info FROM " . Common::prefixTable('myplugin_extra_site_info') . " WHERE idsite = ?"; * $content['myplugin_site_data'] = Db::fetchOne($sql, array($idSite)); * } - * + * * @param array &$content Array mapping of site attribute names with values. * @param int $idSite The site ID to get attributes for. */ @@ -130,20 +130,20 @@ class Cache /** * Triggered before the [general tracker cache](/guides/all-about-tracking#the-tracker-cache) * is saved to disk. This event can be used to add extra content to the cache. - * + * * Data that is used during tracking but is expensive to compute/query should be * cached to keep tracking efficient. One example of such data are options * that are stored in the piwik_option table. Querying data for each tracking * request means an extra unnecessary database query for each visitor action. Using * a cache solves this problem. - * + * * **Example** - * + * * public function setTrackerCacheGeneral(&$cacheContent) * { * $cacheContent['MyPlugin.myCacheKey'] = Option::get('MyPlugin_myOption'); * } - * + * * @param array &$cacheContent Array of cached data. Each piece of data must be * mapped by name. */ diff --git a/core/Tracker/Db/Mysqli.php b/core/Tracker/Db/Mysqli.php index 66521b120b22fa3a51839c5a424273836cb5fce3..2cd5e5f141c4e3b5629461aef74b3aac790e60e2 100644 --- a/core/Tracker/Db/Mysqli.php +++ b/core/Tracker/Db/Mysqli.php @@ -303,14 +303,14 @@ class Mysqli extends Db public function commit($xid) { - if($this->activeTransaction != $xid || $this->activeTransaction === false ) { - + if($this->activeTransaction != $xid || $this->activeTransaction === false ) { + return; } $this->activeTransaction = false; if(!$this->connection->commit() ) { - throw new DbException("Commit failed"); + throw new DbException("Commit failed"); } $this->connection->autocommit(true); } @@ -322,14 +322,14 @@ class Mysqli extends Db public function rollBack($xid) { - if($this->activeTransaction != $xid || $this->activeTransaction === false ) { + if($this->activeTransaction != $xid || $this->activeTransaction === false ) { return; } $this->activeTransaction = false; if(!$this->connection->rollback() ) { - throw new DbException("Rollback failed"); + throw new DbException("Rollback failed"); } - $this->connection->autocommit(true); + $this->connection->autocommit(true); } } diff --git a/core/Tracker/Db/Pdo/Mysql.php b/core/Tracker/Db/Pdo/Mysql.php index a4d148e41529e42aa0d787d1c1ced4bd42fb1de3..a2f5a79b2cbbe3c5f1318e65e041750791089e25 100644 --- a/core/Tracker/Db/Pdo/Mysql.php +++ b/core/Tracker/Db/Pdo/Mysql.php @@ -267,7 +267,7 @@ class Mysql extends Db $this->activeTransaction = false; if(!$this->connection->commit() ) { - throw new DbException("Commit failed"); + throw new DbException("Commit failed"); } } @@ -284,7 +284,7 @@ class Mysql extends Db $this->activeTransaction = false; if(!$this->connection->rollBack() ) { - throw new DbException("Rollback failed"); + throw new DbException("Rollback failed"); } } } diff --git a/core/Tracker/GoalManager.php b/core/Tracker/GoalManager.php index 0b8f6be10753f6b65f682f62ff84db7f6396176d..c7e55747d35e94735ee186b9b33208165f9b24d4 100644 --- a/core/Tracker/GoalManager.php +++ b/core/Tracker/GoalManager.php @@ -690,10 +690,10 @@ class GoalManager /** * Triggered after successfully recording a non-ecommerce conversion. - * + * * _Note: Subscribers should be wary of doing any expensive computation here as it may slow * the tracker down._ - * + * * @param array $conversion The conversion entity that was just persisted. See what information * it contains [here](/guides/persistence-and-the-mysql-backend#conversions). */ @@ -712,9 +712,9 @@ class GoalManager { /** * Triggered before persisting a new [conversion entity](/guides/persistence-and-the-mysql-backend#conversions). - * + * * This event can be used to modify conversion information or to add new information to be persisted. - * + * * @param array $conversion The conversion entity. Read [this](/guides/persistence-and-the-mysql-backend#conversions) * to see what it contains. * @param array $visitInformation The visit entity that we are tracking a conversion for. See what diff --git a/core/Tracker/Request.php b/core/Tracker/Request.php index ccd044320d010623220b549f6e667e0b91c5b92e..98057f6ccc47a0cac90194a305065954bf14a57f 100644 --- a/core/Tracker/Request.php +++ b/core/Tracker/Request.php @@ -322,10 +322,10 @@ class Request /** * Triggered when obtaining the ID of the site we are tracking a visit for. - * + * * This event can be used to change the site ID so data is tracked for a different * website. - * + * * @param int &$idSite Initialized to the value of the **idsite** query parameter. If a * subscriber sets this variable, the value it uses must be greater * than 0. diff --git a/core/Tracker/Settings.php b/core/Tracker/Settings.php index 2d8299581d1bff74f811d11f6642ce7af86561b6..836d03650a64ee0a99e56307ab0cf15fb20c0a21 100644 --- a/core/Tracker/Settings.php +++ b/core/Tracker/Settings.php @@ -101,7 +101,7 @@ class Settings // prevent the config hash from being the same, across different Piwik instances // (limits ability of different Piwik instances to cross-match users) $salt = SettingsPiwik::getSalt(); - + $configString = $os . $browserName . $browserVersion @@ -109,9 +109,9 @@ class Settings . $ip . $browserLang . $salt; - + $hash = md5($configString, $raw_output = true); - + return substr($hash, 0, Tracker::LENGTH_BINARY_ID); } -} \ No newline at end of file +} \ No newline at end of file diff --git a/core/Tracker/VisitInterface.php b/core/Tracker/VisitInterface.php index 66bd37becc901fdeeb6af1e77991ddedaa48b75c..a7022072b818e8e7f5a58becaadfd2390582c39f 100644 --- a/core/Tracker/VisitInterface.php +++ b/core/Tracker/VisitInterface.php @@ -11,13 +11,13 @@ namespace Piwik\Tracker; /** * Interface implemented by classes that track visit information for the Tracker. - * + * */ interface VisitInterface { /** * Stores the object describing the current tracking request. - * + * * @param Request $request * @return void */ @@ -25,7 +25,7 @@ interface VisitInterface /** * Tracks a visit. - * + * * @return void */ public function handle(); diff --git a/core/Translate.php b/core/Translate.php index c128fd672ab01844d4cf0d1feaed2134cd556ea9..34bd35ba1223c8359deda10cdd737bee68f073a4 100644 --- a/core/Translate.php +++ b/core/Translate.php @@ -105,22 +105,22 @@ class Translate /** * Triggered when the current user's language is requested. - * + * * By default the current language is determined by the **language** query * parameter. Plugins can override this logic by subscribing to this event. - * + * * **Example** - * + * * public function getLanguage(&$lang) * { * $client = new My3rdPartyAPIClient(); * $thirdPartyLang = $client->getLanguageForUser(Piwik::getCurrentUserLogin()); - * + * * if (!empty($thirdPartyLang)) { * $lang = $thirdPartyLang; * } * } - * + * * @param string &$lang The language that should be used for the current user. Will be * initialized to the value of the **language** query parameter. */ @@ -190,19 +190,19 @@ class Translate /** * Triggered before generating the JavaScript code that allows i18n strings to be used * in the browser. - * + * * Plugins should subscribe to this event to specify which translations * should be available to JavaScript. * * Event handlers should add whole translation keys, ie, keys that include the plugin name. - * + * * **Example** * * public function getClientSideTranslationKeys(&$result) * { * $result[] = "MyPlugin_MyTranslation"; * } - * + * * @param array &$result The whole list of client side translation keys. */ Piwik::postEvent('Translate.getClientSideTranslationKeys', array(&$result)); diff --git a/core/Twig.php b/core/Twig.php index 7fa19ef2475b60fc9e4b2aa0017f8a9f0ef70228..b0707350c49d7d6626772509d56e3f96eaadd2d5 100755 --- a/core/Twig.php +++ b/core/Twig.php @@ -44,7 +44,7 @@ class Twig $manager = Plugin\Manager::getInstance(); $theme = $manager->getThemeEnabled(); $loaders = array(); - + //create loader for custom theme to overwrite twig templates if($theme && $theme->getPluginName() != \Piwik\Plugin\Manager::DEFAULT_THEME) { $customLoader = $this->getCustomThemeLoader($theme); @@ -56,7 +56,7 @@ class Twig } $loaders[] = $loader; - + $chainLoader = new Twig_Loader_Chain($loaders); // Create new Twig Environment and set cache dir diff --git a/core/Updates/0.9.1.php b/core/Updates/0.9.1.php index db81f8d14d0d933b6ab3a7c4f83f106aebfedfdc..9d49a906e656c7de337d16c022832ed2d8c403ee 100644 --- a/core/Updates/0.9.1.php +++ b/core/Updates/0.9.1.php @@ -38,12 +38,12 @@ class Updates_0_9_1 extends Updates return array( 'UPDATE ' . Common::prefixTable('site') . ' - SET timezone = "UTC" + SET timezone = "UTC" WHERE timezone IN (' . $timezoneList . ')' => false, 'UPDATE `' . Common::prefixTable('option') . '` - SET option_value = "UTC" - WHERE option_name = "SitesManager_DefaultTimezone" + SET option_value = "UTC" + WHERE option_name = "SitesManager_DefaultTimezone" AND option_value IN (' . $timezoneList . ')' => false, ); } diff --git a/core/Updates/1.2-rc1.php b/core/Updates/1.2-rc1.php index 31d8ba58bc42abc2b1fac05c70ca7536ecb5464e..e268ad857028a38b1ff23bb25189fd076bc37113 100644 --- a/core/Updates/1.2-rc1.php +++ b/core/Updates/1.2-rc1.php @@ -92,7 +92,7 @@ class Updates_1_2_rc1 extends Updates // Drop migrated fields 'ALTER TABLE `' . Common::prefixTable('log_visit') . '` - DROP visitor_idcookie, + DROP visitor_idcookie, DROP config_md5config ' => 1091, 'ALTER TABLE `' . Common::prefixTable('log_conversion') . '` @@ -107,8 +107,8 @@ class Updates_1_2_rc1 extends Updates // Backfill action logs as best as we can 'UPDATE ' . Common::prefixTable('log_link_visit_action') . ' as action, ' . Common::prefixTable('log_visit') . ' as visit - SET action.idsite = visit.idsite, - action.server_time = visit.visit_last_action_time, + SET action.idsite = visit.idsite, + action.server_time = visit.visit_last_action_time, action.idvisitor = visit.idvisitor WHERE action.idvisit=visit.idvisit ' => false, diff --git a/core/Updates/1.5-b1.php b/core/Updates/1.5-b1.php index 9a8ed9653d1f5089e7becb3bb1726e610f2a63b9..4157a8c115d1098eff4f9e504d089441043b5f81 100644 --- a/core/Updates/1.5-b1.php +++ b/core/Updates/1.5-b1.php @@ -27,14 +27,14 @@ class Updates_1_5_b1 extends Updates server_time DATETIME NOT NULL, idvisit INTEGER(10) UNSIGNED NOT NULL, idorder varchar(100) NOT NULL, - + idaction_sku INTEGER(10) UNSIGNED NOT NULL, idaction_name INTEGER(10) UNSIGNED NOT NULL, idaction_category INTEGER(10) UNSIGNED NOT NULL, price FLOAT NOT NULL, quantity INTEGER(10) UNSIGNED NOT NULL, deleted TINYINT(1) UNSIGNED NOT NULL, - + PRIMARY KEY(idvisit, idorder, idaction_sku), INDEX index_idsite_servertime ( idsite, server_time ) ) DEFAULT CHARSET=utf8 ' => 1050, diff --git a/core/Updates/1.8.4-b1.php b/core/Updates/1.8.4-b1.php index efd5e8b76c9c81a3dc6839c34ff543245064a2c1..272eb0849858cf85769bc2957be569388bd6357e 100644 --- a/core/Updates/1.8.4-b1.php +++ b/core/Updates/1.8.4-b1.php @@ -78,7 +78,7 @@ class Updates_1_8_4_b1 extends Updates // grouping by name only would be case-insensitive, so we GROUP BY name,hash // ON (action.type = 1 AND canonical.hash = action.hash) will use index (type, hash) " INSERT INTO `$duplicates` ( - SELECT + SELECT action.idaction AS `before`, canonical.idaction AS `after` FROM diff --git a/core/Url.php b/core/Url.php index dfbf2dfd881a91eb658d4cd598c1349bffebdd98..bf1e267e10aab0f6e05ab9dadf09170cf1d8da7b 100644 --- a/core/Url.php +++ b/core/Url.php @@ -12,16 +12,16 @@ use Exception; /** * Provides URL related helper methods. - * + * * This class provides simple methods that can be used to parse and modify * the current URL. It is most useful when plugins need to redirect the current * request to a URL and when they need to link to other parts of Piwik in * HTML. - * + * * ### Examples - * + * * **Redirect to a different controller action** - * + * * public function myControllerAction() * { * $url = Url::getCurrentQueryStringWithParametersModified(array( @@ -30,9 +30,9 @@ use Exception; * )); * Url::redirectToUrl($url); * } - * + * * **Link to a different controller action in a template** - * + * * public function myControllerAction() * { * $url = Url::getCurrentQueryStringWithParametersModified(array( @@ -45,7 +45,7 @@ use Exception; * $view->realtimeMapUrl = $url; * return $view->render(); * } - * + * */ class Url { @@ -70,7 +70,7 @@ class Url /** * Returns the current URL without the query string. - * + * * @param bool $checkTrustedHost Whether to do trusted host check. Should ALWAYS be true, * except in {@link Piwik\Plugin\Controller}. * @return string eg, `"http://example.org/dir1/dir2/index.php"` if the current URL is @@ -306,7 +306,7 @@ class Url /** * Sets the host. Useful for CLI scripts, eg. core:archive command - * + * * @param $host string */ public static function setHost($host) @@ -367,7 +367,7 @@ class Url * * @return array If current URL is `"http://example.org/dir1/dir2/index.php?param1=value1¶m2=value2"` * this will return: - * + * * array( * 'param1' => string 'value1', * 'param2' => string 'value2' @@ -408,7 +408,7 @@ class Url /** * Converts an array of parameters name => value mappings to a query * string. - * + * * @param array $parameters eg. `array('param1' => 10, 'param2' => array(1,2))` * @return string eg. `"param1=10¶m2[]=1¶m2[]=2"` * @api @@ -440,7 +440,7 @@ class Url /** * Redirects the user to the referrer. If no referrer exists, the user is redirected * to the current URL without query string. - * + * * @api */ public static function redirectToReferrer() diff --git a/core/UrlHelper.php b/core/UrlHelper.php index 9262ec392da90abe198fe0e9d24a9ef708b5409e..485b5ec7bfc61453e28d4c16d447e40df2fe8485 100644 --- a/core/UrlHelper.php +++ b/core/UrlHelper.php @@ -10,7 +10,7 @@ namespace Piwik; /** * Contains less commonly needed URL helper methods. - * + * */ class UrlHelper { @@ -108,9 +108,9 @@ class UrlHelper /** * Returns a URL created from the result of the [parse_url](http://php.net/manual/en/function.parse-url.php) * function. - * + * * Copied from the PHP comments at [http://php.net/parse_url](http://php.net/parse_url). - * + * * @param array $parsed Result of [parse_url](http://php.net/manual/en/function.parse-url.php). * @return false|string The URL or `false` if `$parsed` isn't an array. * @api diff --git a/core/View.php b/core/View.php index e7207d7bebe2364e766b64492c8dd4e929ad1b19..d9cbfe0b9ce5160b7453e20de1172e0581bd0a6c 100644 --- a/core/View.php +++ b/core/View.php @@ -27,7 +27,7 @@ if (!defined('PIWIK_USER_PATH')) { * View lets you set properties that will be passed on to a Twig template. * View will also set several properties that will be available in all Twig * templates, including: - * + * * - **currentModule**: The value of the **module** query parameter. * - **currentAction**: The value of the **action** query parameter. * - **userLogin**: The current user login name. @@ -43,29 +43,29 @@ if (!defined('PIWIK_USER_PATH')) { * - **show_autocompleter**: Whether the site selector should be shown or not. * - **loginModule**: The name of the currently used authentication module. * - **userAlias**: The alias of the current user. - * + * * ### Template Naming Convention - * + * * Template files should be named after the controller method they are used in. * If they are used in more than one controller method or are included by another * template, they should describe the output they generate and be prefixed with * an underscore, eg, **_dataTable.twig**. - * + * * ### Twig - * + * * Twig templates must exist in the **templates** folder in a plugin's root * folder. - * + * * The following filters are available to twig templates: - * + * * - **translate**: Outputs internationalized text using a translation token, eg, * `{{ 'General_Date'|translate }}`. sprintf parameters can be passed * to the filter. * - **urlRewriteWithParameters**: Modifies the current query string with the given * set of parameters, eg, - * + * * {{ {'module':'MyPlugin', 'action':'index'} | urlRewriteWithParameters }} - * + * * - **sumTime**: Pretty formats an number of seconds. * - **money**: Formats a numerical value as a monetary value using the currency * of the supplied site (second arg is site ID). @@ -74,9 +74,9 @@ if (!defined('PIWIK_USER_PATH')) { * eg, `{{ myReallyLongText|truncate(80) }}` * - **implode**: Calls `implode`. * - **ucwords**: Calls `ucwords`. - * + * * The following functions are available to twig templates: - * + * * - **linkTo**: Modifies the current query string with the given set of parameters, * eg `{{ linkTo({'module':'MyPlugin', 'action':'index'}) }}`. * - **sparkline**: Outputs a sparkline image HTML element using the sparkline image @@ -85,11 +85,11 @@ if (!defined('PIWIK_USER_PATH')) { * which is outputted in the template, eg, `{{ postEvent('MyPlugin.event') }}` * - **isPluginLoaded**: Returns true if the supplied plugin is loaded, false if otherwise. * `{% if isPluginLoaded('Goals') %}...{% endif %}` - * + * * ### Examples - * + * * **Basic usage** - * + * * // a controller method * public function myView() * { @@ -98,7 +98,7 @@ if (!defined('PIWIK_USER_PATH')) { * $view->property2 = "another view property"; * return $view->render(); * } - * + * * * @api */ @@ -117,7 +117,7 @@ class View implements ViewInterface /** * Constructor. - * + * * @param string $templateFile The template file to load. Must be in the following format: * `"@MyPlugin/templateFileName"`. Note the absence of .twig * from the end of the name. @@ -286,7 +286,7 @@ class View implements ViewInterface /** * Set stored value used in the Content-Type HTTP header field. The header is * set just before rendering. - * + * * @param string $contentType */ public function setContentType($contentType) @@ -297,7 +297,7 @@ class View implements ViewInterface /** * Set X-Frame-Options field in the HTTP response. The header is set just * before rendering. - * + * * _Note: setting this allows you to make sure the View **cannot** be * embedded in iframes. Learn more [here](https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options)._ * @@ -356,7 +356,7 @@ class View implements ViewInterface /** * Creates a View for and then renders the single report template. - * + * * Can be used for pages that display only one report to avoid having to create * a new template. * diff --git a/core/View/RenderTokenParser.php b/core/View/RenderTokenParser.php index 60547d4d99d461164067072b4999614ffbb91511..2800beab8b3ad833de0e08d7698e0c41d4ac3b52 100644 --- a/core/View/RenderTokenParser.php +++ b/core/View/RenderTokenParser.php @@ -41,7 +41,7 @@ class RenderTokenParser extends Twig_TokenParser $variablesOverride = new Twig_Node_Expression_Array(array(), $token->getLine()); if ($stream->test(Twig_Token::NAME_TYPE, 'with')) { $stream->next(); - + $variablesOverride->addElement($this->parser->getExpressionParser()->parseExpression()); } diff --git a/core/View/ReportsByDimension.php b/core/View/ReportsByDimension.php index e520f382f9150532fb8f29c46b51b9f23cf8519d..e1cb058459354af9a2bc2b61d0ed8ee86e8f6249 100644 --- a/core/View/ReportsByDimension.php +++ b/core/View/ReportsByDimension.php @@ -90,10 +90,10 @@ class ReportsByDimension extends View { /** * Triggered before rendering {@link ReportsByDimension} views. - * + * * Plugins can use this event to configure {@link ReportsByDimension} instances by * adding or removing reports to display. - * + * * @param ReportsByDimension $this The view instance. */ Piwik::postEvent('View.ReportsByDimension.render', array($this)); diff --git a/core/ViewDataTable/Config.php b/core/ViewDataTable/Config.php index 8fbdf85321295a484811e93b9c4954a3bef2bb2d..093f28b254851a61d1a7b20e91fb672f8ed9b72b 100644 --- a/core/ViewDataTable/Config.php +++ b/core/ViewDataTable/Config.php @@ -15,45 +15,45 @@ use Piwik\Plugins\API\API; /** * Contains base display properties for {@link Piwik\Plugin\ViewDataTable}s. Manipulating these * properties in a ViewDataTable instance will change how its report will be displayed. - * + * * <a name="client-side-properties-desc"></a> * **Client Side Properties** - * + * * Client side properties are properties that should be passed on to the browser so * client side JavaScript can use them. Only affects ViewDataTables that output HTML. * * <a name="overridable-properties-desc"></a> * **Overridable Properties** - * + * * Overridable properties are properties that can be set via the query string. * If a request has a query parameter that matches an overridable property, the property * will be set to the query parameter value. - * + * * **Reusing base properties** - * + * * Many of the properties in this class only have meaning for the {@link Piwik\Plugin\Visualization} - * class, but can be set for other visualizations that extend {@link Piwik\Plugin\ViewDataTable} + * class, but can be set for other visualizations that extend {@link Piwik\Plugin\ViewDataTable} * directly. - * + * * Visualizations that extend {@link Piwik\Plugin\ViewDataTable} directly and want to re-use these * properties must make sure the properties are used in the exact same way they are used in * {@link Piwik\Plugin\Visualization}. - * + * * **Defining new display properties** - * + * * If you are creating your own visualization and want to add new display properties for * it, extend this class and add your properties as fields. - * + * * Properties are marked as client side properties by calling the * {@link addPropertiesThatShouldBeAvailableClientSide()} method. - * + * * Properties are marked as overridable by calling the * {@link addPropertiesThatCanBeOverwrittenByQueryParams()} method. - * + * * ### Example - * + * * **Defining new display properties** - * + * * class MyCustomVizConfig extends Config * { * /** @@ -65,11 +65,11 @@ use Piwik\Plugins\API\API; * * Another custom property. It is available client side. * *\/ * public $another_custom_property = true; - * + * * public function __construct() * { * parent::__construct(); - * + * * $this->addPropertiesThatShouldBeAvailableClientSide(array('another_custom_property')); * $this->addPropertiesThatCanBeOverwrittenByQueryParams(array('my_custom_property')); * } @@ -469,7 +469,7 @@ class Config /** * Marks display properties as client side properties. [Read this](#client-side-properties-desc) * to learn more. - * + * * @param array $propertyNames List of property names, eg, `array('show_limit_control', 'show_goals')`. */ public function addPropertiesThatShouldBeAvailableClientSide(array $propertyNames) @@ -482,7 +482,7 @@ class Config /** * Marks display properties as overridable. [Read this](#overridable-properties-desc) to * learn more. - * + * * @param array $propertyNames List of property names, eg, `array('show_limit_control', 'show_goals')`. */ public function addPropertiesThatCanBeOverwrittenByQueryParams(array $propertyNames) @@ -495,7 +495,7 @@ class Config /** * Returns array of all property values in this config object. Property values are mapped * by name. - * + * * @return array eg, `array('show_limit_control' => 0, 'show_goals' => 1, ...)` */ public function getProperties() @@ -555,7 +555,7 @@ class Config * Adds a related report to the {@link $related_reports} property. If the report * references the one that is currently being displayed, it will not be added to the related * report list. - * + * * @param string $relatedReport The plugin and method of the report, eg, `'UserSettings.getBrowser'`. * @param string $title The report's display name, eg, `'Browsers'`. * @param array $queryParams Any extra query parameters to set in releated report's URL, eg, @@ -582,10 +582,10 @@ class Config * Adds several related reports to the {@link $related_reports} property. If * any of the reports references the report that is currently being displayed, it will not * be added to the list. All other reports will still be added though. - * + * * If you need to make sure the related report URL has some extra query parameters, * use {@link addRelatedReport()}. - * + * * @param array $relatedReports Array mapping report IDs with their internationalized display * titles, eg, * ``` @@ -604,9 +604,9 @@ class Config /** * Associates internationalized text with a metric. Overwrites existing mappings. - * + * * See {@link $translations}. - * + * * @param string $columnName The name of a column in the report data, eg, `'nb_visits'` or * `'goal_1_nb_conversions'`. * @param string $translation The internationalized text, eg, `'Visits'` or `"Conversions for 'My Goal'"`. @@ -618,9 +618,9 @@ class Config /** * Associates multiple translations with metrics. - * + * * See {@link $translations} and {@link addTranslation()}. - * + * * @param array $translations An array of column name => text mappings, eg, * ``` * array( diff --git a/core/ViewDataTable/Factory.php b/core/ViewDataTable/Factory.php index 52c74933d186f8d8e8efeebf536eb0efb7e44751..9ac90a1723ac676a3c53bed1d09ba8e0166cef45 100644 --- a/core/ViewDataTable/Factory.php +++ b/core/ViewDataTable/Factory.php @@ -17,9 +17,9 @@ use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable; * Provides a means of creating {@link Piwik\Plugin\ViewDataTable} instances by ID. * * ### Examples - * + * * **Creating a ViewDataTable for a report** - * + * * // method in MyPlugin\Controller * public function myReport() * { @@ -28,9 +28,9 @@ use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable; * $view->config->translations['myFancyMetric'] = "My Fancy Metric"; * return $view->render(); * } - * + * * **Displaying a report in another way** - * + * * // method in MyPlugin\Controller * // use the same data that's used in myReport() above, but transform it in some way before * // displaying. @@ -40,9 +40,9 @@ use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable; * $view->config->filters[] = array('MyMagicFilter', array('an arg', 'another arg')); * return $view->render(); * } - * + * * **Force a report to be shown as a bar graph** - * + * * // method in MyPlugin\Controller * // force the myReport report to show as a bar graph if there is no viewDataTable query param, * // even though it is configured to show as a table. @@ -52,7 +52,7 @@ use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable; * $forceDefault = true); * return $view->render(); * } - * + * * * @api */ diff --git a/core/ViewDataTable/Manager.php b/core/ViewDataTable/Manager.php index 0559661d4438f7da9d3f06882dac2bc0bb3fcdd7..19e2335ce1d137b6840c72aac9e67e3e5d0c57d4 100644 --- a/core/ViewDataTable/Manager.php +++ b/core/ViewDataTable/Manager.php @@ -70,17 +70,17 @@ class Manager /** * Triggered when gathering all available DataTable visualizations. - * + * * Plugins that want to expose new DataTable visualizations should subscribe to * this event and add visualization class names to the incoming array. - * + * * **Example** - * + * * public function addViewDataTable(&$visualizations) * { * $visualizations[] = 'Piwik\\Plugins\\MyPlugin\\MyVisualization'; * } - * + * * @param array &$visualizations The array of all available visualizations. * @ignore * @deprecated since 2.5.0 Place visualization in a "Visualizations" directory instead. diff --git a/core/ViewDataTable/RequestConfig.php b/core/ViewDataTable/RequestConfig.php index d4856bebe4c4d8dbd4eeb97013d6300f4dea81a8..ad77df882473092e9c1cbfa3733b7860c3b31786 100644 --- a/core/ViewDataTable/RequestConfig.php +++ b/core/ViewDataTable/RequestConfig.php @@ -13,48 +13,48 @@ use Piwik\Common; /** * Contains base request properties for {@link Piwik\Plugin\ViewDataTable} instances. Manipulating * these properties will change the way a {@link Piwik\Plugin\ViewDataTable} loads report data. - * + * * <a name="client-side-parameters-desc"></a> * **Client Side Parameters** - * + * * Client side parameters are request properties that should be passed on to the browser so * client side JavaScript can use them. These properties will also be passed to the server with * every AJAX request made. - * + * * Only affects ViewDataTables that output HTML. - * + * * <a name="overridable-properties-desc"></a> * **Overridable Properties** * * Overridable properties are properties that can be set via the query string. * If a request has a query parameter that matches an overridable property, the property * will be set to the query parameter value. - * + * * **Reusing base properties** - * + * * Many of the properties in this class only have meaning for the {@link Piwik\Plugin\Visualization} - * class, but can be set for other visualizations that extend {@link Piwik\Plugin\ViewDataTable} + * class, but can be set for other visualizations that extend {@link Piwik\Plugin\ViewDataTable} * directly. - * + * * Visualizations that extend {@link Piwik\Plugin\ViewDataTable} directly and want to re-use these * properties must make sure the properties are used in the exact same way they are used in * {@link Piwik\Plugin\Visualization}. - * + * * **Defining new request properties** - * + * * If you are creating your own visualization and want to add new request properties for * it, extend this class and add your properties as fields. - * + * * Properties are marked as client side parameters by calling the * {@link addPropertiesThatShouldBeAvailableClientSide()} method. - * + * * Properties are marked as overridable by calling the * {@link addPropertiesThatCanBeOverwrittenByQueryParams()} method. * * ### Example - * + * * **Defining new request properties** - * + * * class MyCustomVizRequestConfig extends RequestConfig * { * /** @@ -66,16 +66,16 @@ use Piwik\Common; * * Another custom property. It is available client side. * *\/ * public $another_custom_property = true; - * + * * public function __construct() * { * parent::__construct(); - * + * * $this->addPropertiesThatShouldBeAvailableClientSide(array('another_custom_property')); * $this->addPropertiesThatCanBeOverwrittenByQueryParams(array('my_custom_property')); * } * } - * + * * @api */ class RequestConfig @@ -240,7 +240,7 @@ class RequestConfig /** * Marks request properties as client side properties. [Read this](#client-side-properties-desc) * to learn more. - * + * * @param array $propertyNames List of property names, eg, `array('disable_queued_filters', 'filter_column')`. */ public function addPropertiesThatShouldBeAvailableClientSide(array $propertyNames) @@ -253,7 +253,7 @@ class RequestConfig /** * Marks display properties as overridable. [Read this](#overridable-properties-desc) to * learn more. - * + * * @param array $propertyNames List of property names, eg, `array('disable_queued_filters', 'filter_column')`. */ public function addPropertiesThatCanBeOverwrittenByQueryParams(array $propertyNames) diff --git a/core/WidgetsList.php b/core/WidgetsList.php index d9ae1f4eb62187aa61d6c4e0bd8fb649ca70f062..e67f6b1b7708f2011b4c6ba635d86de48bd8fc4d 100644 --- a/core/WidgetsList.php +++ b/core/WidgetsList.php @@ -14,10 +14,10 @@ use Piwik\Plugin\Widgets; /** * Manages the global list of reports that can be displayed as dashboard widgets. - * + * * Reports are added as dashboard widgets through the {@hook WidgetsList.addWidgets} * event. Observers for this event should call the {@link add()} method to add reports. - * + * * @api * @method static \Piwik\WidgetsList getInstance() */ @@ -198,9 +198,9 @@ class WidgetsList extends Singleton /** * Removes one or more widgets from the widget list. - * + * * @param string $widgetCategory The widget category. Can be a translation token. - * @param string|false $widgetName The name of the widget to remove. Cannot be a + * @param string|false $widgetName The name of the widget to remove. Cannot be a * translation token. If not supplied, the entire category * will be removed. */ diff --git a/core/testMinimumPhpVersion.php b/core/testMinimumPhpVersion.php index 7f03b02479360847f23b37264b5cbe688b44efe1..1be348e57070bcc8219e8896fd39c1650f251c68 100644 --- a/core/testMinimumPhpVersion.php +++ b/core/testMinimumPhpVersion.php @@ -22,7 +22,7 @@ $minimumPhpInvalid = version_compare($piwik_minimumPHPVersion, $piwik_currentPHP if ($minimumPhpInvalid) { $piwik_errorMessage .= "<p><strong>To run Piwik you need at least PHP version $piwik_minimumPHPVersion</strong></p> <p>Unfortunately it seems your webserver is using PHP version $piwik_currentPHPVersion. </p> - <p>Please try to update your PHP version, Piwik is really worth it! Nowadays most web hosts + <p>Please try to update your PHP version, Piwik is really worth it! Nowadays most web hosts support PHP $piwik_minimumPHPVersion.</p> <p>Also see the FAQ: <a href='http://piwik.org/faq/how-to-install/#faq_77'>My Web host supports PHP4 by default. How can I enable PHP5?</a></p>"; } else { diff --git a/js/LICENSE.txt b/js/LICENSE.txt index 76258a846db5136eb25867cc4c4bf26652a29ead..29e718b4c538ab9b37320c9af65e149f7aee866b 100644 --- a/js/LICENSE.txt +++ b/js/LICENSE.txt @@ -1,32 +1,32 @@ Copyright 2013 Anthon Pang -All rights reserved. +All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. -* Neither the name of Anthon Pang nor the names of its contributors - may be used to endorse or promote products derived from this - software without specific prior written permission. +* Neither the name of Anthon Pang nor the names of its contributors + may be used to endorse or promote products derived from this + software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. View online: http://piwik.org/free-software/bsd/ diff --git a/js/README.md b/js/README.md index 478fea68d78c76305e8d8062f5213931ec49e08b..dc4220836e789d034294ae8d6766a8f5c045a295 100644 --- a/js/README.md +++ b/js/README.md @@ -32,7 +32,7 @@ The js/ folder contains: $ wget http://www.julienlecomte.net/yuicompressor/yuicompressor-2.4.2.zip $ unzip yuicompressor-2.4.2.zip ``` - + To compress the code containing the evil "eval", either apply the patch from http://yuilibrary.com/projects/yuicompressor/ticket/2343811, or run: @@ -41,7 +41,7 @@ The js/ folder contains: $ cd /path/to/piwik/js/ $ sed '/<DEBUG>/,/<\/DEBUG>/d' < piwik.js | sed 's/eval/replacedEvilString/' | java -jar yuicompressor-2.4.2/build/yuicompressor-2.4.2.jar --type js --line-break 1000 | sed 's/replacedEvilString/eval/' | sed 's/^[/][*]/\/*!/' > piwik-min.js && cp piwik-min.js ../piwik.js ``` - + This will generate the minify /path/to/piwik/js/piwik-min.js and copy it to /path/to/piwik/piwik.js diff --git a/js/piwik.js b/js/piwik.js index a7ef9f24fcf09b291e4a56de37b25d0cfc8fd83c..975ad1b9cd0f1391c599f07e7e071b0a7688422f 100644 --- a/js/piwik.js +++ b/js/piwik.js @@ -2933,7 +2933,7 @@ if (typeof Piwik !== 'object') { /** * Set the server generation time. * If set, the browser's performance.timing API in not used anymore to determine the time. - * + * * @param int generationTime */ setGenerationTimeMs: function (generationTime) { diff --git a/misc/log-analytics/README.md b/misc/log-analytics/README.md index 880133730b8be92328028f282a7574f525d19a58..fe7c963fa298c959932b2252c6566b354512f180 100644 --- a/misc/log-analytics/README.md +++ b/misc/log-analytics/README.md @@ -205,7 +205,7 @@ You can use any log format that this script can handle, like Apache Combined, an ### Setup Nginx logs ``` -http { +http { ... log_format piwik '{"ip": "$remote_addr",' '"host": "$host",' diff --git a/misc/log-analytics/import_logs.py b/misc/log-analytics/import_logs.py index f986e580b4e078e3dc3218d851e84882afab04a2..90366304beab2c60951276adaab57ae53c91e13c 100755 --- a/misc/log-analytics/import_logs.py +++ b/misc/log-analytics/import_logs.py @@ -140,7 +140,7 @@ class JsonFormat(BaseFormat): super(JsonFormat, self).__init__(name) self.json = None self.date_format = '%Y-%m-%dT%H:%M:%S' - + def check_format_line(self, line): try: self.json = json.loads(line) @@ -160,7 +160,7 @@ class JsonFormat(BaseFormat): # Some ugly patchs ... if key == 'generation_time_milli': self.json[key] = int(self.json[key] * 1000) - # Patch date format ISO 8601 + # Patch date format ISO 8601 elif key == 'date': tz = self.json[key][19:] self.json['timezone'] = tz.replace(':', '') @@ -170,7 +170,7 @@ class JsonFormat(BaseFormat): return self.json[key] except KeyError: raise BaseFormatException() - + def get_all(self,): return self.json @@ -201,7 +201,7 @@ class RegexFormat(BaseFormat): def get_all(self,): return self.matched.groupdict() - + @@ -1503,12 +1503,12 @@ class Parser(object): if format_groups < match_groups: format = candidate_format format_groups = match_groups - except AttributeError: + except AttributeError: format = candidate_format else: logging.debug('Format %s does not match', name) - + return format @staticmethod diff --git a/misc/log-analytics/tests/tests.py b/misc/log-analytics/tests/tests.py index 5499a509bdea562ac136ab88efbb482c6e49b1d4..5d42e51797616a82be1d3886d04e4ab4dc27e1f4 100644 --- a/misc/log-analytics/tests/tests.py +++ b/misc/log-analytics/tests/tests.py @@ -9,11 +9,11 @@ def add_junk_to_file(path): file = open(path) contents = file.read() file.close() - + file = open('tmp.log', 'w') file.write(contents + ' junk') file.close() - + return 'tmp.log' def tearDownModule(): @@ -26,10 +26,10 @@ def test_format_detection(): format = import_logs.Parser.detect_format(file) assert(format is not None) assert(format.name == format_name) - + def _test_junk(format_name): tmp_path = add_junk_to_file('logs/%s.log' % format_name) - + file = open(tmp_path) format = import_logs.Parser.detect_format(file) assert(format is not None) @@ -39,7 +39,7 @@ def test_format_detection(): f = functools.partial(_test, format_name) f.description = 'Testing autodetection of format ' + format_name yield f - + f = functools.partial(_test_junk, format_name) f.description = 'Testing autodetection of format ' + format_name + ' w/ garbage at end of line' yield f @@ -81,7 +81,7 @@ class Resolver(object): class Recorder(object): """Mock recorder which collects hits but doesn't put their in database.""" recorders = [] - + @classmethod def add_hits(cls, hits): cls.recorders.extend(hits) @@ -89,7 +89,7 @@ class Recorder(object): def test_replay_tracking_arguments(): """Test data parsing from sample log file.""" file_ = 'logs/logs_to_tests.log' - + import_logs.stats = import_logs.Statistics() import_logs.config = Config() import_logs.resolver = Resolver() @@ -185,11 +185,11 @@ def test_replay_tracking_arguments(): def parse_log_file_line(format_name, file_): format = import_logs.FORMATS[format_name] - + file = open(file_) match = format.check_format(file) file.close() - + return format.get_all() # check parsing groups @@ -203,18 +203,18 @@ def check_common_groups(groups): def check_ncsa_extended_groups(groups): check_common_groups(groups) - + assert groups['referrer'] == '-' assert groups['user_agent'] == 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11' def check_common_vhost_groups(groups): check_common_groups(groups) - + assert groups['host'] == 'www.example.com' def check_common_complete_groups(groups): check_ncsa_extended_groups(groups) - + assert groups['host'] == 'www.example.com' def check_iis_groups(groups): @@ -227,12 +227,12 @@ def check_iis_groups(groups): assert groups['status'] == '200' assert groups['length'] == '27028' assert groups['host'] == 'example.com' - + expected_hit_properties = ['date', 'path', 'query_string', 'ip', 'referrer', 'user_agent', 'status', 'length', 'host'] for property_name in groups.keys(): assert property_name in expected_hit_properties - + def check_s3_groups(groups): assert groups['host'] == 'www.example.com' assert groups['date'] == '10/Feb/2012:16:42:07' @@ -261,28 +261,28 @@ def check_match_groups(format_name, groups): symbols = globals() check_function = symbols['check_' + format_name + '_groups'] return check_function(groups) - + # parsing tests def test_format_parsing(): # test format regex parses correctly def _test(format_name, path): groups = parse_log_file_line(format_name, path) check_match_groups(format_name, groups) - + # test format regex parses correctly when there's added junk at the end of the line def _test_with_junk(format_name, path): tmp_path = add_junk_to_file(path) _test(format_name, tmp_path) - + for format_name in import_logs.FORMATS.iterkeys(): f = functools.partial(_test, format_name, 'logs/' + format_name + '.log') f.description = 'Testing parsing of format "%s"' % format_name yield f - + f = functools.partial(_test_with_junk, format_name, 'logs/' + format_name + '.log') f.description = 'Testing parsin of format "%s" with junk appended to path' % format_name yield f - + f = functools.partial(_test, 'common', 'logs/ncsa_extended.log') f.description = 'Testing parsing of format "common" with ncsa_extended log' yield f diff --git a/misc/others/ExamplePiwikTracker.php b/misc/others/ExamplePiwikTracker.php index f787a0847abd0266dd36e4d925301df0d3b6560c..5daa2d770105492e258aaffa97d9c63b8913a0d7 100644 --- a/misc/others/ExamplePiwikTracker.php +++ b/misc/others/ExamplePiwikTracker.php @@ -5,7 +5,7 @@ require_once '../../libs/PiwikTracker/PiwikTracker.php'; PiwikTracker::$URL = 'http://localhost/trunk/'; $piwikTracker = new PiwikTracker($idSite = 1); -// You can manually set the Visitor details (resolution, time, plugins) +// You can manually set the Visitor details (resolution, time, plugins) // See all other ->set* functions available in the PiwikTracker class $piwikTracker->setResolution(1600, 1400); diff --git a/misc/others/api_rest_call.php b/misc/others/api_rest_call.php index d158454e24a18e77b8fc92dad41ac7fe603118ee..c85d5c193e58c585f825469f78e378acfb42991f 100644 --- a/misc/others/api_rest_call.php +++ b/misc/others/api_rest_call.php @@ -1,7 +1,7 @@ <?php exit; // REMOVE this line to run the script -// this token is used to authenticate your API request. +// this token is used to authenticate your API request. // You can get the token on the API page inside your Piwik interface $token_auth = 'anonymous'; diff --git a/misc/others/phpstorm-codestyles/README.md b/misc/others/phpstorm-codestyles/README.md index 5f910b0a5d7212064287ccf284d63d6ba6aa6dd6..ce4f8e94bbdfa8a4d72ecc8d4561cf2771036e02 100644 --- a/misc/others/phpstorm-codestyles/README.md +++ b/misc/others/phpstorm-codestyles/README.md @@ -4,7 +4,7 @@ Piwik uses PSR coding standard for php source code. We use a slightly customized (because the default PSR style in Phpstorm results in some unwanted changes). Steps: - * Use latest Phpstorm + * Use latest Phpstorm * Copy this Piwik_codestyle.xml file in your ~/.WebIde60/config/codestyles/ * If you use Windows or Mac see which path to copy at: http://intellij-support.jetbrains.com/entries/23358108 * To automatically link to the file in Piwik: diff --git a/misc/others/uninstall-delete-piwik-directory.php b/misc/others/uninstall-delete-piwik-directory.php index e05f70259c83a11fb0a1764a69693e2b6a218532..97030daa48440f1e668aa1f87023c473e0000168 100644 --- a/misc/others/uninstall-delete-piwik-directory.php +++ b/misc/others/uninstall-delete-piwik-directory.php @@ -5,7 +5,7 @@ // For example if the piwik/ folder is at http://your-site/piwik/ you put the file in http://your-site/uninstall-delete-piwik-directory.php // 3) Go with your browser to http://your-site/uninstall-delete-piwik-directory.php // 4) The folder http://your-site/piwik/ should now be deleted! -// We hope you enjoyed Piwik. If you have any feedback why you stopped using Piwik, +// We hope you enjoyed Piwik. If you have any feedback why you stopped using Piwik, // please let us know at hello@piwik.org - we are interested by your experience function unlinkRecursive($dir) { diff --git a/misc/package/WebAppGallery/parameters.xml b/misc/package/WebAppGallery/parameters.xml index 692cd832b794fa9dfe643705c60e74d8b75c88ef..14498146ce63fecf7e0006f48e7d63d018f581bb 100644 --- a/misc/package/WebAppGallery/parameters.xml +++ b/misc/package/WebAppGallery/parameters.xml @@ -44,10 +44,10 @@ <parameterEntry type="TextFile" scope="config\\config.ini.php" - match="host\s*=\s*"([^"]*)"" + match="host\s*=\s*"([^"]*)"" /> </parameter> - + <!-- Database name --> <parameter name="DbName" @@ -71,7 +71,7 @@ <parameterEntry type="TextFile" scope="config\\config.ini.php" - match="dbname\s*=\s*"([^"]*)"" + match="dbname\s*=\s*"([^"]*)"" /> </parameter> @@ -98,7 +98,7 @@ <parameterEntry type="TextFile" scope="config\\config.ini.php" - match="username\s*=\s*"([^"]*)"" + match="username\s*=\s*"([^"]*)"" /> </parameter> @@ -127,7 +127,7 @@ match="password\s*=\s*"([^"]{6,20})"" /> </parameter> - + <!-- Database admin user name --> <parameter name="DbAdminUsername" @@ -142,7 +142,7 @@ description="Password for the database administrator account. Required for site security. This may be predefined by your hosting provider." tags="Password,MySQL,DbAdminPassword"> </parameter> - + <!-- Execute install.sql --> <parameter name="Connection String" @@ -164,7 +164,7 @@ <parameterEntry type="TextFile" scope="config\\config.ini.php" - match="adapter\s*=\s*[^\r\n]*" + match="adapter\s*=\s*[^\r\n]*" /> </parameter> </parameters> diff --git a/misc/proxy-hide-piwik-url/README.md b/misc/proxy-hide-piwik-url/README.md index 016bbe15367eb2ee59dadd367e42e5fe2b5c5b75..a5344beda3d40057ffb96f56d1691a285fd0e758 100644 --- a/misc/proxy-hide-piwik-url/README.md +++ b/misc/proxy-hide-piwik-url/README.md @@ -1,7 +1,7 @@ ## Piwik Proxy Hide URL This script allows to track statistics using Piwik, without revealing the Piwik Server URL. This is useful for users who track multiple websites -on the same Piwik server, but don't want to show the Piwik server URL in +on the same Piwik server, but don't want to show the Piwik server URL in the source code of all tracked websites. ### Requirements diff --git a/plugins/API/API.php b/plugins/API/API.php index b72ab0ee86a15d0892ad9a332c35be96135b0ad4..9ce0742a255b187768167bed0f82705af713cf3d 100644 --- a/plugins/API/API.php +++ b/plugins/API/API.php @@ -103,11 +103,11 @@ class API extends \Piwik\Plugin\API /** * Triggered when gathering all available segment dimensions. - * + * * This event can be used to make new segment dimensions available. - * + * * **Example** - * + * * public function getSegmentsMetadata(&$segments, $idSites) * { * $segments[] = array( @@ -121,11 +121,11 @@ class API extends \Piwik\Plugin\API * 'permission' => $isAuthenticatedWithViewAccess, * ); * } - * + * * @param array &$dimensions The list of available segment dimensions. Append to this list to add * new segments. Each element in this list must contain the * following information: - * + * * - **type**: Either `'metric'` or `'dimension'`. `'metric'` means * the value is a numeric and `'dimension'` means it is * a string. Also, `'metric'` values will be displayed @@ -361,7 +361,7 @@ class API extends \Piwik\Plugin\API $className = Request::getClassNameAPI($plugin); $params['columns'] = implode(',', $columns); $dataTable = Proxy::getInstance()->call($className, 'get', $params); - + // make sure the table has all columns $array = ($dataTable instanceof DataTable\Map ? $dataTable->getDataTables() : array($dataTable)); foreach ($array as $table) { diff --git a/plugins/API/ProcessedReport.php b/plugins/API/ProcessedReport.php index ef1fcf618211cf6b4a1f62925e343bceca36eb8e..b496004bab0af495a81c485292b8dcdf6d382a49 100644 --- a/plugins/API/ProcessedReport.php +++ b/plugins/API/ProcessedReport.php @@ -168,25 +168,25 @@ class ProcessedReport /** * Triggered when gathering metadata for all available reports. - * + * * Plugins that define new reports should use this event to make them available in via * the metadata API. By doing so, the report will become available in scheduled reports * as well as in the Piwik Mobile App. In fact, any third party app that uses the metadata * API will automatically have access to the new report. - * + * * @param string &$availableReports The list of available reports. Append to this list * to make a report available. - * + * * Every element of this array must contain the following * information: - * + * * - **category**: A translated string describing the report's category. * - **name**: The translated display title of the report. * - **module**: The plugin of the report. * - **action**: The API method that serves the report. - * + * * The following information is optional: - * + * * - **dimension**: The report's [dimension](/guides/all-about-analytics-data#dimensions) if any. * - **metrics**: An array mapping metric names with their display names. * - **metricsDocumentation**: An array mapping metric names with their @@ -197,18 +197,18 @@ class ProcessedReport * metrics. * - **order**: The order of the report in the list of reports * with the same category. - * + * * @param array $parameters Contains the values of the sites and period we are * getting reports for. Some reports depend on this data. * For example, Goals reports depend on the site IDs being * requested. Contains the following information: - * + * * - **idSites**: The array of site IDs we are getting reports for. * - **period**: The period type, eg, `'day'`, `'week'`, `'month'`, * `'year'`, `'range'`. * - **date**: A string date within the period or a date range, eg, * `'2013-01-01'` or `'2012-01-01,2013-01-01'`. - * + * * TODO: put dimensions section in all about analytics data * @deprecated since 2.5.0 Use Report Classes instead. * @ignore @@ -238,18 +238,18 @@ class ProcessedReport /** * Triggered after all available reports are collected. - * + * * This event can be used to modify the report metadata of reports in other plugins. You * could, for example, add custom metrics to every report or remove reports from the list * of available reports. - * + * * @param array &$availableReports List of all report metadata. Read the {@hook API.getReportMetadata} * docs to see what this array contains. * @param array $parameters Contains the values of the sites and period we are * getting reports for. Some report depend on this data. * For example, Goals reports depend on the site IDs being * request. Contains the following information: - * + * * - **idSites**: The array of site IDs we are getting reports for. * - **period**: The period type, eg, `'day'`, `'week'`, `'month'`, * `'year'`, `'range'`. diff --git a/plugins/Actions/Columns/DestinationPage.php b/plugins/Actions/Columns/DestinationPage.php index 76ea3e3faecfaa706f9598c301fa902c0f79a11c..e47b7195be492be8bd208176ae37503f3e7c9c4c 100644 --- a/plugins/Actions/Columns/DestinationPage.php +++ b/plugins/Actions/Columns/DestinationPage.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class DestinationPage extends Dimension -{ +{ public function getName() { return Piwik::translate('General_ColumnDestinationPage'); diff --git a/plugins/Actions/Columns/Keyword.php b/plugins/Actions/Columns/Keyword.php index 71c93bd6489d347e46658d51df321482fe9629c4..3d7051c45113c34598ed4a20ad2fd9a7a6021781 100644 --- a/plugins/Actions/Columns/Keyword.php +++ b/plugins/Actions/Columns/Keyword.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class Keyword extends Dimension -{ +{ public function getName() { return Piwik::translate('General_ColumnKeyword'); diff --git a/plugins/Actions/Columns/KeywordwithNoSearchResult.php b/plugins/Actions/Columns/KeywordwithNoSearchResult.php index b7a19726a7c369b6ac85c3a29a0a2acd4ace9f2f..d6ffaf20441ef17774cacb4838d9a43451f16b3a 100644 --- a/plugins/Actions/Columns/KeywordwithNoSearchResult.php +++ b/plugins/Actions/Columns/KeywordwithNoSearchResult.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class KeywordwithNoSearchResult extends Dimension -{ +{ public function getName() { return Piwik::translate('Actions_ColumnNoResultKeyword'); diff --git a/plugins/Actions/Columns/SearchCategory.php b/plugins/Actions/Columns/SearchCategory.php index 7073c105fb76cc53140a0502e39235f5dbc870d2..6dc3c0b11ba617559182726a11d71a7217b7e638 100644 --- a/plugins/Actions/Columns/SearchCategory.php +++ b/plugins/Actions/Columns/SearchCategory.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class SearchCategory extends Dimension -{ +{ public function getName() { return Piwik::translate('Actions_ColumnSearchCategory'); diff --git a/plugins/Actions/javascripts/actionsDataTable.js b/plugins/Actions/javascripts/actionsDataTable.js index b0ab7873d08f04db6a5daafaa6eaf31ca3f6711d..d3bfa7a919284393c4fb43d8387146a7ba69262e 100644 --- a/plugins/Actions/javascripts/actionsDataTable.js +++ b/plugins/Actions/javascripts/actionsDataTable.js @@ -36,7 +36,7 @@ /** * UI control that handles extra functionality for Actions datatables. - * + * * @constructor */ exports.ActionsDataTable = function (element) { @@ -54,7 +54,7 @@ var self = this; self.cleanParams(); - + if (!rows) { rows = $('tr', domElem); } @@ -114,11 +114,11 @@ }); var rootRow = rows.first().prev(); - + // we look at the style of the row before the new rows to determine the rows' // level var level = rootRow.length ? getLevelFromClass(rootRow.attr('class')) + 1 : 0; - + rows.each(function () { var currentStyle = $(this).attr('class') || ''; @@ -133,10 +133,10 @@ return self.parentAttributeParent + ' ' + self.parentId; }); }); - + self.addOddAndEvenClasses(domElem); }, - + addOddAndEvenClasses: function(domElem) { // Add some styles on the cells even/odd // label (first column of a data row) or not @@ -212,7 +212,7 @@ else { var plusDetected = $('td img.plusMinus', domElem).attr('src').indexOf('plus') >= 0; var stripingNeeded = false; - + $(domElem).siblings().each(function () { var parents = $(this).prop('parent').split(' '); if (parents) { @@ -221,7 +221,7 @@ if (plusDetected) { $(this).css('display', '').removeClass('hidden'); stripingNeeded = !stripingNeeded; - + //unroll everything and display '-' sign //if the row is already opened var NextStyle = $(this).next().attr('class'); diff --git a/plugins/CoreAdminHome/Controller.php b/plugins/CoreAdminHome/Controller.php index 7de5be31d05bc4a89cce87366079a830075b169b..f1f0f5f1bdb9ced2abe3c475c7cdb27b6b49f1bd 100644 --- a/plugins/CoreAdminHome/Controller.php +++ b/plugins/CoreAdminHome/Controller.php @@ -150,7 +150,7 @@ class Controller extends \Piwik\Plugin\ControllerAdmin $message = html_entity_decode($e->getMessage(), ENT_QUOTES, 'UTF-8'); return json_encode(array('result' => 'error', 'message' => $message)); } - + Nonce::discardNonce(static::SET_PLUGIN_SETTINGS_NONCE); return json_encode(array('result' => 'success')); } diff --git a/plugins/CoreAdminHome/javascripts/jsTrackingGenerator.js b/plugins/CoreAdminHome/javascripts/jsTrackingGenerator.js index 8300bb1440579760ea48630018aa293359f92eb3..b8a48de1d9010bdf1f8156e5de28b3980dd0e553 100644 --- a/plugins/CoreAdminHome/javascripts/jsTrackingGenerator.js +++ b/plugins/CoreAdminHome/javascripts/jsTrackingGenerator.js @@ -13,7 +13,7 @@ /** * This class is deprecated. Use server-side events instead. - * + * * @deprecated */ var TrackingCodeGenerator = function () { diff --git a/plugins/CoreConsole/Commands/GeneratePluginBase.php b/plugins/CoreConsole/Commands/GeneratePluginBase.php index 5cfc506ac8e22d0571ab2fed074f59d81e71ddd0..d96051e88cff9b7b9e678964acab5fb2c793001b 100644 --- a/plugins/CoreConsole/Commands/GeneratePluginBase.php +++ b/plugins/CoreConsole/Commands/GeneratePluginBase.php @@ -106,7 +106,7 @@ abstract class GeneratePluginBase extends ConsoleCommand $translatedText = preg_replace('/(\s+)/', '', $translatedText); $translatedText = preg_replace("/[^A-Za-z0-9]/", '', $translatedText); $translatedText = trim($translatedText); - + return $this->removeNonJsonCompatibleCharacters($translatedText); } diff --git a/plugins/CoreHome/javascripts/broadcast.js b/plugins/CoreHome/javascripts/broadcast.js index 544cd8d70a0fb84a7687a24048e994a7e1b5f5c8..8453b81c470d5431f69857ac0b91a8c24d748920 100644 --- a/plugins/CoreHome/javascripts/broadcast.js +++ b/plugins/CoreHome/javascripts/broadcast.js @@ -324,17 +324,17 @@ var broadcast = { /** * Loads a popover by adding a 'popover' query parameter to the current URL and * indirectly executing the popover handler. - * + * * This function should be called to open popovers that can be opened by URL alone. * That is, if you want users to be able to copy-paste the URL displayed when a popover * is open into a new browser window/tab and have the same popover open, you should * call this function. - * + * * In order for this function to open a popover, there must be a popover handler * associated with handlerName. To associate one, call broadcast.addPopoverHandler. - * + * * @param {String} handlerName The name of the popover handler. - * @param {String} value The String value that should be passed to the popover + * @param {String} value The String value that should be passed to the popover * handler. */ propagateNewPopoverParameter: function (handlerName, value) { @@ -375,9 +375,9 @@ var broadcast = { /** * Adds a handler for the 'popover' query parameter. - * + * * @see broadcast#propagateNewPopoverParameter - * + * * @param {String} handlerName The handler name, eg, 'visitorProfile'. Should identify * the popover that the callback will open up. * @param {Function} callback This function should open the popover. It should take diff --git a/plugins/CoreHome/javascripts/color_manager.js b/plugins/CoreHome/javascripts/color_manager.js index e538de953d3192b7b01dd75cd288356e059ac96a..cffff2c7bec6455becbe10b7f87e39a5d4e5b22b 100644 --- a/plugins/CoreHome/javascripts/color_manager.js +++ b/plugins/CoreHome/javascripts/color_manager.js @@ -29,28 +29,28 @@ * components that don't manage HTML (like jqPlot or sparklines). Such components * can't use CSS colors directly since the colors are used to generate images * or by <canvas> elements. - * + * * Colors obtained via ColorManager are defined in CSS like this: - * + * * .my-color-namespace[data-name=color-name] { * color: #fff * } - * + * * and can be accessed in JavaScript like this: - * + * * piwik.ColorManager.getColor("my-color-namespace", "color-name"); - * + * * The singleton instance of this class can be accessed via piwik.ColorManager. */ var ColorManager = function () { // empty }; - + ColorManager.prototype = { /** * Returns the color for a namespace and name. - * + * * @param {String} namespace The string identifier that groups related colors * together. For example, 'sparkline-colors'. * @param {String} name The name of the color to retrieve. For example, 'lineColor'. @@ -63,10 +63,10 @@ return this._normalizeColor(element.css('color')); }, - + /** * Returns the colors for a namespace and a list of names. - * + * * @param {String} namespace The string identifier that groups related colors * together. For example, 'sparkline-colors'. * @param {Array} names An array of color names to retrieve. @@ -92,7 +92,7 @@ /** * Returns a color that is N % between two other colors. - * + * * @param {String|Array} spectrumStart The start color. If percentFromStart is 0, this color will * be returned. Can be either a hex color or RGB array. * It will be converted to an RGB array if a hex color is supplied. @@ -125,7 +125,7 @@ /** * Utility function that converts a hex color (ie, #fff or #1a1a1a) to an array of * RGB values. - * + * * @param {String} hexColor The color to convert. * @return {Array} An array with three integers between 0 and 255. */ @@ -151,7 +151,7 @@ /** * Utility function that converts an RGB array to a hex color. - * + * * @param {Array} rgbColor An array with three integers between 0 and 255. * @return {String} The hex color, eg, #1a1a1a. */ @@ -190,7 +190,7 @@ } return color; }, - + /** * Returns the manufactured <div> element used to obtain color data. When * getting color data the class and data-name attribute of this element are @@ -219,7 +219,7 @@ return this.transparentColor; } }; - + piwik.ColorManager = new ColorManager(); }(jQuery)); \ No newline at end of file diff --git a/plugins/CoreHome/javascripts/notification.js b/plugins/CoreHome/javascripts/notification.js index f3f16bd74f23f02e06aaf4b77bf600063fbae64f..7bd92042a5f21a1a4ff583c74d87a47a66e24eb9 100644 --- a/plugins/CoreHome/javascripts/notification.js +++ b/plugins/CoreHome/javascripts/notification.js @@ -105,7 +105,7 @@ template += message; template += buildNotificationEnd(); - + return template; } diff --git a/plugins/CoreHome/javascripts/popover.js b/plugins/CoreHome/javascripts/popover.js index 84c8319cf5f92103e67d55062573acfb54c47dce..bbe1dc2420443b7a50f98652059f97c5df8fba9b 100644 --- a/plugins/CoreHome/javascripts/popover.js +++ b/plugins/CoreHome/javascripts/popover.js @@ -20,7 +20,7 @@ var Piwik_Popover = (function () { var openPopover = function (title, dialogClass) { createContainer(); - var options = + var options = { title: title, modal: true, @@ -209,11 +209,11 @@ var Piwik_Popover = (function () { /** * Create a Popover and load the specified URL in it. - * + * * Note: If you want the popover to be persisted in the URL (so if the URL is copy/pasted * to a new window/tab it will be opened there), use broadcast.propagateNewPopoverParameter * with a popover handler function that calls this one. - * + * * @param {string} url * @param {string} loadingName * @param {string} [dialogClass] css class to add to dialog diff --git a/plugins/CoreHome/javascripts/require.js b/plugins/CoreHome/javascripts/require.js index 5313c375c736e12640f3b3f201c1ea7ca6b2d95d..30ad17eb686f85450b9c1952c9e9d36fddb3d002 100644 --- a/plugins/CoreHome/javascripts/require.js +++ b/plugins/CoreHome/javascripts/require.js @@ -13,9 +13,9 @@ /** * Returns a module for its ID. Empty modules are created if they does not exist. - * + * * Modules are currently stored in the window object. - * + * * @param {String} moduleId e.g. 'piwik/UserCountryMap' or 'myPlugin/Widgets/FancySchmancyThing'. * The following characters can be used to separate individual modules: * '/', '.' or '\'. diff --git a/plugins/CoreHome/javascripts/sparkline.js b/plugins/CoreHome/javascripts/sparkline.js index 5d4d54bc6287643bc354adbeff9c78534515fc5b..b4062f9897bd65de7e8810381da862310738f9ce 100644 --- a/plugins/CoreHome/javascripts/sparkline.js +++ b/plugins/CoreHome/javascripts/sparkline.js @@ -17,11 +17,11 @@ piwik.getSparklineColors = function () { piwik.initSparklines = function() { $('.sparkline > img').each(function () { var $self = $(this); - + if ($self.attr('src')) { return; } - + var colors = JSON.stringify(piwik.getSparklineColors()); var appendToSparklineUrl = '&colors=' + encodeURIComponent(colors); diff --git a/plugins/CoreHome/javascripts/top_controls.js b/plugins/CoreHome/javascripts/top_controls.js index 8a843d420659d25f13acc4b9b4d70502b9ee124e..62ce3ceccadf998982ef29a175b59952ac4b1a79 100644 --- a/plugins/CoreHome/javascripts/top_controls.js +++ b/plugins/CoreHome/javascripts/top_controls.js @@ -7,7 +7,7 @@ function initTopControls() { var $topControlsContainer = $('.top_controls'), left = 0; - + if ($topControlsContainer.length) { $('.piwikTopControl').each(function () { var $control = $(this); diff --git a/plugins/CoreHome/javascripts/uiControl.js b/plugins/CoreHome/javascripts/uiControl.js index c06f610e7d75453c4549539e850db4659e5c5185..cd2d985ea42c3326ddb8a38f9bd1f27fe497aa31 100644 --- a/plugins/CoreHome/javascripts/uiControl.js +++ b/plugins/CoreHome/javascripts/uiControl.js @@ -14,7 +14,7 @@ /** * Base type for Piwik UI controls. Provides functionality that all controls need (such as * cleanup on destruction). - * + * * @param {Element} element The root element of the control. */ var UIControl = function (element) { @@ -35,7 +35,7 @@ } } this.param = params; - + this.props = JSON.parse($element.attr('data-props') || '{}'); }; @@ -47,7 +47,7 @@ /** * Utility method that will clean up all piwik UI controls whose elements are not attached * to the DOM. - * + * * TODO: instead of having other pieces of the UI manually calling cleanupUnusedControls, * MutationObservers should be used */ @@ -95,8 +95,8 @@ /** * Handle the widget resize event, if we're currently in a widget. - * - * TODO: should use proper resize detection (see + * + * TODO: should use proper resize detection (see * http://www.backalleycoder.com/2013/03/18/cross-browser-event-based-element-resize-detection/ ) * with timeouts (since resizing widgets can be expensive) */ diff --git a/plugins/CoreHome/stylesheets/zen-mode.less b/plugins/CoreHome/stylesheets/zen-mode.less index 30d2788951b236b00dcba6f2b2367a2251e133c2..42a166e8f54a0dbca63fb461b1c537c0bd252b1b 100644 --- a/plugins/CoreHome/stylesheets/zen-mode.less +++ b/plugins/CoreHome/stylesheets/zen-mode.less @@ -103,7 +103,7 @@ .reportsByDimensionView .entityList { margin-left: 13px; } - + .widgetContent .jqplot-graph { margin-top: 6px; } diff --git a/plugins/CorePluginsAdmin/Marketplace.php b/plugins/CorePluginsAdmin/Marketplace.php index d0e5ec6c0acb51ee4ce4cb91ea5a70ff1eff825b..b9238fd15856d6d679e77fc681ee9717575e3348 100644 --- a/plugins/CorePluginsAdmin/Marketplace.php +++ b/plugins/CorePluginsAdmin/Marketplace.php @@ -159,7 +159,7 @@ class Marketplace if (!empty($plugin['versions'])) { $dateFormat = Piwik::translate('CoreHome_DateFormat'); - + foreach ($plugin['versions'] as $index => $version) { $plugin['versions'][$index]['release'] = Date::factory($version['release'])->getLocalized($dateFormat); } diff --git a/plugins/CoreUpdater/CoreUpdater.php b/plugins/CoreUpdater/CoreUpdater.php index 05bb59d5387bc55310e2cb4fecf1f17e1e5943e2..bb4700e299b496dff091318bc3a51ffc1c825ec0 100644 --- a/plugins/CoreUpdater/CoreUpdater.php +++ b/plugins/CoreUpdater/CoreUpdater.php @@ -43,15 +43,15 @@ class CoreUpdater extends \Piwik\Plugin $errors = array(); $deactivatedPlugins = array(); $coreError = false; - + if (!empty($componentsWithUpdateFile)) { $currentAccess = Access::getInstance(); $hasSuperUserAccess = $currentAccess->hasSuperUserAccess(); - + if (!$hasSuperUserAccess) { $currentAccess->setSuperUserAccess(true); } - + // if error in any core update, show message + help message + EXIT // if errors in any plugins updates, show them on screen, disable plugins that errored + CONTINUE // if warning in any core update or in any plugins update, show message + CONTINUE @@ -70,7 +70,7 @@ class CoreUpdater extends \Piwik\Plugin } } } - + if (!$hasSuperUserAccess) { $currentAccess->setSuperUserAccess(false); } diff --git a/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php b/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php index 22cd1dd3747535835cee2ca4772041d1d2d86266..d54de973d0113033cdc2cdacd2c15dfe4c967640 100644 --- a/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php +++ b/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php @@ -13,7 +13,7 @@ use Piwik\ProxyHttp; /** * */ -class Chart +class Chart { // the data kept here conforms to the jqplot data layout // @see http://www.jqplot.com/docs/files/jqPlotOptions-txt.html diff --git a/plugins/CoreVisualizations/javascripts/jqplot.js b/plugins/CoreVisualizations/javascripts/jqplot.js index 66cef5a96ecd4f85ab0aca49123d1edf4dd8f8a6..f7d43f107dc4e0d0c48d4f6b3145845935a49b57 100644 --- a/plugins/CoreVisualizations/javascripts/jqplot.js +++ b/plugins/CoreVisualizations/javascripts/jqplot.js @@ -26,7 +26,7 @@ /** * DataTable UI class for jqPlot graph datatable visualizations. - * + * * @constructor */ exports.JqplotGraphDataTable = function (element) { @@ -146,7 +146,7 @@ if ($.isArray(value) && value[1]) { value = value[1]; } - + percentages[valueIdx] = sum > 0 ? Math.round(100 * value / sum) : 0; } } @@ -365,10 +365,10 @@ }); var popover = $(document.createElement('div')); - + popover.append('<div style="font-size: 13px; margin-bottom: 10px;">' + lang.exportText + '</div>').append($(img)); - + popover.dialog({ title: lang.exportTitle, modal: true, @@ -496,7 +496,7 @@ } else if (viewDataTable == 'graphVerticalBar') { graphType = 'bar'; } - + var namespace = graphType + '-graph-colors'; this.jqplotParams.seriesColors = colorManager.getColors(namespace, seriesColorNames, true); diff --git a/plugins/CoreVisualizations/javascripts/jqplotEvolutionGraph.js b/plugins/CoreVisualizations/javascripts/jqplotEvolutionGraph.js index 9de41405e3a9c8f783c8893e92c48513188538b9..a422dd79e209bee21123dc1f3cd3e99263ecde01 100644 --- a/plugins/CoreVisualizations/javascripts/jqplotEvolutionGraph.js +++ b/plugins/CoreVisualizations/javascripts/jqplotEvolutionGraph.js @@ -22,7 +22,7 @@ _setJqplotParameters: function (params) { JqplotGraphDataTablePrototype._setJqplotParameters.call(this, params); - + var defaultParams = { axes: { xaxis: { @@ -100,7 +100,7 @@ } else { label = self.jqplotParams.axes.xaxis.ticks[tick]; } - + var text = []; for (var d = 0; d < self.data.length; d++) { var value = self.formatY(self.data[d][tick], d); diff --git a/plugins/CoreVisualizations/javascripts/seriesPicker.js b/plugins/CoreVisualizations/javascripts/seriesPicker.js index c961e662f81c79b65f0c16e755cf7270a170a76a..2e4f968a14d8fc7a67bfe06706a0a80e9c728534 100644 --- a/plugins/CoreVisualizations/javascripts/seriesPicker.js +++ b/plugins/CoreVisualizations/javascripts/seriesPicker.js @@ -11,30 +11,30 @@ /** * This class creates and manages the Series Picker for certain DataTable visualizations. - * + * * To add the series picker to your DataTable visualization, create a SeriesPicker instance * and after your visualization has been rendered, call the 'init' method. - * + * * To customize SeriesPicker placement and behavior, you can bind callbacks to the following * events before calling 'init': - * + * * 'placeSeriesPicker': Triggered after the DOM element for the series picker link is created. * You must use this event to add the link to the dataTable. YOu can also * use this event to position the link however you want. - * + * * Callback Signature: function () {} - * + * * 'seriesPicked': Triggered when the user selects one or more columns/rows. - * + * * Callback Signature: function (eventInfo, columns, rows) {} - * + * * Events are triggered via jQuery, so you bind callbacks to them like this: - * + * * var picker = new SeriesPicker(dataTable); * $(picker).bind('placeSeriesPicker', function () { * $(this.domElem).doSomething(...); * }); - * + * * @param {dataTable} dataTable The dataTable instance to add a series picker to. * @constructor */ @@ -51,7 +51,7 @@ // render the picker? this.show = !! dataTable.props.show_series_picker && (this.selectableColumns || this.selectableRows); - + // can multiple rows we selected? this.multiSelect = !! dataTable.props.allow_multi_select_series_picker; @@ -118,7 +118,7 @@ /** * Returns the translation of a metric that can be selected. - * + * * @param {String} metric The name of the metric, ie, 'nb_visits' or 'nb_actions'. * @return {String} The metric translation. If one cannot be found, the metric itself * is returned. @@ -336,7 +336,7 @@ ; $body.prepend(popover); - + var neededSpace = popover.outerWidth() + 10; var linkOffset = pickerLink.offset(); diff --git a/plugins/CustomVariables/Columns/CustomVariableName.php b/plugins/CustomVariables/Columns/CustomVariableName.php index a9a01394476e992bab705dfe896a0d24f91847f4..1ad4d214faf4aae3bc29b4a4cbbcba8b397349ab 100644 --- a/plugins/CustomVariables/Columns/CustomVariableName.php +++ b/plugins/CustomVariables/Columns/CustomVariableName.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class CustomVariableName extends Dimension -{ +{ public function getName() { return Piwik::translate('CustomVariables_ColumnCustomVariableName'); diff --git a/plugins/CustomVariables/Columns/CustomVariableValue.php b/plugins/CustomVariables/Columns/CustomVariableValue.php index 4591e14ea3ca1440ca71acfa661b362263f8c46f..ef6908042e1ea21e88b8ca9d04b6b373113a4999 100644 --- a/plugins/CustomVariables/Columns/CustomVariableValue.php +++ b/plugins/CustomVariables/Columns/CustomVariableValue.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class CustomVariableValue extends Dimension -{ +{ public function getName() { return Piwik::translate('CustomVariables_ColumnCustomVariableValue'); diff --git a/plugins/CustomVariables/Commands/Info.php b/plugins/CustomVariables/Commands/Info.php index 9c907b15995fcafe9aea077a55c8851e2e6b4856..bf300e357a25c19e87ad24b4cfcc70707555a297 100644 --- a/plugins/CustomVariables/Commands/Info.php +++ b/plugins/CustomVariables/Commands/Info.php @@ -62,7 +62,7 @@ class Info extends ConsoleCommand return false; } } - + return true; } } diff --git a/plugins/CustomVariables/Commands/SetNumberOfCustomVariables.php b/plugins/CustomVariables/Commands/SetNumberOfCustomVariables.php index f769951cd63dafb26221021bde56b93eeb7c69bd..29addaa12d5b30465341effb2257383f3dbb966e 100644 --- a/plugins/CustomVariables/Commands/SetNumberOfCustomVariables.php +++ b/plugins/CustomVariables/Commands/SetNumberOfCustomVariables.php @@ -203,7 +203,7 @@ class SetNumberOfCustomVariables extends ConsoleCommand $numCurrentCustomVars = $model->getCurrentNumCustomVars(); $numChangesToPerform += $this->getAbsoluteDifference($numCurrentCustomVars, $numVarsToSet); } - + return $numChangesToPerform; } } diff --git a/plugins/Dashboard/DashboardManagerControl.php b/plugins/Dashboard/DashboardManagerControl.php index ff82763b950b9e75474dffe74ff49910074fff17..fb119e008367e75359d0ae2ca0deab30a2e59770 100644 --- a/plugins/Dashboard/DashboardManagerControl.php +++ b/plugins/Dashboard/DashboardManagerControl.php @@ -18,7 +18,7 @@ class DashboardManagerControl extends DashboardSettingsControlBase public function __construct() { parent::__construct(); - + $this->jsClass = "DashboardManagerControl"; $this->cssIdentifier = "dashboard-manager"; diff --git a/plugins/Dashboard/DashboardSettingsControlBase.php b/plugins/Dashboard/DashboardSettingsControlBase.php index 3f8f29e1e6f5239d755cceaad6ac55f0ce9a827e..72752240829b6c83eaf31efe221662420dca0882 100644 --- a/plugins/Dashboard/DashboardSettingsControlBase.php +++ b/plugins/Dashboard/DashboardSettingsControlBase.php @@ -22,7 +22,7 @@ abstract class DashboardSettingsControlBase extends UIControl public function __construct() { parent::__construct(); - + $this->cssClass = "piwikTopControl dashboardSettings"; $this->dashboardActions = array(); $this->generalActions = array(); diff --git a/plugins/Dashboard/javascripts/dashboard.js b/plugins/Dashboard/javascripts/dashboard.js index 24e8b3bd0db22ce3c48f9fcdee6bf31f5d776d1c..238aca519789a1d3a4db5454438a981cfe3074c8 100644 --- a/plugins/Dashboard/javascripts/dashboard.js +++ b/plugins/Dashboard/javascripts/dashboard.js @@ -279,7 +279,7 @@ function copyDashboardToUser() { $.extend(DashboardManagerControl.prototype, DashboardSettingsControlBase.prototype, { onOpen: function () { - if ($('#dashboardWidgetsArea').dashboard('isDefaultDashboard')) { + if ($('#dashboardWidgetsArea').dashboard('isDefaultDashboard')) { $('.removeDashboardLink', this.$element).hide(); } else { $('.removeDashboardLink', this.$element).show(); diff --git a/plugins/Events/Columns/EventAction.php b/plugins/Events/Columns/EventAction.php index 26a460c98586240a7a883a1c112d482efcd12adc..79b3b5867b21c5774644881e980f3472aaed0e4f 100644 --- a/plugins/Events/Columns/EventAction.php +++ b/plugins/Events/Columns/EventAction.php @@ -16,7 +16,7 @@ use Piwik\Tracker\Action; use Piwik\Tracker\Request; class EventAction extends ActionDimension -{ +{ protected $columnName = 'idaction_event_action'; protected $columnType = 'INTEGER(10) UNSIGNED DEFAULT NULL'; diff --git a/plugins/Events/Columns/EventCategory.php b/plugins/Events/Columns/EventCategory.php index eae0ff906d2de04bc11629a4e6e3a003db8b9da1..7c6b5fd02a90078be9659d4e1eaf10e8c794a92e 100644 --- a/plugins/Events/Columns/EventCategory.php +++ b/plugins/Events/Columns/EventCategory.php @@ -16,7 +16,7 @@ use Piwik\Tracker\Action; use Piwik\Tracker\Request; class EventCategory extends ActionDimension -{ +{ protected $columnName = 'idaction_event_category'; protected $columnType = 'INTEGER(10) UNSIGNED DEFAULT NULL'; diff --git a/plugins/Events/Columns/EventName.php b/plugins/Events/Columns/EventName.php index e0271369437a855f417daac9aa318b7bbd204f30..e672d316a36b7c90ae249992af747ede177d8351 100644 --- a/plugins/Events/Columns/EventName.php +++ b/plugins/Events/Columns/EventName.php @@ -16,7 +16,7 @@ use Piwik\Tracker\Action; use Piwik\Tracker\Request; class EventName extends ActionDimension -{ +{ protected $columnName = 'idaction_name'; protected function configureSegments() diff --git a/plugins/Goals/Columns/DaysToConversion.php b/plugins/Goals/Columns/DaysToConversion.php index d6eef4970cffb984dca53391b7eb25b404202012..e1bd941d6b8ba5ad0abbaf33d68e4624dc0c246b 100644 --- a/plugins/Goals/Columns/DaysToConversion.php +++ b/plugins/Goals/Columns/DaysToConversion.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class DaysToConversion extends Dimension -{ +{ public function getName() { return Piwik::translate('Goals_DaysToConv'); diff --git a/plugins/Goals/Columns/ProductCategory.php b/plugins/Goals/Columns/ProductCategory.php index 27565bfb2cb1e7eb680309e961bbb0b9a6869efb..8a34edf0e1423c7d672fe94b007b515a8a33bd7a 100644 --- a/plugins/Goals/Columns/ProductCategory.php +++ b/plugins/Goals/Columns/ProductCategory.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class ProductCategory extends Dimension -{ +{ public function getName() { return Piwik::translate('Goals_ProductCategory'); diff --git a/plugins/Goals/Columns/ProductName.php b/plugins/Goals/Columns/ProductName.php index 50a30f259d12f529ad25b6cacce10752332a183d..ed3d545543c6a5a9a7dfc42e78edf596afa73c04 100644 --- a/plugins/Goals/Columns/ProductName.php +++ b/plugins/Goals/Columns/ProductName.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class ProductName extends Dimension -{ +{ public function getName() { return Piwik::translate('Goals_ProductName'); diff --git a/plugins/Goals/Columns/ProductSku.php b/plugins/Goals/Columns/ProductSku.php index 85742f82e55b637103514243378099207f79d80d..b44a37ec0bcd9f37d9dc0546fe8657dcb0c9376c 100644 --- a/plugins/Goals/Columns/ProductSku.php +++ b/plugins/Goals/Columns/ProductSku.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class ProductSku extends Dimension -{ +{ public function getName() { return Piwik::translate('Goals_ProductSKU'); diff --git a/plugins/Goals/Columns/VisitsUntilConversion.php b/plugins/Goals/Columns/VisitsUntilConversion.php index 390f75ba759b8d8933e5ee6e6fbcb7d3ff4eff6d..13f54e9dd7cd3c6b1ae061971485b52df6a07505 100644 --- a/plugins/Goals/Columns/VisitsUntilConversion.php +++ b/plugins/Goals/Columns/VisitsUntilConversion.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class VisitsUntilConversion extends Dimension -{ +{ public function getName() { return Piwik::translate('Goals_VisitsUntilConv'); diff --git a/plugins/Insights/Visualizations/Insight.php b/plugins/Insights/Visualizations/Insight.php index 7ff7c96a1340e3460f1d3aefa514a23b48a5b9f1..a22206d6986ac79bedf9e16719392168d0f2fbdb 100644 --- a/plugins/Insights/Visualizations/Insight.php +++ b/plugins/Insights/Visualizations/Insight.php @@ -114,7 +114,7 @@ class Insight extends Visualization return false; } - if ($view->requestConfig->apiMethodToRequestDataTable + if ($view->requestConfig->apiMethodToRequestDataTable && 0 === strpos($view->requestConfig->apiMethodToRequestDataTable, 'DBStats')) { return false; } diff --git a/plugins/Insights/javascripts/insightsDataTable.js b/plugins/Insights/javascripts/insightsDataTable.js index 3df7928812e79472b6a23b51561210956b120142..42572ef93f52a06cf64ff547eaf7767a5f12efe2 100644 --- a/plugins/Insights/javascripts/insightsDataTable.js +++ b/plugins/Insights/javascripts/insightsDataTable.js @@ -20,7 +20,7 @@ /** * UI control that handles extra functionality for Actions datatables. - * + * * @constructor */ exports.InsightsDataTable = function (element) { diff --git a/plugins/Installation/templates/finished.twig b/plugins/Installation/templates/finished.twig index 2f30910cd01141e8717856a00642cab528956521..1a9fb66dcc20f9c6c3ffbf01a08d82c39fa57a4a 100644 --- a/plugins/Installation/templates/finished.twig +++ b/plugins/Installation/templates/finished.twig @@ -19,6 +19,6 @@ <p class="nextStep"> <a class="submit" href="index.php">{{ 'General_ContinueToPiwik'|translate }} »</a> - + </p> {% endblock %} diff --git a/plugins/Live/VisitorFactory.php b/plugins/Live/VisitorFactory.php index cb64bff968ef6c6ea13e53a09f15de742189a5b7..30e22ef94885e0f0da2e770080f593366472722d 100644 --- a/plugins/Live/VisitorFactory.php +++ b/plugins/Live/VisitorFactory.php @@ -46,4 +46,4 @@ class VisitorFactory return $visitor; } -} +} diff --git a/plugins/Live/VisitorInterface.php b/plugins/Live/VisitorInterface.php index 4d816215fdcfab94f8455b7b8b76953733fafc1f..4f4bbefecede38568005f9e71e2a435b43ad03db 100644 --- a/plugins/Live/VisitorInterface.php +++ b/plugins/Live/VisitorInterface.php @@ -19,4 +19,4 @@ interface VisitorInterface * @return string|bool */ public function getVisitorId(); -} +} diff --git a/plugins/Live/javascripts/visitorLog.js b/plugins/Live/javascripts/visitorLog.js index 3f30f9e9ab0eddaaa46c221fbeb96b65adc8693b..e6eeb79dba37f4c6d4fe431e559c0fcd1a75f02b 100644 --- a/plugins/Live/javascripts/visitorLog.js +++ b/plugins/Live/javascripts/visitorLog.js @@ -15,7 +15,7 @@ /** * DataTable UI class for jqPlot graph datatable visualizations. - * + * * @constructor */ exports.VisitorLog = function (element) { diff --git a/plugins/Live/javascripts/visitorProfile.js b/plugins/Live/javascripts/visitorProfile.js index 3ce97a23adb1c77940407c3a52d261e2042824e0..3ebf569d251339d7437d6390f1d5330bf1da6db3 100644 --- a/plugins/Live/javascripts/visitorProfile.js +++ b/plugins/Live/javascripts/visitorProfile.js @@ -15,7 +15,7 @@ /** * Sets up and handles events for the visitor profile popup. - * + * * @param {Element} element The HTML element returned by the Live.getVisitorLog controller * action. Should have the CSS class 'visitor-profile'. * @constructor @@ -39,7 +39,7 @@ * Instead broadcast.propagateNewPopoverParameter('visitorProfile', visitorId) should be * called. This would make sure the popover would be opened if the URL is copied and pasted * in a new tab/window. - * + * * @param {String} visitorId The string visitor ID. */ VisitorProfileControl.showPopover = function (visitorId) { @@ -50,7 +50,7 @@ if ($('.RealTimeMap').length > 0) { url += '&showMap=0'; } - + Piwik_Popover.createPopupAndLoadUrl(url, _pk_translate('Live_VisitorProfile'), 'visitor-profile-popup'); }; @@ -251,7 +251,7 @@ }, _loadNextVisitor: function () { - this._gotoAdjacentVisitor(this.$element.attr('data-next-visitor')); + this._gotoAdjacentVisitor(this.$element.attr('data-next-visitor')); }, _gotoAdjacentVisitor: function (idVisitor) { diff --git a/plugins/Live/stylesheets/visitor_profile.less b/plugins/Live/stylesheets/visitor_profile.less index 71477794b0d3a7396dda35f41acac792e9439484..940d89dd2cb901a76b34b630af11bc449f0e94f1 100644 --- a/plugins/Live/stylesheets/visitor_profile.less +++ b/plugins/Live/stylesheets/visitor_profile.less @@ -528,7 +528,7 @@ a.visitor-profile-next-visitor,a.visitor-profile-prev-visitor { // overrides for the widgetized visitor profile .widget .visitor-profile { min-width: 100% !important; - + p { padding-bottom: 0; } diff --git a/plugins/Login/stylesheets/login.css b/plugins/Login/stylesheets/login.css index f24a1982da19210888ee844e0cef457f952fc1be..e504be1b6ab4244fdf1702b7f1d220c1e3023d7f 100644 --- a/plugins/Login/stylesheets/login.css +++ b/plugins/Login/stylesheets/login.css @@ -83,7 +83,7 @@ } -/* FORM +/* FORM ***********************/ .loginSection form { margin: 0 5px; @@ -150,7 +150,7 @@ } -/* MESSAGE +/* MESSAGE ***********************/ #loginPage .message_error, #loginPage .message { @@ -170,9 +170,9 @@ } -/* NAVIGATION +/* NAVIGATION ***********************/ -#nav, +#nav, #piwik { margin: 0 0 0 8px; padding: 16px; diff --git a/plugins/MobileMessaging/templates/SMSReport.twig b/plugins/MobileMessaging/templates/SMSReport.twig index 6bd52bbc788e15703541a89bf25cb4fa84505a05..6c0d38f2cdadd522ed503616492c0053dd4b1b4a 100644 --- a/plugins/MobileMessaging/templates/SMSReport.twig +++ b/plugins/MobileMessaging/templates/SMSReport.twig @@ -9,11 +9,11 @@ {%- set rowMetadata=reportRowsMetadata[rowId].columns -%} {%- if displaySiteName -%}{{ rowMetrics.label|raw }}: {% endif -%} - + {# visits #} {{- rowMetrics.nb_visits }} {{ 'General_ColumnNbVisits'|translate }} {%- if rowMetrics.visits_evolution != 0 %} ({{ rowMetrics.visits_evolution }}%){%- endif -%} - + {%- if rowMetrics.nb_visits != 0 -%} {#- actions -#} , {{ rowMetrics.nb_actions }} {{ 'General_ColumnNbActions'|translate }} @@ -39,7 +39,7 @@ , {{ rowMetrics.orders }} {{ 'General_EcommerceOrders'|translate }} {%- if rowMetrics.orders_evolution != 0 %} ({{ rowMetrics.orders_evolution }}%){%- endif -%} {%- endif -%} - + {%- endif -%} {%- endif -%} diff --git a/plugins/MobileMessaging/templates/index.twig b/plugins/MobileMessaging/templates/index.twig index 6875a64f14767eff7eee792f92e01bd8209fb430..17b5bbb435500fbffa78c8e8bd0f3ad98d0e58d7 100644 --- a/plugins/MobileMessaging/templates/index.twig +++ b/plugins/MobileMessaging/templates/index.twig @@ -61,7 +61,7 @@ <td style="width:480px;"> <strong>{{ 'MobileMessaging_Settings_PhoneNumbers_Add'|translate }}</strong> <br/><br/> - + <span id="suspiciousPhoneNumber" style="display:none;"> {{ 'MobileMessaging_Settings_SuspiciousPhoneNumber'|translate('54184032') }} <br/><br/> @@ -72,7 +72,7 @@ <input type="submit" value='{{ 'General_Add'|translate }}' id="addPhoneNumberSubmit"/> <br/> - + <span style=' font-size: 11px;'><span class="form-description">{{ 'MobileMessaging_Settings_CountryCode'|translate }}</span> <span class="form-description" diff --git a/plugins/Morpheus/javascripts/ajaxHelper.js b/plugins/Morpheus/javascripts/ajaxHelper.js index 9099637f67a3758f1cada8170263199d934e6e07..d2ac8568e727b27529e01a71ceaf77ed67a3a0d9 100644 --- a/plugins/Morpheus/javascripts/ajaxHelper.js +++ b/plugins/Morpheus/javascripts/ajaxHelper.js @@ -15,7 +15,7 @@ globalAjaxQueue.active = 0; /** * Removes all finished requests from the queue. - * + * * @return {void} */ globalAjaxQueue.clean = function () { @@ -165,10 +165,10 @@ function ajaxHelper() { } } }; - + /** * Sets the base URL to use in the AJAX request. - * + * * @param {string} url */ this.setUrl = function (url) { diff --git a/plugins/Morpheus/javascripts/piwikHelper.js b/plugins/Morpheus/javascripts/piwikHelper.js index ddc94f8a399702b314fd16654e5e83f200b18106..29b36a8f3f40737305fdf8b131e157a98806f281 100644 --- a/plugins/Morpheus/javascripts/piwikHelper.js +++ b/plugins/Morpheus/javascripts/piwikHelper.js @@ -82,7 +82,7 @@ var piwikHelper = { } return value; }, - + /** * Add break points to a string so that it can be displayed more compactly */ @@ -395,7 +395,7 @@ String.prototype.trim = function() { */ function isEnterKey(e) { - return (window.event?window.event.keyCode:e.which)==13; + return (window.event?window.event.keyCode:e.which)==13; } // workarounds diff --git a/plugins/Morpheus/stylesheets/general/_admin.less b/plugins/Morpheus/stylesheets/general/_admin.less index 0d25749f241ded488e3300cc6684d3f629685a33..0a3b21cd8805bf2791d462128a83cf89a35cba26 100644 --- a/plugins/Morpheus/stylesheets/general/_admin.less +++ b/plugins/Morpheus/stylesheets/general/_admin.less @@ -27,7 +27,7 @@ } } } - } + } } .admin { diff --git a/plugins/Morpheus/stylesheets/general/_forms.less b/plugins/Morpheus/stylesheets/general/_forms.less index 0932f598a277d92d902ca87a48fe75a0dfea1097..cf31fb6925d5f98f39d2a83cf83fd2e004ab177f 100644 --- a/plugins/Morpheus/stylesheets/general/_forms.less +++ b/plugins/Morpheus/stylesheets/general/_forms.less @@ -2,8 +2,8 @@ input:not([type="checkbox"]), select, textarea { color: @theme-color-text; .border-radius(0px); margin-left: 0; - padding: 8px 10px; - min-height: 30px; + padding: 8px 10px; + min-height: 30px; .box-sizing(border-box); background: #fff; } @@ -201,7 +201,7 @@ label { .form-radio { background-position: 0 -16px; - + &.form-hover { background-position: -60px -16px; } @@ -216,7 +216,7 @@ label { .form-checkbox { background-position: 0 0; - + &.form-hover { background-position: -60px 0; } diff --git a/plugins/Morpheus/stylesheets/general/_typography.less b/plugins/Morpheus/stylesheets/general/_typography.less index 956f5cc68b72b62301bf7d8642994a7a46072984..bb227428446c32780980f637b00392357a421928 100644 --- a/plugins/Morpheus/stylesheets/general/_typography.less +++ b/plugins/Morpheus/stylesheets/general/_typography.less @@ -28,7 +28,7 @@ h2 { padding-top: 5px; padding-bottom: 4px; color: #000; - + a { color: @theme-color-brand !important; } @@ -118,7 +118,7 @@ body > a.ddmetric { } .segmentEditorPanel *, -.segment-element .segment-content .segment-input select, +.segment-element .segment-content .segment-input select, .segment-element .segment-content .segment-input input { font-family: @theme-fontFamily-base !important; } diff --git a/plugins/Morpheus/stylesheets/simple_structure.css b/plugins/Morpheus/stylesheets/simple_structure.css index 34e5ae18fbeb1ff545e94b20e91fd8d9cd72951e..65e6d276b7981d84ee43040e37500bb60ee891d0 100644 --- a/plugins/Morpheus/stylesheets/simple_structure.css +++ b/plugins/Morpheus/stylesheets/simple_structure.css @@ -1,5 +1,5 @@ -body#simple { - background: #eee; +body#simple { + background: #eee; } #contentsimple { background: #fff; @@ -34,7 +34,7 @@ body#simple { } #title img{ - vertical-align:bottom; + vertical-align:bottom; } #title { padding-bottom:15px; diff --git a/plugins/Morpheus/stylesheets/theme.less b/plugins/Morpheus/stylesheets/theme.less index 582d3c4d5852949d515df0828f7c5f07ba637dfc..820c8d3953b0d9334db8abdc33fe6efa225b9c9c 100644 --- a/plugins/Morpheus/stylesheets/theme.less +++ b/plugins/Morpheus/stylesheets/theme.less @@ -116,7 +116,7 @@ table.entityTable tr td a:hover { color: @theme-color-menu-contrast-textActive; font-weight: normal; } - + } } } @@ -449,7 +449,7 @@ table.dataTable { background-color: #fff !important; } } - + &.entityTable tr { td { background-color: #fff !important; @@ -582,8 +582,8 @@ div.sparkline { .border-radius(0px); border: 0px; margin-left: 0; - padding: 8px 10px; - min-height: 30px; + padding: 8px 10px; + min-height: 30px; .box-sizing(border-box); border: 1px solid @color-silver-l80; .opacity(1); @@ -691,7 +691,7 @@ div.sparkline { } } } - } + } } .visitor-profile-visit-title-row { @@ -716,7 +716,7 @@ div.sparkline { .border-radius(0px); border: 0px; .box-shadow(none) !important; - + > div { border: 0px !important; } @@ -786,9 +786,9 @@ div.sparkline { margin-right: 5px; } } - } - } - } + } + } + } .visitor-profile-avatar > div:nth-child(2n) { width: 376px; @@ -798,7 +798,7 @@ div.sparkline { .visitor-profile-latest-visit-column { display: inline-block; margin-left: 0; - } + } .visitor-profile-latest-visit-column:first-child { width: 50%; diff --git a/plugins/Morpheus/stylesheets/ui/_components.less b/plugins/Morpheus/stylesheets/ui/_components.less index 0bad34c66fdc515e4bb118b1dc3e6f51657bb6f9..fe427fc5451e3337ded616ffb44043737610b71b 100644 --- a/plugins/Morpheus/stylesheets/ui/_components.less +++ b/plugins/Morpheus/stylesheets/ui/_components.less @@ -1,5 +1,5 @@ //colors calendar -@calendarHeaderBackground: #fff; +@calendarHeaderBackground: #fff; @calendarHeaderColor: #999; @calendarCurrentStateHover: #f5f5f5; @calendarBorder: #ccc; @@ -76,7 +76,7 @@ .font-default(13px, 15px); color: @theme-color-text; } - + .segment-add-row > div a span, .segment-add-or > div a span { color: @theme-color-brand; @@ -107,7 +107,7 @@ background: #f2f2f2; border: 0; padding: 4px 0 3px; - + a { border: 0; background-color: #f2f2f2; @@ -117,8 +117,8 @@ } } - } - } + } + } .segment-top { .font-default(10px, 12px); @@ -263,7 +263,7 @@ } } -//reports box +//reports box .reports { border: 1px solid @color-gray; .border-radius(6px); @@ -275,7 +275,7 @@ } } -.jqplot-seriespicker-popover { +.jqplot-seriespicker-popover { .box-shadow-1(none); } @@ -327,7 +327,7 @@ .font-default(15px, 20px); margin-bottom: 10px; } - } + } } } diff --git a/plugins/Morpheus/stylesheets/ui/_map.less b/plugins/Morpheus/stylesheets/ui/_map.less index c5baf76f1592a4e9642815324f1de754bc895303..0446610c2d885d2b65b7c72df72420c944ae349a 100644 --- a/plugins/Morpheus/stylesheets/ui/_map.less +++ b/plugins/Morpheus/stylesheets/ui/_map.less @@ -65,5 +65,5 @@ } .realtime-map[data-name=white-bg] { - color: #808080 !important; + color: #808080 !important; } \ No newline at end of file diff --git a/plugins/Morpheus/stylesheets/ui/_popups.less b/plugins/Morpheus/stylesheets/ui/_popups.less index 72ff9f4088aba5a970f32ddd0a3ff26895efd612..7cd8d6b1afdd0295d334ca7eef6ec4c2265527b9 100644 --- a/plugins/Morpheus/stylesheets/ui/_popups.less +++ b/plugins/Morpheus/stylesheets/ui/_popups.less @@ -38,9 +38,9 @@ button.ui-state-default, .ui-widget-content button.ui-state-default, .ui-widget- } .ui-menu .ui-menu-item a.ui-state-focus { - background: @color-silver-l90; + background: @color-silver-l90; } -button:hover, .add-trusted-host:hover, input[type="submit"]:hover, button[type="button"]:hover, .submit:hover { +button:hover, .add-trusted-host:hover, input[type="submit"]:hover, button[type="button"]:hover, .submit:hover { background-color: @theme-color-brand !important; } \ No newline at end of file diff --git a/plugins/Morpheus/stylesheets/uibase/_languageSelect.less b/plugins/Morpheus/stylesheets/uibase/_languageSelect.less index ee07212b7f8447e033f5af13f7b459b55cecf798..032516350e2d98a26cd3d148db132f7a2c95324c 100644 --- a/plugins/Morpheus/stylesheets/uibase/_languageSelect.less +++ b/plugins/Morpheus/stylesheets/uibase/_languageSelect.less @@ -1,6 +1,6 @@ .languageSelection { padding-right: 11px; - + .items { margin-left: -50px; } diff --git a/plugins/Morpheus/templates/dashboard.twig b/plugins/Morpheus/templates/dashboard.twig index 894841033188c4ed2740e67f5cfb5c6525cc6386..4235cacdd053b1bef4e820d02dfe2d7b1ed4e028 100644 --- a/plugins/Morpheus/templates/dashboard.twig +++ b/plugins/Morpheus/templates/dashboard.twig @@ -4,7 +4,7 @@ <!--[if (gte IE 9)|!(IE)]><!--> <html id="ng-app" ng-app="piwikApp"><!--<![endif]--> <head> - {% block head %} + {% block head %} <meta charset="utf-8"> <title>{{ siteName|raw }} - {% if isCustomLogo == false %}Piwik › {% endif %} {{ 'CoreHome_WebAnalyticsReports'|translate }}</title> <meta http-equiv="X-UA-Compatible" content="IE=EDGE,chrome=1"/> diff --git a/plugins/Morpheus/templates/genericForm.twig b/plugins/Morpheus/templates/genericForm.twig index 963684af598e7b45f21913510fe0d13da9d91f9e..b7e564c88c1dbfce341c78149032e30f8851d911 100644 --- a/plugins/Morpheus/templates/genericForm.twig +++ b/plugins/Morpheus/templates/genericForm.twig @@ -6,7 +6,7 @@ {% for data in form_data.errors %} <li>{{ data|raw }}</li> {% endfor %} - </ul> + </ul> </div> {% endif %} diff --git a/plugins/MultiSites/Columns/Website.php b/plugins/MultiSites/Columns/Website.php index 7bdb1c3e09dda1b2c729c1628ca881a191ca7031..b53244d484a0a1bd9fc7e143e9d55af1f628029d 100644 --- a/plugins/MultiSites/Columns/Website.php +++ b/plugins/MultiSites/Columns/Website.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class Website extends Dimension -{ +{ public function getName() { return Piwik::translate('General_Website'); diff --git a/plugins/MultiSites/angularjs/dashboard/dashboard-model.js b/plugins/MultiSites/angularjs/dashboard/dashboard-model.js index 52c66bd6873503cb21c48882654e42d145ae9ef6..f2c46c61d4ffcd00da5c5470b9a77ce90884d7f0 100644 --- a/plugins/MultiSites/angularjs/dashboard/dashboard-model.js +++ b/plugins/MultiSites/angularjs/dashboard/dashboard-model.js @@ -76,7 +76,7 @@ angular.module('piwikApp').factory('multisitesDashboardModel', function (piwikAp if (site.revenue) { revenue = (site.revenue+'').match(/(\d+\.?\d*)/); // convert $ 0.00 to 0.00 or 5€ to 5 } - + group.nb_visits += parseInt(site.nb_visits, 10); group.nb_pageviews += parseInt(site.nb_pageviews, 10); if (revenue.length) { diff --git a/plugins/Overlay/API.php b/plugins/Overlay/API.php index ecc25b046678eafb7053e6326333d5e988940509..39e16985b1fa7f18cdadc735d8c598e5689fd7bc 100644 --- a/plugins/Overlay/API.php +++ b/plugins/Overlay/API.php @@ -105,20 +105,20 @@ class API extends \Piwik\Plugin\API { /** * Triggered immediately before the user is authenticated. - * + * * This event can be used by plugins that provide their own authentication mechanism * to make that mechanism available. Subscribers should set the `'auth'` object in * the {@link Piwik\Registry} to an object that implements the {@link Piwik\Auth} interface. - * + * * **Example** - * + * * use Piwik\Registry; - * + * * public function initAuthenticationObject($activateCookieAuth) * { * Registry::set('auth', new LDAPAuth($activateCookieAuth)); * } - * + * * @param bool $activateCookieAuth Whether authentication based on `$_COOKIE` values should * be allowed. */ diff --git a/plugins/Overlay/client/followingpages.js b/plugins/Overlay/client/followingpages.js index 015c79ea02dd91582d74fa51020b962186bb9c5c..0ec8c6fef64df068e4ec0bb9d5c3b60f6f96dfaa 100644 --- a/plugins/Overlay/client/followingpages.js +++ b/plugins/Overlay/client/followingpages.js @@ -387,11 +387,11 @@ var Piwik_Overlay_FollowingPages = (function () { offset = linkTag.offset(); height = linkTag.outerHeight(); } - + var numLinks = linksOnPage[linkUrl].length; putBoxAroundLink(offset, width, height, numLinks, data.referrals); - + // highlight tags for (var j = 0; j < numLinks; j++) { var tag = linksOnPage[linkUrl][j][0].piwikTagElement; @@ -407,11 +407,11 @@ var Piwik_Overlay_FollowingPages = (function () { linkTag[0].piwikHideNotification = Piwik_Overlay_Client.notification( Piwik_Overlay_Translations.get('link') + ': ' + linkUrl, 'LinkLocation'); } - + function putBoxAroundLink(offset, width, height, numLinks, numReferrals) { var borderWidth = 2; var padding = 4; // the distance between the link and the border - + // top border highlightElements[0] .width(width + 2 * padding) @@ -419,7 +419,7 @@ var Piwik_Overlay_FollowingPages = (function () { top: offset.top - borderWidth - padding, left: offset.left - padding }).show(); - + // right border highlightElements[1] .height(height + 2 * borderWidth + 2 * padding) @@ -427,7 +427,7 @@ var Piwik_Overlay_FollowingPages = (function () { top: offset.top - borderWidth - padding, left: offset.left + width + padding }).show(); - + // left border highlightElements[2] .height(height + 2 * borderWidth + 2 * padding) @@ -456,7 +456,7 @@ var Piwik_Overlay_FollowingPages = (function () { top: offset.top + height + padding, left: offset.left - borderWidth - padding }).show(); - + var minBoxWidth = width + 2 * borderWidth + 2 * padding; if (highlightElements[3].width() < minBoxWidth) { // we cannot use minWidth because of IE7 diff --git a/plugins/Overlay/client/linktags.eps b/plugins/Overlay/client/linktags.eps index b9279b8a95272b25212496af660a48f2ae348c9e..40be171a1beb9293f4eb4a487fd4dc3a7dbf9b40 100644 --- a/plugins/Overlay/client/linktags.eps +++ b/plugins/Overlay/client/linktags.eps @@ -13,28 +13,28 @@ %%AI8_CreatorVersion: 14.0.0 %AI9_PrintingDataBegin %ADO_BuildNumber: Adobe Illustrator(R) 14.0.0 x367 R agm 4.4890 ct 5.1541 %ADO_ContainsXMP: MainFirst %AI7_Thumbnail: 128 64 8 %%BeginData: 7006 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD4BFFA8FD64FFA8FFA8A8A8FD16FFFD04A8FD60FFA8A8A8FFA8FD %17FFFD05A8FFA8FD58FFA8FFA8A8A8FFA8FFA8A8FD18FFA8FFFFFFFD05A8 %FD54FFA8A8A8FD05FFA8A8FD1AFFA8FD05FFA8A8A8FD50FFFD05A8FD06FF %A8A8FD1AFFA8A8FD07FFA8A8A8FFA8FD2CFFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFD05A8FD09FFA8FD1CFFA8FD0AFF %A8A8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FD0CFFFD21A8FD0BFF7DFD1DFFA8A8FD0AFFFD23A8FD06FFA8FD2BFFA8 %FD1FFFA8FD2BFFA8A8FD05FFA8FD2CFFA8A8FD1EFFA8A8FD2BFFA8A8FFFF %FFA8FD2DFFA8FD20FFA8A8FD2BFFA8FFFFA8A8A8FFFFFFA8FFFFFFA8FFFF %FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8 %FFFFFF7DFD21FFA8A8A8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8 %FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFA8FD2BFF %A8A8FD22FFA8FD2CFFA8FFA8A8FD2CFFA8FD21FFA8A8FD2CFFA8FFA8A8FD %2CFFA8A8FD21FFA8FD2CFFA8A87DFFFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FD21FFA8A8FFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8A8FD2DFFA8A8FD21FF %A8FD2DFFA8A8FFFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD21FFA8A8FFFFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFFD04A8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8 %FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8A8FD %22FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFF %A8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFCBFD05A8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FD21FFA8A8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFFA8FFFFFF %AFFFFFFFAFFFFFFFAFFFFFFFAFFFFFFFAFFFFFFFAFFFFFFFAFFFFFFFAFFF %FFFFAFFFFFFFAFFFFFFFA8FD23FFA8FFFFFFAFFFFFFFAFFFFFFFAFFFFFFF %AFFFFFFFAFFFFFFFAFFFFFFFAFFFFFFFAFFFFFFFAFFFFFFFAFFFFFFFA8A8 %FFFFA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8A8FD22FFA8A8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8A8A8FFFFA8A8A8FFFFFFA8FFCBFFA8FFCBFFA8FFCBFFA8FFCB %FFA8FFCBFFA8FFCBFFA8FFCBFFA8FFCBFFA8FFFFFFA8FFA8FD24FFA8A8FF %FFFFA8FFCBFFA8FFCBFFA8FFCBFFA8FFCBFFA8FFCBFFA8FFCBFFA8FFCBFF %A8FFCBFFA8FFCBFFA8FFA8FD04FFA8A8A8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A87DFD25FF %A8A8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8A87DFD06FFA8A8A8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8A8FD27FF %A8A8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8A8A8FD08FFA8FFFD23A8FFA8FD29FFA8FFFD25A8FD %FCFFFDFCFFFDFCFFFDFCFFFDFCFFFD9FFFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD2DFFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FD0CFFFD27A8FD29FFFD27A8FD06FFA8A8A8FD23FFA8FFA8A8A8FD26FFA8 %7DFFA8FD21FFA8FFA8A87DFD05FFA8A8FD28FFA8A8FD25FFA8FD29FFA8FF %FFFFA8A8FD29FFA8A8A8FD23FFA8FD2BFFA8FFFFA8FD2BFFA8FD23FFA8FD %2CFFA8FFA8A8FD04FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8 %FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FD22FFA8A8FFFFFFA8FF %FFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFF %A8FFFFFFA8FFFFFFA8FFA8A8FD2CFFA8FD22FFA8FD2DFFA8A8FD2DFFA8FD %21FFA8A8A8FD2BFFA8A8A8FD2DFFA8A8FD21FFA8FD2DFFA87DFFFFFFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FD21FFA8A8A8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %FD04A8FD2CFFA8A8FD21FFA8FD2DFFA8A8FFFFFFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FD21FFA8A8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFD04A8FFFFFFA8FF %FFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFF %A8FFFFFFA8FFFFFFA8A8FD22FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8 %FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FD05FFFD04A8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8A8A8FD22FFA8A8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8 %FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8A8A8FD21FFA8FFFFFFA8 %FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFF %FFA8FFFFFFA8FFFFFFA8A8FFFFA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8 %FD20FFA8A8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8A8FFFFFFA8A8FFFFFFA8FF %FFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFCAFF %A8FFCAFFA8FFFFFFA8FD1FFFA8A8A8FFA8FFCAFFA8FFA8FFA8FFFFFFA8FF %FFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8A8A8FD %05FFA87DFD04A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8 %A8FFA8A8A8FFA8FFA8FFA8FFA8FFA8A87DFD1DFFA8A8A8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF %FD07A8FD08FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF %A8A8A8FFFD05A8FFA8FFA8FFA8FFA8FFA8FFA8FD1DFFA8FFA8FFA8FFA8FF %A8FFA8FFFD05A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFFD05 %A8FFA8FD28FFFD05A8FFA8FFA8FFA8FFA8A8A8FD1BFFA8A8A8FFA8FFA8FF %FD05A8FFA8FD4AFFFD05A8FFA8FFA8FFA8FD1BFFA8A8A8FFA8FFFD05A8FD %52FFFD05A8FFA8A87DFD19FFA8A8A8FFFD07A8FD56FFFD05A8FFA8FD18FF %A8A8FFA8A8A8FD5EFFFD05A8FD17FFFD05A8FD62FFA8A8FD16FFA8FFA8FD %66FFA8FD15FFA8FD34FFFF %%EndData %ADOEndClientInjection: DocumentHeader "AI11EPS" %%Pages: 1 -%%DocumentNeededResources: +%%DocumentNeededResources: %%DocumentSuppliedResources: procset Adobe_AGM_Image 1.0 0 %%+ procset Adobe_CoolType_Utility_T42 1.0 0 %%+ procset Adobe_CoolType_Utility_MAKEOCF 1.23 0 %%+ procset Adobe_CoolType_Core 2.31 0 %%+ procset Adobe_AGM_Core 2.0 0 %%+ procset Adobe_AGM_Utils 1.0 0 -%%DocumentFonts: -%%DocumentNeededFonts: -%%DocumentNeededFeatures: -%%DocumentSuppliedFeatures: +%%DocumentFonts: +%%DocumentNeededFonts: +%%DocumentNeededFeatures: +%%DocumentSuppliedFeatures: %%DocumentProcessColors: Cyan Magenta Yellow Black -%%DocumentCustomColors: -%%CMYKCustomColor: -%%RGBCustomColor: +%%DocumentCustomColors: +%%CMYKCustomColor: +%%RGBCustomColor: %%EndComments - - - - - - + + + + + + %%BeginDefaults %%ViewingOrientation: 1 0 0 1 %%EndDefaults @@ -50,12 +50,12 @@ userdict/Adobe_AGM_Utils 75 dict dup begin put /nd{null def}bdf /xdf {exch def}bdf -/ldf +/ldf {load def}bdf /ddf -{put}bdf +{put}bdf /xddf -{3 -1 roll put}bdf +{3 -1 roll put}bdf /xpt {exch put}bdf /ndf @@ -83,10 +83,10 @@ userdict/Adobe_AGM_Utils 75 dict dup begin put 1 }ifelse def -/level2 +/level2 ps_level 2 ge def -/level3 +/level3 ps_level 3 ge def /ps_version @@ -220,14 +220,14 @@ def currenthalftone }ifelse }ifelse -}def +}def /rdcmntline { currentfile AGMUTIL_str256 readline pop (%)anchorsearch{pop}if }bdf /filter_cmyk -{ +{ dup type/filetype ne{ exch()/SubFileDecode filter }{ @@ -257,7 +257,7 @@ def cvi Names length mul names_index add Lookup exch get }bdf /filter_devn -{ +{ 4 dict begin /srcStr xdf /dstStr xdf @@ -321,7 +321,7 @@ def { Width Decode length 2 div mul cvi string }repeat - end]def + end]def imageDict begin /DataSource[AGMUTIL_imagefile Decode BitsPerComponent false 1/filter_indexed_devn load dstDataStr srcDataStrs devn_alt_datasource/exec cvx]cvx def /Decode[0 1]def @@ -335,7 +335,7 @@ def load exec imageDict/DataSource origDataSource put imageDict/MultipleDataSources origMultipleDataSources put - imageDict/Decode origDecode put + imageDict/Decode origDecode put end }bdf /write_image_file @@ -344,7 +344,7 @@ def {(AGMUTIL_imagefile)(w+)file}stopped{ false }{ - Adobe_AGM_Utils/AGMUTIL_imagefile xddf + Adobe_AGM_Utils/AGMUTIL_imagefile xddf 2 dict begin /imbufLen Width BitsPerComponent mul 7 add 8 idiv def MultipleDataSources{DataSource 0 get}{DataSource}ifelse type/filetype eq{ @@ -391,7 +391,7 @@ def }def statusdict/product known userdict/AGMP_current_show known not and{ /pstr statusdict/product get def - pstr(HP LaserJet 2200)eq + pstr(HP LaserJet 2200)eq pstr(HP LaserJet 4000 Series)eq or pstr(HP LaserJet 4050 Series )eq or pstr(HP LaserJet 8000 Series)eq or @@ -404,7 +404,7 @@ statusdict/product known userdict/AGMP_current_show known not and{ pstr(HP LaserJet 5Si)eq or pstr(HP LaserJet 1200 Series)eq or pstr(HP LaserJet 1300 Series)eq or - pstr(HP LaserJet 4100 Series)eq or + pstr(HP LaserJet 4100 Series)eq or { userdict/AGMP_current_show/show load put userdict/show{ @@ -452,10 +452,10 @@ statusdict/product known userdict/AGMP_current_show known not and{ {exit}if }loop pop - }if + }if } { - /DataSource load type + /DataSource load type dup/filetype eq { 1 dict begin @@ -493,17 +493,17 @@ statusdict/product known userdict/AGMP_current_show known not and{ }{ currenttransfer }ifelse - addprocs/TransferFunction xdf + addprocs/TransferFunction xdf currentdict end def currentdict end sethalftone }{ currentdict/TransferFunction known{ - /TransferFunction load + /TransferFunction load }{ currenttransfer }ifelse addprocs/TransferFunction xdf - currentdict end sethalftone + currentdict end sethalftone pop }ifelse }def @@ -511,21 +511,21 @@ statusdict/product known userdict/AGMP_current_show known not and{ { dup xcheck exch dup length array exch - Adobe_AGM_Core/AGMCORE_tmp -1 ddf + Adobe_AGM_Core/AGMCORE_tmp -1 ddf { - Adobe_AGM_Core/AGMCORE_tmp 2 copy get 1 add ddf + Adobe_AGM_Core/AGMCORE_tmp 2 copy get 1 add ddf dup type/dicttype eq { Adobe_AGM_Core/AGMCORE_tmp get exch clonedict - Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf + Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf }if dup type/arraytype eq { Adobe_AGM_Core/AGMCORE_tmp get exch clonearray - Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf + Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf }if exch dup Adobe_AGM_Core/AGMCORE_tmp get 4 -1 roll put @@ -554,7 +554,7 @@ statusdict/product known userdict/AGMP_current_show known not and{ { /indexed_colorspace_dict AGMCORE_gget dup null ne{ dup/CSDBase known{ - /CSDBase get/CSD get_res/Names known + /CSDBase get/CSD get_res/Names known }{ pop false }ifelse @@ -563,7 +563,7 @@ statusdict/product known userdict/AGMP_current_show known not and{ }ifelse }bdf /DeviceN_NoneName -{ +{ /Names where{ pop false Names @@ -607,10 +607,10 @@ statusdict/product known userdict/AGMP_current_show known not and{ /ReadBypdfmark_5 { currentfile exch 0 exch/SubFileDecode filter - /currentdistillerparams where + /currentdistillerparams where {pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse {flushfile cleartomark} - {/PUT pdfmark}ifelse + {/PUT pdfmark}ifelse }bdf /ReadBypdfmark_5_string { @@ -821,7 +821,7 @@ setglobal }def /compose_error_msg { - grestoreall initgraphics + grestoreall initgraphics /Helvetica findfont 10 scalefont setfont /AGMCORE_deltaY 100 def /AGMCORE_deltaX 310 def @@ -829,7 +829,7 @@ setglobal 0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto 0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath 0 AGMCORE_&setgray - gsave 1 AGMCORE_&setgray fill grestore + gsave 1 AGMCORE_&setgray fill grestore 1 setlinewidth gsave stroke grestore currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto /AGMCORE_deltaY 12 def @@ -881,7 +881,7 @@ setglobal { pop currentdistillerparams/CoreDistVersion get 5000 lt {<</DetectBlends false>>setdistillerparams}if - }if + }if /AGMCORE_ps_version xdf /AGMCORE_ps_level xdf errordict/AGM_handleerror known not{ @@ -897,9 +897,9 @@ setglobal errordict/AGM_handleerror get exec }bind put }if - /AGMCORE_environ_ok + /AGMCORE_environ_ok ps_level AGMCORE_ps_level ge - ps_version AGMCORE_ps_version ge and + ps_version AGMCORE_ps_version ge and AGMCORE_ps_level -1 eq or def AGMCORE_environ_ok not @@ -965,7 +965,7 @@ setglobal }def /grestoreall{ AGMCORE_&grestoreall - /AGMCORE_gstackptr AGMCORE_gstacksaveptr store + /AGMCORE_gstackptr AGMCORE_gstacksaveptr store }def /save{ AGMCORE_&save @@ -979,7 +979,7 @@ setglobal }def /setoverprint{ dup/AGMCORE_currentoverprint exch AGMCORE_gput AGMCORE_&setoverprint - }def + }def 0 1 AGMCORE_gstack length 1 sub{ AGMCORE_gstack exch AGMCORE_gstackframekeys dict put }for @@ -1043,7 +1043,7 @@ setglobal /AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def /AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def /AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def - /AGMCORE_plate_ndx + /AGMCORE_plate_ndx AGMCORE_cyan_plate{ 0 }{ @@ -1077,7 +1077,7 @@ setglobal /AGMCORE_in_rip_sep where{ pop AGMCORE_in_rip_sep }{ - AGMCORE_distilling + AGMCORE_distilling { false }{ @@ -1099,7 +1099,7 @@ setglobal def /AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def /AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def - /AGM_preserve_spots + /AGM_preserve_spots /AGM_preserve_spots where{ pop AGM_preserve_spots }{ @@ -1172,7 +1172,7 @@ setglobal pop pop pop true }if }if - }if + }if { AGMCORE_name/HqnSpots/ProcSet findresource/TestSpot gx not }{ @@ -1245,10 +1245,10 @@ setglobal }ifelse }ifelse }def - }ifelse - /AGMCORE_avoid_L2_sep_space - version cvr 2012 lt - level2 and + }ifelse + /AGMCORE_avoid_L2_sep_space + version cvr 2012 lt + level2 and AGMCORE_producing_seps not and def /AGMCORE_is_cmyk_sep @@ -1257,8 +1257,8 @@ setglobal /AGM_avoid_0_cmyk where{ pop AGM_avoid_0_cmyk }{ - AGM_preserve_spots - userdict/Adobe_AGM_OnHost_Seps known + AGM_preserve_spots + userdict/Adobe_AGM_OnHost_Seps known userdict/Adobe_AGM_InRip_Seps known or not and }ifelse @@ -1294,8 +1294,8 @@ setglobal }ifelse }ifelse }ifelse - settransfer - } + settransfer + } def /AGMCORE_get_ink_data AGMCORE_cyan_plate{ @@ -1357,7 +1357,7 @@ setglobal }ifelse }def /AGMCORE_filter_functiondatasource - { + { 5 dict begin /data_in xdf data_in type/stringtype eq @@ -1407,11 +1407,11 @@ setglobal }{ /C0[1]def /C1[1]def - }ifelse + }ifelse }if FunctionType 3 eq { - /Functions[Functions{channel paint? AGMCORE_separateShadingFunction}forall]def + /Functions[Functions{channel paint? AGMCORE_separateShadingFunction}forall]def }if currentdict/Range known {/Range[0 1]def}if @@ -1454,7 +1454,7 @@ setglobal }ifelse ColorSpace 3 3 -1 roll bind put }ifelse - ColorSpace 2/DeviceGray put + ColorSpace 2/DeviceGray put }ifelse end }def @@ -1465,7 +1465,7 @@ setglobal {[exch]}if dup 0 get/DeviceCMYK eq { - exch begin + exch begin currentdict AGMCORE_cyan_plate {0 true}if @@ -1476,7 +1476,7 @@ setglobal AGMCORE_black_plate {3 true}if AGMCORE_plate_ndx 4 eq - {0 false}if + {0 false}if dup not currentoverprint and {/AGMCORE_ignoreshade true def}if AGMCORE_separateShading @@ -1490,7 +1490,7 @@ setglobal { ColorSpace 1 get AGMCORE_IsCurrentColor AGMCORE_plate_ndx 4 lt and ColorSpace 1 get AGMCORE_IsSeparationAProcessColor not and { - ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq + ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq { /ColorSpace [ @@ -1503,7 +1503,7 @@ setglobal 4 1/roll cvx 3[/pop cvx]cvx/repeat cvx 1/exch cvx/sub cvx - ]cvx + ]cvx ]def }{ AGMCORE_report_unsupported_color_space @@ -1514,12 +1514,12 @@ setglobal }ifelse }{ currentdict ColorSpace 1 get AGMCORE_IsCurrentColor - 0 exch + 0 exch dup not currentoverprint and {/AGMCORE_ignoreshade true def}if AGMCORE_separateShading - }ifelse - }if + }ifelse + }if currentdict end exch }if @@ -1528,7 +1528,7 @@ setglobal exch begin ColorSpace 1 get convert_to_process { - ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq + ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq { /ColorSpace [ @@ -1541,7 +1541,7 @@ setglobal 4 1/roll cvx 3[/pop cvx]cvx/repeat cvx 1/exch cvx/sub cvx - ]cvx + ]cvx ]def }{ AGMCORE_report_unsupported_color_space @@ -1562,7 +1562,7 @@ setglobal }if 1 add }forall - exch + exch dup not currentoverprint and {/AGMCORE_ignoreshade true def}if AGMCORE_separateShading @@ -1608,7 +1608,7 @@ setglobal }def /shfill { - AGMCORE_separateShadingDict + AGMCORE_separateShadingDict dup/AGMCORE_ignoreshade known {pop} {AGMCORE_&sysshfill}ifelse @@ -1737,9 +1737,9 @@ setglobal /sep_colorspace_dict currentdict AGMCORE_gput pop pop pop [ - /Separation Name + /Separation Name CSA map_csa - MappedCSA + MappedCSA /sep_colorspace_proc load ] dup Name @@ -1748,7 +1748,7 @@ setglobal }if map_reserved_ink_name 1 xpt }{ - /DeviceN eq + /DeviceN eq { dup length array copy dup dup 1 get[ @@ -1759,7 +1759,7 @@ setglobal }if }if map_reserved_ink_name - }forall + }forall ]1 xpt }if }ifelse @@ -1795,7 +1795,7 @@ setglobal }if DeviceN_PS2_inRip_seps{AGMCORE_&&&setcolorspace}if }def - }if + }if }{ /adj { @@ -1956,7 +1956,7 @@ setglobal 3 1 roll mul add }for - ColorSpaceFamily/Separation eq + ColorSpaceFamily/Separation eq {sep} { ColorSpaceFamily/DeviceN eq @@ -1964,13 +1964,13 @@ setglobal }ifelse }bdf /sssetbackground{ - aload pop - ColorSpaceFamily/Separation eq + aload pop + ColorSpaceFamily/Separation eq {sep} { ColorSpaceFamily/DeviceN eq {devn}{setcolor}ifelse - }ifelse + }ifelse }bdf /RadialShade { @@ -2419,7 +2419,7 @@ def /AGMCORE_tmp exch store /sep_colorspace_dict AGMCORE_gget begin currentdict/Components known{ - Components aload pop + Components aload pop TintMethod/Lab eq{ 2{AGMCORE_tmp mul NComponents 1 roll}repeat LMax sub AGMCORE_tmp mul LMax add NComponents 1 roll @@ -2449,7 +2449,7 @@ def }def /sep_proc_name { - dup 0 get + dup 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or level2 not and has_color not and{ pop[/DeviceGray] /sep_colorspace_gray_proc @@ -2471,27 +2471,27 @@ def CSA map_csa /AGMCORE_sep_special Name dup()eq exch(All)eq or store AGMCORE_avoid_L2_sep_space{ - [/Indexed MappedCSA sep_proc_name 255 exch - {255 div}/exec cvx 3 -1 roll[4 1 roll load/exec cvx]cvx + [/Indexed MappedCSA sep_proc_name 255 exch + {255 div}/exec cvx 3 -1 roll[4 1 roll load/exec cvx]cvx ]setcolorspace_opt /TintProc{ 255 mul round cvi setcolor }bdf }{ - MappedCSA 0 get/DeviceCMYK eq - currentdict/Components known and + MappedCSA 0 get/DeviceCMYK eq + currentdict/Components known and AGMCORE_sep_special not and{ /TintProc[ - Components aload pop Name findcmykcustomcolor + Components aload pop Name findcmykcustomcolor /exch cvx/setcustomcolor cvx ]cvx bdf }{ AGMCORE_host_sep Name(All)eq and{ /TintProc{ - 1 exch sub setseparationgray + 1 exch sub setseparationgray }bdf }{ - AGMCORE_in_rip_sep MappedCSA 0 get/DeviceCMYK eq and + AGMCORE_in_rip_sep MappedCSA 0 get/DeviceCMYK eq and AGMCORE_host_sep or Name()eq and{ /TintProc[ @@ -2512,9 +2512,9 @@ def /Name cvx/findcmykcustomcolor cvx/exch cvx AGMCORE_host_sep{ AGMCORE_is_cmyk_sep - /Name cvx + /Name cvx /AGMCORE_IsSeparationAProcessColor load/exec cvx - /not cvx/and cvx + /not cvx/and cvx }{ Name inRip_spot_has_ink not }ifelse @@ -2549,7 +2549,7 @@ def 1 exch add/index cvx c1/get cvx/mul cvx }for - numarrays 1 add 1/roll cvx + numarrays 1 add 1/roll cvx }for numarrays[/pop cvx]cvx/repeat cvx end @@ -2565,7 +2565,7 @@ def 1 1 0 1 numarrays 1 sub { - 1 3 3 -1 roll add/index cvx + 1 3 3 -1 roll add/index cvx c1/get cvx/sub cvx/mul cvx }for /sub cvx @@ -2593,7 +2593,7 @@ def }bdf /setdevicencolorspace { - dup/AliasedColorants known{false}{true}ifelse + dup/AliasedColorants known{false}{true}ifelse current_spot_alias and{ 7 dict begin /names_index 0 def @@ -2621,9 +2621,9 @@ def }ifelse }ifelse new_names names_index 3 -1 roll/Name get put - /alias_cnt alias_cnt 1 add def + /alias_cnt alias_cnt 1 add def }{ - /name xdf + /name xdf new_names names_index name put dup/LookupTables known{ dup begin @@ -2635,7 +2635,7 @@ def end }ifelse }ifelse - /names_index names_index 1 add def + /names_index names_index 1 add def }forall alias_cnt 0 gt{ /AliasedColorants true def @@ -2745,7 +2745,7 @@ def Names convert_to_process{ exec_tint_transform } - { + { currentdict/AliasedColorants known{ AliasedColorants not }{ @@ -2849,7 +2849,7 @@ def }ifelse currentgray tableIndex exch - 255 mul cvi + 255 mul cvi NewLookup 3 1 roll put }for [/Indexed currentcolorspace HiVal NewLookup]setcolorspace_opt @@ -2888,18 +2888,18 @@ def AGMCORE_host_sep level2 not and{ 0 0 0 0 setcmykcolor }{ - [/Indexed MappedCSA + [/Indexed MappedCSA level2 not has_color not and{ dup 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or{ pop[/DeviceGray] }if HiVal GrayLookup }{ - HiVal + HiVal currentdict/RangeArray known{ { /indexed_colorspace_dict AGMCORE_gget begin - Lookup exch + Lookup exch dup HiVal gt{ pop HiVal }if @@ -2973,7 +2973,7 @@ def /add_res { dup/CSD eq{ - pop + pop //Adobe_AGM_Core begin /AGMCORE_CSD_cache load 3 1 roll put end @@ -2986,7 +2986,7 @@ def { aload pop exch dup/CSD eq{ - pop + pop {//Adobe_AGM_Core/AGMCORE_CSD_cache get exch undef}forall }{ exch @@ -3021,7 +3021,7 @@ def dup/count get dup 0 get dup 3 1 roll 1 add 0 xpt - get + get }def /cachepaintproc_compress { @@ -3030,10 +3030,10 @@ def /ppdict 20 dict def /string_size 16000 def /readbuffer string_size string def - currentglobal true setglobal + currentglobal true setglobal ppdict 1 array dup 0 1 put/count xpt setglobal - /LZWFilter + /LZWFilter { exch dup length 0 eq{ @@ -3043,13 +3043,13 @@ def }ifelse {string_size}{0}ifelse string }/LZWEncode filter def - { + { ReadFilter readbuffer readstring exch LZWFilter exch writestring not{exit}if }loop LZWFilter closefile - ppdict + ppdict end }def /cachepaintproc @@ -3057,7 +3057,7 @@ def 2 dict begin currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def /ppdict 20 dict def - currentglobal true setglobal + currentglobal true setglobal ppdict 1 array dup 0 1 put/count xpt setglobal { @@ -3065,8 +3065,8 @@ def ppdict dup length 1 sub 3 -1 roll put not{exit}if }loop - ppdict dup dup length 1 sub()put - end + ppdict dup dup length 1 sub()put + end }def /make_pattern { @@ -3110,7 +3110,7 @@ def currentcolorrendering/RenderingIntent get } { - Intent/AbsoluteColorimetric eq + Intent/AbsoluteColorimetric eq { /absolute_colorimetric_crd AGMCORE_gget dup null eq } @@ -3130,7 +3130,7 @@ def }ifelse }ifelse { - pop null + pop null } { /RenderingIntent known{null}{Intent}ifelse @@ -3150,7 +3150,7 @@ def product(Xerox Phaser 5400)ne exch }ifelse - dup Intent/AbsoluteColorimetric eq + dup Intent/AbsoluteColorimetric eq { /absolute_colorimetric_crd exch AGMCORE_gput } @@ -3212,7 +3212,7 @@ def currentdict end }if setcolorrendering_opt - }if + }if }if }def /set_crd @@ -3232,7 +3232,7 @@ def currentdict/UCR known {/UCR}{/AGMCORE_currentucr}ifelse load setundercolorremoval - currentdict/BG known + currentdict/BG known {/BG}{/AGMCORE_currentbg}ifelse load setblackgeneration }if @@ -3272,7 +3272,7 @@ def /cpaint_gsep { //Adobe_AGM_Core/AGMCORE_ConvertToProcess get - { + { (%end_cpaint_gsep)flushinput }if }def @@ -3283,10 +3283,10 @@ def currentfile token pop currentfile token pop mo { currentfile token pop dup type/stringtype eq - {pop exit}if - 0 exch rlineto + {pop exit}if + 0 exch rlineto currentfile token pop dup type/stringtype eq - {pop exit}if + {pop exit}if 0 rlineto }loop }def @@ -3298,7 +3298,7 @@ def /T1_grestore level3 {/cliprestore} - {/grestore}ifelse + {/grestore}ifelse load def /set_spot_alias_ary { @@ -3345,7 +3345,7 @@ def /AGMCORE_SpotAliasAry2 where{ begin /AGMCORE_name xdf - false + false AGMCORE_SpotAliasAry2{ dup/Name get AGMCORE_name eq{ /CSD get/CSD get_res @@ -3536,7 +3536,7 @@ end systemdict/setpacking known {setpacking}if %%EndResource -%%BeginResource: procset Adobe_CoolType_Core 2.31 0 %%Copyright: Copyright 1997-2006 Adobe Systems Incorporated. All Rights Reserved. %%Version: 2.31 0 10 dict begin /Adobe_CoolType_Passthru currentdict def /Adobe_CoolType_Core_Defined userdict/Adobe_CoolType_Core known def Adobe_CoolType_Core_Defined {/Adobe_CoolType_Core userdict/Adobe_CoolType_Core get def} if userdict/Adobe_CoolType_Core 70 dict dup begin put /Adobe_CoolType_Version 2.31 def /Level2? systemdict/languagelevel known dup {pop systemdict/languagelevel get 2 ge} if def Level2? not { /currentglobal false def /setglobal/pop load def /gcheck{pop false}bind def /currentpacking false def /setpacking/pop load def /SharedFontDirectory 0 dict def } if currentpacking true setpacking currentglobal false setglobal userdict/Adobe_CoolType_Data 2 copy known not {2 copy 10 dict put} if get begin /@opStackCountByLevel 32 dict def /@opStackLevel 0 def /@dictStackCountByLevel 32 dict def /@dictStackLevel 0 def end setglobal currentglobal true setglobal userdict/Adobe_CoolType_GVMFonts known not {userdict/Adobe_CoolType_GVMFonts 10 dict put} if setglobal currentglobal false setglobal userdict/Adobe_CoolType_LVMFonts known not {userdict/Adobe_CoolType_LVMFonts 10 dict put} if setglobal /ct_VMDictPut { dup gcheck{Adobe_CoolType_GVMFonts}{Adobe_CoolType_LVMFonts}ifelse 3 1 roll put }bind def /ct_VMDictUndef { dup Adobe_CoolType_GVMFonts exch known {Adobe_CoolType_GVMFonts exch undef} { dup Adobe_CoolType_LVMFonts exch known {Adobe_CoolType_LVMFonts exch undef} {pop} ifelse }ifelse }bind def /ct_str1 1 string def /ct_xshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { _ct_x _ct_y moveto 0 rmoveto } ifelse /_ct_i _ct_i 1 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /ct_yshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { _ct_x _ct_y moveto 0 exch rmoveto } ifelse /_ct_i _ct_i 1 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /ct_xyshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { {_ct_na _ct_i 1 add get}stopped {pop pop pop} { _ct_x _ct_y moveto rmoveto } ifelse } ifelse /_ct_i _ct_i 2 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /xsh{{@xshow}stopped{Adobe_CoolType_Data begin ct_xshow end}if}bind def /ysh{{@yshow}stopped{Adobe_CoolType_Data begin ct_yshow end}if}bind def /xysh{{@xyshow}stopped{Adobe_CoolType_Data begin ct_xyshow end}if}bind def currentglobal true setglobal /ct_T3Defs { /BuildChar { 1 index/Encoding get exch get 1 index/BuildGlyph get exec }bind def /BuildGlyph { exch begin GlyphProcs exch get exec end }bind def }bind def setglobal /@_SaveStackLevels { Adobe_CoolType_Data begin /@vmState currentglobal def false setglobal @opStackCountByLevel @opStackLevel 2 copy known not { 2 copy 3 dict dup/args 7 index 5 add array put put get } { get dup/args get dup length 3 index lt { dup length 5 add array exch 1 index exch 0 exch putinterval 1 index exch/args exch put } {pop} ifelse } ifelse begin count 1 sub 1 index lt {pop count} if dup/argCount exch def dup 0 gt { args exch 0 exch getinterval astore pop } {pop} ifelse count /restCount exch def end /@opStackLevel @opStackLevel 1 add def countdictstack 1 sub @dictStackCountByLevel exch @dictStackLevel exch put /@dictStackLevel @dictStackLevel 1 add def @vmState setglobal end }bind def /@_RestoreStackLevels { Adobe_CoolType_Data begin /@opStackLevel @opStackLevel 1 sub def @opStackCountByLevel @opStackLevel get begin count restCount sub dup 0 gt {{pop}repeat} {pop} ifelse args 0 argCount getinterval{}forall end /@dictStackLevel @dictStackLevel 1 sub def @dictStackCountByLevel @dictStackLevel get end countdictstack exch sub dup 0 gt {{end}repeat} {pop} ifelse }bind def /@_PopStackLevels { Adobe_CoolType_Data begin /@opStackLevel @opStackLevel 1 sub def /@dictStackLevel @dictStackLevel 1 sub def end }bind def /@Raise { exch cvx exch errordict exch get exec stop }bind def /@ReRaise { cvx $error/errorname get errordict exch get exec stop }bind def /@Stopped { 0 @#Stopped }bind def /@#Stopped { @_SaveStackLevels stopped {@_RestoreStackLevels true} {@_PopStackLevels false} ifelse }bind def /@Arg { Adobe_CoolType_Data begin @opStackCountByLevel @opStackLevel 1 sub get begin args exch argCount 1 sub exch sub get end end }bind def currentglobal true setglobal /CTHasResourceForAllBug Level2? { 1 dict dup /@shouldNotDisappearDictValue true def Adobe_CoolType_Data exch/@shouldNotDisappearDict exch put begin count @_SaveStackLevels {(*){pop stop}128 string/Category resourceforall} stopped pop @_RestoreStackLevels currentdict Adobe_CoolType_Data/@shouldNotDisappearDict get dup 3 1 roll ne dup 3 1 roll { /@shouldNotDisappearDictValue known { { end currentdict 1 index eq {pop exit} if } loop } if } { pop end } ifelse } {false} ifelse def true setglobal /CTHasResourceStatusBug Level2? { mark {/steveamerige/Category resourcestatus} stopped {cleartomark true} {cleartomark currentglobal not} ifelse } {false} ifelse def setglobal /CTResourceStatus { mark 3 1 roll /Category findresource begin ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec {cleartomark false} {{3 2 roll pop true}{cleartomark false}ifelse} ifelse end }bind def /CTWorkAroundBugs { Level2? { /cid_PreLoad/ProcSet resourcestatus { pop pop currentglobal mark { (*) { dup/CMap CTHasResourceStatusBug {CTResourceStatus} {resourcestatus} ifelse { pop dup 0 eq exch 1 eq or { dup/CMap findresource gcheck setglobal /CMap undefineresource } { pop CTHasResourceForAllBug {exit} {stop} ifelse } ifelse } {pop} ifelse } 128 string/CMap resourceforall } stopped {cleartomark} stopped pop setglobal } if } if }bind def /ds { Adobe_CoolType_Core begin CTWorkAroundBugs /mo/moveto load def /nf/newencodedfont load def /msf{makefont setfont}bind def /uf{dup undefinefont ct_VMDictUndef}bind def /ur/undefineresource load def /chp/charpath load def /awsh/awidthshow load def /wsh/widthshow load def /ash/ashow load def /@xshow/xshow load def /@yshow/yshow load def /@xyshow/xyshow load def /@cshow/cshow load def /sh/show load def /rp/repeat load def /.n/.notdef def end currentglobal false setglobal userdict/Adobe_CoolType_Data 2 copy known not {2 copy 10 dict put} if get begin /AddWidths? false def /CC 0 def /charcode 2 string def /@opStackCountByLevel 32 dict def /@opStackLevel 0 def /@dictStackCountByLevel 32 dict def /@dictStackLevel 0 def /InVMFontsByCMap 10 dict def /InVMDeepCopiedFonts 10 dict def end setglobal }bind def /dt { currentdict Adobe_CoolType_Core eq {end} if }bind def /ps { Adobe_CoolType_Core begin Adobe_CoolType_GVMFonts begin Adobe_CoolType_LVMFonts begin SharedFontDirectory begin }bind def /pt { end end end end }bind def /unload { systemdict/languagelevel known { systemdict/languagelevel get 2 ge { userdict/Adobe_CoolType_Core 2 copy known {undef} {pop pop} ifelse } if } if }bind def /ndf { 1 index where {pop pop pop} {dup xcheck{bind}if def} ifelse }def /findfont systemdict begin userdict begin /globaldict where{/globaldict get begin}if dup where pop exch get /globaldict where{pop end}if end end Adobe_CoolType_Core_Defined {/systemfindfont exch def} { /findfont 1 index def /systemfindfont exch def } ifelse /undefinefont {pop}ndf /copyfont { currentglobal 3 1 roll 1 index gcheck setglobal dup null eq{0}{dup length}ifelse 2 index length add 1 add dict begin exch { 1 index/FID eq {pop pop} {def} ifelse } forall dup null eq {pop} {{def}forall} ifelse currentdict end exch setglobal }bind def /copyarray { currentglobal exch dup gcheck setglobal dup length array copy exch setglobal }bind def /newencodedfont { currentglobal { SharedFontDirectory 3 index known {SharedFontDirectory 3 index get/FontReferenced known} {false} ifelse } { FontDirectory 3 index known {FontDirectory 3 index get/FontReferenced known} { SharedFontDirectory 3 index known {SharedFontDirectory 3 index get/FontReferenced known} {false} ifelse } ifelse } ifelse dup { 3 index findfont/FontReferenced get 2 index dup type/nametype eq {findfont} if ne {pop false} if } if dup { 1 index dup type/nametype eq {findfont} if dup/CharStrings known { /CharStrings get length 4 index findfont/CharStrings get length ne { pop false } if } {pop} ifelse } if { pop 1 index findfont /Encoding get exch 0 1 255 {2 copy get 3 index 3 1 roll put} for pop pop pop } { currentglobal 4 1 roll dup type/nametype eq {findfont} if dup gcheck setglobal dup dup maxlength 2 add dict begin exch { 1 index/FID ne 2 index/Encoding ne and {def} {pop pop} ifelse } forall /FontReferenced exch def /Encoding exch dup length array copy def /FontName 1 index dup type/stringtype eq{cvn}if def dup currentdict end definefont ct_VMDictPut setglobal } ifelse }bind def /SetSubstituteStrategy { $SubstituteFont begin dup type/dicttype ne {0 dict} if currentdict/$Strategies known { exch $Strategies exch 2 copy known { get 2 copy maxlength exch maxlength add dict begin {def}forall {def}forall currentdict dup/$Init known {dup/$Init get exec} if end /$Strategy exch def } {pop pop pop} ifelse } {pop pop} ifelse end }bind def /scff { $SubstituteFont begin dup type/stringtype eq {dup length exch} {null} ifelse /$sname exch def /$slen exch def /$inVMIndex $sname null eq { 1 index $str cvs dup length $slen sub $slen getinterval cvn } {$sname} ifelse def end {findfont} @Stopped { dup length 8 add string exch 1 index 0(BadFont:)putinterval 1 index exch 8 exch dup length string cvs putinterval cvn {findfont} @Stopped {pop/Courier findfont} if } if $SubstituteFont begin /$sname null def /$slen 0 def /$inVMIndex null def end }bind def /isWidthsOnlyFont { dup/WidthsOnly known {pop pop true} { dup/FDepVector known {/FDepVector get{isWidthsOnlyFont dup{exit}if}forall} { dup/FDArray known {/FDArray get{isWidthsOnlyFont dup{exit}if}forall} {pop} ifelse } ifelse } ifelse }bind def /ct_StyleDicts 4 dict dup begin /Adobe-Japan1 4 dict dup begin Level2? { /Serif /HeiseiMin-W3-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiMin-W3} { /CIDFont/Category resourcestatus { pop pop /HeiseiMin-W3/CIDFont resourcestatus {pop pop/HeiseiMin-W3} {/Ryumin-Light} ifelse } {/Ryumin-Light} ifelse } ifelse def /SansSerif /HeiseiKakuGo-W5-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiKakuGo-W5} { /CIDFont/Category resourcestatus { pop pop /HeiseiKakuGo-W5/CIDFont resourcestatus {pop pop/HeiseiKakuGo-W5} {/GothicBBB-Medium} ifelse } {/GothicBBB-Medium} ifelse } ifelse def /HeiseiMaruGo-W4-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiMaruGo-W4} { /CIDFont/Category resourcestatus { pop pop /HeiseiMaruGo-W4/CIDFont resourcestatus {pop pop/HeiseiMaruGo-W4} { /Jun101-Light-RKSJ-H/Font resourcestatus {pop pop/Jun101-Light} {SansSerif} ifelse } ifelse } { /Jun101-Light-RKSJ-H/Font resourcestatus {pop pop/Jun101-Light} {SansSerif} ifelse } ifelse } ifelse /RoundSansSerif exch def /Default Serif def } { /Serif/Ryumin-Light def /SansSerif/GothicBBB-Medium def { (fonts/Jun101-Light-83pv-RKSJ-H)status }stopped {pop}{ {pop pop pop pop/Jun101-Light} {SansSerif} ifelse /RoundSansSerif exch def }ifelse /Default Serif def } ifelse end def /Adobe-Korea1 4 dict dup begin /Serif/HYSMyeongJo-Medium def /SansSerif/HYGoThic-Medium def /RoundSansSerif SansSerif def /Default Serif def end def /Adobe-GB1 4 dict dup begin /Serif/STSong-Light def /SansSerif/STHeiti-Regular def /RoundSansSerif SansSerif def /Default Serif def end def /Adobe-CNS1 4 dict dup begin /Serif/MKai-Medium def /SansSerif/MHei-Medium def /RoundSansSerif SansSerif def /Default Serif def end def end def Level2?{currentglobal true setglobal}if /ct_BoldRomanWidthProc { stringwidth 1 index 0 ne{exch .03 add exch}if setcharwidth 0 0 }bind def /ct_Type0WidthProc { dup stringwidth 0 0 moveto 2 index true charpath pathbbox 0 -1 7 index 2 div .88 setcachedevice2 pop 0 0 }bind def /ct_Type0WMode1WidthProc { dup stringwidth pop 2 div neg -0.88 2 copy moveto 0 -1 5 -1 roll true charpath pathbbox setcachedevice }bind def /cHexEncoding [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def /ct_BoldBaseFont 11 dict begin /FontType 3 def /FontMatrix[1 0 0 1 0 0]def /FontBBox[0 0 1 1]def /Encoding cHexEncoding def /_setwidthProc/ct_BoldRomanWidthProc load def /_bcstr1 1 string def /BuildChar { exch begin _basefont setfont _bcstr1 dup 0 4 -1 roll put dup _setwidthProc 3 copy moveto show _basefonto setfont moveto show end }bind def currentdict end def systemdict/composefont known { /ct_DefineIdentity-H { /Identity-H/CMap resourcestatus { pop pop } { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering(Identity)def /Supplement 0 def end def /CMapName/Identity-H def /CMapVersion 1.000 def /CMapType 1 def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse } def /ct_BoldBaseCIDFont 11 dict begin /CIDFontType 1 def /CIDFontName/ct_BoldBaseCIDFont def /FontMatrix[1 0 0 1 0 0]def /FontBBox[0 0 1 1]def /_setwidthProc/ct_Type0WidthProc load def /_bcstr2 2 string def /BuildGlyph { exch begin _basefont setfont _bcstr2 1 2 index 256 mod put _bcstr2 0 3 -1 roll 256 idiv put _bcstr2 dup _setwidthProc 3 copy moveto show _basefonto setfont moveto show end }bind def currentdict end def }if Level2?{setglobal}if /ct_CopyFont{ { 1 index/FID ne 2 index/UniqueID ne and {def}{pop pop}ifelse }forall }bind def /ct_Type0CopyFont { exch dup length dict begin ct_CopyFont [ exch FDepVector { dup/FontType get 0 eq { 1 index ct_Type0CopyFont /_ctType0 exch definefont } { /_ctBaseFont exch 2 index exec } ifelse exch } forall pop ] /FDepVector exch def currentdict end }bind def /ct_MakeBoldFont { dup/ct_SyntheticBold known { dup length 3 add dict begin ct_CopyFont /ct_StrokeWidth .03 0 FontMatrix idtransform pop def /ct_SyntheticBold true def currentdict end definefont } { dup dup length 3 add dict begin ct_CopyFont /PaintType 2 def /StrokeWidth .03 0 FontMatrix idtransform pop def /dummybold currentdict end definefont dup/FontType get dup 9 ge exch 11 le and { ct_BoldBaseCIDFont dup length 3 add dict copy begin dup/CIDSystemInfo get/CIDSystemInfo exch def ct_DefineIdentity-H /_Type0Identity/Identity-H 3 -1 roll[exch]composefont /_basefont exch def /_Type0Identity/Identity-H 3 -1 roll[exch]composefont /_basefonto exch def currentdict end /CIDFont defineresource } { ct_BoldBaseFont dup length 3 add dict copy begin /_basefont exch def /_basefonto exch def currentdict end definefont } ifelse } ifelse }bind def /ct_MakeBold{ 1 index 1 index findfont currentglobal 5 1 roll dup gcheck setglobal dup /FontType get 0 eq { dup/WMode known{dup/WMode get 1 eq}{false}ifelse version length 4 ge and {version 0 4 getinterval cvi 2015 ge} {true} ifelse {/ct_Type0WidthProc} {/ct_Type0WMode1WidthProc} ifelse ct_BoldBaseFont/_setwidthProc 3 -1 roll load put {ct_MakeBoldFont}ct_Type0CopyFont definefont } { dup/_fauxfont known not 1 index/SubstMaster known not and { ct_BoldBaseFont/_setwidthProc /ct_BoldRomanWidthProc load put ct_MakeBoldFont } { 2 index 2 index eq {exch pop } { dup length dict begin ct_CopyFont currentdict end definefont } ifelse } ifelse } ifelse pop pop pop setglobal }bind def /?str1 256 string def /?set { $SubstituteFont begin /$substituteFound false def /$fontname 1 index def /$doSmartSub false def end dup findfont $SubstituteFont begin $substituteFound {false} { dup/FontName known { dup/FontName get $fontname eq 1 index/DistillerFauxFont known not and /currentdistillerparams where {pop false 2 index isWidthsOnlyFont not and} if } {false} ifelse } ifelse exch pop /$doSmartSub true def end { 5 1 roll pop pop pop pop findfont } { 1 index findfont dup/FontType get 3 eq { 6 1 roll pop pop pop pop pop false } {pop true} ifelse { $SubstituteFont begin pop pop /$styleArray 1 index def /$regOrdering 2 index def pop pop 0 1 $styleArray length 1 sub { $styleArray exch get ct_StyleDicts $regOrdering 2 copy known { get exch 2 copy known not {pop/Default} if get dup type/nametype eq { ?str1 cvs length dup 1 add exch ?str1 exch(-)putinterval exch dup length exch ?str1 exch 3 index exch putinterval add ?str1 exch 0 exch getinterval cvn } { pop pop/Unknown } ifelse } { pop pop pop pop/Unknown } ifelse } for end findfont }if } ifelse currentglobal false setglobal 3 1 roll null copyfont definefont pop setglobal }bind def setpacking userdict/$SubstituteFont 25 dict put 1 dict begin /SubstituteFont dup $error exch 2 copy known {get} {pop pop{pop/Courier}bind} ifelse def /currentdistillerparams where dup { pop pop currentdistillerparams/CannotEmbedFontPolicy 2 copy known {get/Error eq} {pop pop false} ifelse } if not { countdictstack array dictstack 0 get begin userdict begin $SubstituteFont begin /$str 128 string def /$fontpat 128 string def /$slen 0 def /$sname null def /$match false def /$fontname null def /$substituteFound false def /$inVMIndex null def /$doSmartSub true def /$depth 0 def /$fontname null def /$italicangle 26.5 def /$dstack null def /$Strategies 10 dict dup begin /$Type3Underprint { currentglobal exch false setglobal 11 dict begin /UseFont exch $WMode 0 ne { dup length dict copy dup/WMode $WMode put /UseFont exch definefont } if def /FontName $fontname dup type/stringtype eq{cvn}if def /FontType 3 def /FontMatrix[.001 0 0 .001 0 0]def /Encoding 256 array dup 0 1 255{/.notdef put dup}for pop def /FontBBox[0 0 0 0]def /CCInfo 7 dict dup begin /cc null def /x 0 def /y 0 def end def /BuildChar { exch begin CCInfo begin 1 string dup 0 3 index put exch pop /cc exch def UseFont 1000 scalefont setfont cc stringwidth/y exch def/x exch def x y setcharwidth $SubstituteFont/$Strategy get/$Underprint get exec 0 0 moveto cc show x y moveto end end }bind def currentdict end exch setglobal }bind def /$GetaTint 2 dict dup begin /$BuildFont { dup/WMode known {dup/WMode get} {0} ifelse /$WMode exch def $fontname exch dup/FontName known { dup/FontName get dup type/stringtype eq{cvn}if } {/unnamedfont} ifelse exch Adobe_CoolType_Data/InVMDeepCopiedFonts get 1 index/FontName get known { pop Adobe_CoolType_Data/InVMDeepCopiedFonts get 1 index get null copyfont } {$deepcopyfont} ifelse exch 1 index exch/FontBasedOn exch put dup/FontName $fontname dup type/stringtype eq{cvn}if put definefont Adobe_CoolType_Data/InVMDeepCopiedFonts get begin dup/FontBasedOn get 1 index def end }bind def /$Underprint { gsave x abs y abs gt {/y 1000 def} {/x -1000 def 500 120 translate} ifelse Level2? { [/Separation(All)/DeviceCMYK{0 0 0 1 pop}] setcolorspace } {0 setgray} ifelse 10 setlinewidth x .8 mul [7 3] { y mul 8 div 120 sub x 10 div exch moveto 0 y 4 div neg rlineto dup 0 rlineto 0 y 4 div rlineto closepath gsave Level2? {.2 setcolor} {.8 setgray} ifelse fill grestore stroke } forall pop grestore }bind def end def /$Oblique 1 dict dup begin /$BuildFont { currentglobal exch dup gcheck setglobal null copyfont begin /FontBasedOn currentdict/FontName known { FontName dup type/stringtype eq{cvn}if } {/unnamedfont} ifelse def /FontName $fontname dup type/stringtype eq{cvn}if def /currentdistillerparams where {pop} { /FontInfo currentdict/FontInfo known {FontInfo null copyfont} {2 dict} ifelse dup begin /ItalicAngle $italicangle def /FontMatrix FontMatrix [1 0 ItalicAngle dup sin exch cos div 1 0 0] matrix concatmatrix readonly end 4 2 roll def def } ifelse FontName currentdict end definefont exch setglobal }bind def end def /$None 1 dict dup begin /$BuildFont{}bind def end def end def /$Oblique SetSubstituteStrategy /$findfontByEnum { dup type/stringtype eq{cvn}if dup/$fontname exch def $sname null eq {$str cvs dup length $slen sub $slen getinterval} {pop $sname} ifelse $fontpat dup 0(fonts/*)putinterval exch 7 exch putinterval /$match false def $SubstituteFont/$dstack countdictstack array dictstack put mark { $fontpat 0 $slen 7 add getinterval {/$match exch def exit} $str filenameforall } stopped { cleardictstack currentdict true $SubstituteFont/$dstack get { exch { 1 index eq {pop false} {true} ifelse } {begin false} ifelse } forall pop } if cleartomark /$slen 0 def $match false ne {$match(fonts/)anchorsearch pop pop cvn} {/Courier} ifelse }bind def /$ROS 1 dict dup begin /Adobe 4 dict dup begin /Japan1 [/Ryumin-Light/HeiseiMin-W3 /GothicBBB-Medium/HeiseiKakuGo-W5 /HeiseiMaruGo-W4/Jun101-Light]def /Korea1 [/HYSMyeongJo-Medium/HYGoThic-Medium]def /GB1 [/STSong-Light/STHeiti-Regular]def /CNS1 [/MKai-Medium/MHei-Medium]def end def end def /$cmapname null def /$deepcopyfont { dup/FontType get 0 eq { 1 dict dup/FontName/copied put copyfont begin /FDepVector FDepVector copyarray 0 1 2 index length 1 sub { 2 copy get $deepcopyfont dup/FontName/copied put /copied exch definefont 3 copy put pop pop } for def currentdict end } {$Strategies/$Type3Underprint get exec} ifelse }bind def /$buildfontname { dup/CIDFont findresource/CIDSystemInfo get begin Registry length Ordering length Supplement 8 string cvs 3 copy length 2 add add add string dup 5 1 roll dup 0 Registry putinterval dup 4 index(-)putinterval dup 4 index 1 add Ordering putinterval 4 2 roll add 1 add 2 copy(-)putinterval end 1 add 2 copy 0 exch getinterval $cmapname $fontpat cvs exch anchorsearch {pop pop 3 2 roll putinterval cvn/$cmapname exch def} {pop pop pop pop pop} ifelse length $str 1 index(-)putinterval 1 add $str 1 index $cmapname $fontpat cvs putinterval $cmapname length add $str exch 0 exch getinterval cvn }bind def /$findfontByROS { /$fontname exch def $ROS Registry 2 copy known { get Ordering 2 copy known {get} {pop pop[]} ifelse } {pop pop[]} ifelse false exch { dup/CIDFont resourcestatus { pop pop save 1 index/CIDFont findresource dup/WidthsOnly known {dup/WidthsOnly get} {false} ifelse exch pop exch restore {pop} {exch pop true exit} ifelse } {pop} ifelse } forall {$str cvs $buildfontname} { false(*) { save exch dup/CIDFont findresource dup/WidthsOnly known {dup/WidthsOnly get not} {true} ifelse exch/CIDSystemInfo get dup/Registry get Registry eq exch/Ordering get Ordering eq and and {exch restore exch pop true exit} {pop restore} ifelse } $str/CIDFont resourceforall {$buildfontname} {$fontname $findfontByEnum} ifelse } ifelse }bind def end end currentdict/$error known currentdict/languagelevel known and dup {pop $error/SubstituteFont known} if dup {$error} {Adobe_CoolType_Core} ifelse begin { /SubstituteFont /CMap/Category resourcestatus { pop pop { $SubstituteFont begin /$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt and { $sname null eq {dup $str cvs dup length $slen sub $slen getinterval cvn} {$sname} ifelse Adobe_CoolType_Data/InVMFontsByCMap get 1 index 2 copy known { get false exch { pop currentglobal { GlobalFontDirectory 1 index known {exch pop true exit} {pop} ifelse } { FontDirectory 1 index known {exch pop true exit} { GlobalFontDirectory 1 index known {exch pop true exit} {pop} ifelse } ifelse } ifelse } forall } {pop pop false} ifelse { exch pop exch pop } { dup/CMap resourcestatus { pop pop dup/$cmapname exch def /CMap findresource/CIDSystemInfo get{def}forall $findfontByROS } { 128 string cvs dup(-)search { 3 1 roll search { 3 1 roll pop {dup cvi} stopped {pop pop pop pop pop $findfontByEnum} { 4 2 roll pop pop exch length exch 2 index length 2 index sub exch 1 sub -1 0 { $str cvs dup length 4 index 0 4 index 4 3 roll add getinterval exch 1 index exch 3 index exch putinterval dup/CMap resourcestatus { pop pop 4 1 roll pop pop pop dup/$cmapname exch def /CMap findresource/CIDSystemInfo get{def}forall $findfontByROS true exit } {pop} ifelse } for dup type/booleantype eq {pop} {pop pop pop $findfontByEnum} ifelse } ifelse } {pop pop pop $findfontByEnum} ifelse } {pop pop $findfontByEnum} ifelse } ifelse } ifelse } {//SubstituteFont exec} ifelse /$slen 0 def end } } { { $SubstituteFont begin /$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt and {$findfontByEnum} {//SubstituteFont exec} ifelse end } } ifelse bind readonly def Adobe_CoolType_Core/scfindfont/systemfindfont load put } { /scfindfont { $SubstituteFont begin dup systemfindfont dup/FontName known {dup/FontName get dup 3 index ne} {/noname true} ifelse dup { /$origfontnamefound 2 index def /$origfontname 4 index def/$substituteFound true def } if exch pop { $slen 0 gt $sname null ne 3 index length $slen gt or and { pop dup $findfontByEnum findfont dup maxlength 1 add dict begin {1 index/FID eq{pop pop}{def}ifelse} forall currentdict end definefont dup/FontName known{dup/FontName get}{null}ifelse $origfontnamefound ne { $origfontname $str cvs print ( substitution revised, using )print dup/FontName known {dup/FontName get}{(unspecified font)} ifelse $str cvs print(.\n)print } if } {exch pop} ifelse } {exch pop} ifelse end }bind def } ifelse end end Adobe_CoolType_Core_Defined not { Adobe_CoolType_Core/findfont { $SubstituteFont begin $depth 0 eq { /$fontname 1 index dup type/stringtype ne{$str cvs}if def /$substituteFound false def } if /$depth $depth 1 add def end scfindfont $SubstituteFont begin /$depth $depth 1 sub def $substituteFound $depth 0 eq and { $inVMIndex null ne {dup $inVMIndex $AddInVMFont} if $doSmartSub { currentdict/$Strategy known {$Strategy/$BuildFont get exec} if } if } if end }bind put } if } if end /$AddInVMFont { exch/FontName 2 copy known { get 1 dict dup begin exch 1 index gcheck def end exch Adobe_CoolType_Data/InVMFontsByCMap get exch $DictAdd } {pop pop pop} ifelse }bind def /$DictAdd { 2 copy known not {2 copy 4 index length dict put} if Level2? not { 2 copy get dup maxlength exch length 4 index length add lt 2 copy get dup length 4 index length add exch maxlength 1 index lt { 2 mul dict begin 2 copy get{forall}def 2 copy currentdict put end } {pop} ifelse } if get begin {def} forall end }bind def end end %%EndResource currentglobal true setglobal %%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.23 0 %%Copyright: Copyright 1987-2006 Adobe Systems Incorporated. %%Version: 1.23 0 systemdict/languagelevel known dup {currentglobal false setglobal} {false} ifelse exch userdict/Adobe_CoolType_Utility 2 copy known {2 copy get dup maxlength 27 add dict copy} {27 dict} ifelse put Adobe_CoolType_Utility begin /@eexecStartData <BAB431EA07F209EB8C4348311481D9D3F76E3D15246555577D87BC510ED54E 118C39697FA9F6DB58128E60EB8A12FA24D7CDD2FA94D221FA9EC8DA3E5E6A1C 4ACECC8C2D39C54E7C946031DD156C3A6B4A09AD29E1867A>def /@recognizeCIDFont null def /ct_Level2? exch def /ct_Clone? 1183615869 internaldict dup /CCRun known not exch/eCCRun known not ct_Level2? and or def ct_Level2? {globaldict begin currentglobal true setglobal} if /ct_AddStdCIDMap ct_Level2? {{ mark Adobe_CoolType_Utility/@recognizeCIDFont currentdict put { ((Hex)57 StartData 0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0 7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60 d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8 cc36 74f4 1144 b13b 77)0()/SubFileDecode filter cvx exec } stopped { cleartomark Adobe_CoolType_Utility/@recognizeCIDFont get countdictstack dup array dictstack exch 1 sub -1 0 { 2 copy get 3 index eq {1 index length exch sub 1 sub{end}repeat exit} {pop} ifelse } for pop pop Adobe_CoolType_Utility/@eexecStartData get eexec } {cleartomark} ifelse }} {{ Adobe_CoolType_Utility/@eexecStartData get eexec }} ifelse bind def userdict/cid_extensions known dup{cid_extensions/cid_UpdateDB known and}if { cid_extensions begin /cid_GetCIDSystemInfo { 1 index type/stringtype eq {exch cvn exch} if cid_extensions begin dup load 2 index known { 2 copy cid_GetStatusInfo dup null ne { 1 index load 3 index get dup null eq {pop pop cid_UpdateDB} { exch 1 index/Created get eq {exch pop exch pop} {pop cid_UpdateDB} ifelse } ifelse } {pop cid_UpdateDB} ifelse } {cid_UpdateDB} ifelse end }bind def end } if ct_Level2? {end setglobal} if /ct_UseNativeCapability? systemdict/composefont known def /ct_MakeOCF 35 dict def /ct_Vars 25 dict def /ct_GlyphDirProcs 6 dict def /ct_BuildCharDict 15 dict dup begin /charcode 2 string def /dst_string 1500 string def /nullstring()def /usewidths? true def end def ct_Level2?{setglobal}{pop}ifelse ct_GlyphDirProcs begin /GetGlyphDirectory { systemdict/languagelevel known {pop/CIDFont findresource/GlyphDirectory get} { 1 index/CIDFont findresource/GlyphDirectory get dup type/dicttype eq { dup dup maxlength exch length sub 2 index lt { dup length 2 index add dict copy 2 index /CIDFont findresource/GlyphDirectory 2 index put } if } if exch pop exch pop } ifelse + }def /+ { systemdict/languagelevel known { currentglobal false setglobal 3 dict begin /vm exch def } {1 dict begin} ifelse /$ exch def systemdict/languagelevel known { vm setglobal /gvm currentglobal def $ gcheck setglobal } if ?{$ begin}if }def /?{$ type/dicttype eq}def /|{ userdict/Adobe_CoolType_Data known { Adobe_CoolType_Data/AddWidths? known { currentdict Adobe_CoolType_Data begin begin AddWidths? { Adobe_CoolType_Data/CC 3 index put ?{def}{$ 3 1 roll put}ifelse CC charcode exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore currentfont/Widths get exch CC exch put } {?{def}{$ 3 1 roll put}ifelse} ifelse end end } {?{def}{$ 3 1 roll put}ifelse} ifelse } {?{def}{$ 3 1 roll put}ifelse} ifelse }def /! { ?{end}if systemdict/languagelevel known {gvm setglobal} if end }def /:{string currentfile exch readstring pop}executeonly def end ct_MakeOCF begin /ct_cHexEncoding [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def /ct_CID_STR_SIZE 8000 def /ct_mkocfStr100 100 string def /ct_defaultFontMtx[.001 0 0 .001 0 0]def /ct_1000Mtx[1000 0 0 1000 0 0]def /ct_raise{exch cvx exch errordict exch get exec stop}bind def /ct_reraise {cvx $error/errorname get(Error: )print dup( )cvs print errordict exch get exec stop }bind def /ct_cvnsi { 1 index add 1 sub 1 exch 0 4 1 roll { 2 index exch get exch 8 bitshift add } for exch pop }bind def /ct_GetInterval { Adobe_CoolType_Utility/ct_BuildCharDict get begin /dst_index 0 def dup dst_string length gt {dup string/dst_string exch def} if 1 index ct_CID_STR_SIZE idiv /arrayIndex exch def 2 index arrayIndex get 2 index arrayIndex ct_CID_STR_SIZE mul sub { dup 3 index add 2 index length le { 2 index getinterval dst_string dst_index 2 index putinterval length dst_index add/dst_index exch def exit } { 1 index length 1 index sub dup 4 1 roll getinterval dst_string dst_index 2 index putinterval pop dup dst_index add/dst_index exch def sub /arrayIndex arrayIndex 1 add def 2 index dup length arrayIndex gt {arrayIndex get} { pop exit } ifelse 0 } ifelse } loop pop pop pop dst_string 0 dst_index getinterval end }bind def ct_Level2? { /ct_resourcestatus currentglobal mark true setglobal {/unknowninstancename/Category resourcestatus} stopped {cleartomark setglobal true} {cleartomark currentglobal not exch setglobal} ifelse { { mark 3 1 roll/Category findresource begin ct_Vars/vm currentglobal put ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec {cleartomark false} {{3 2 roll pop true}{cleartomark false}ifelse} ifelse ct_Vars/vm get setglobal end } } {{resourcestatus}} ifelse bind def /CIDFont/Category ct_resourcestatus {pop pop} { currentglobal true setglobal /Generic/Category findresource dup length dict copy dup/InstanceType/dicttype put /CIDFont exch/Category defineresource pop setglobal } ifelse ct_UseNativeCapability? { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering(Identity)def /Supplement 0 def end def /CMapName/Identity-H def /CMapVersion 1.000 def /CMapType 1 def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } if } { /ct_Category 2 dict begin /CIDFont 10 dict def /ProcSet 2 dict def currentdict end def /defineresource { ct_Category 1 index 2 copy known { get dup dup maxlength exch length eq { dup length 10 add dict copy ct_Category 2 index 2 index put } if 3 index 3 index put pop exch pop } {pop pop/defineresource/undefined ct_raise} ifelse }bind def /findresource { ct_Category 1 index 2 copy known { get 2 index 2 copy known {get 3 1 roll pop pop} {pop pop/findresource/undefinedresource ct_raise} ifelse } {pop pop/findresource/undefined ct_raise} ifelse }bind def /resourcestatus { ct_Category 1 index 2 copy known { get 2 index known exch pop exch pop { 0 -1 true } { false } ifelse } {pop pop/findresource/undefined ct_raise} ifelse }bind def /ct_resourcestatus/resourcestatus load def } ifelse /ct_CIDInit 2 dict begin /ct_cidfont_stream_init { { dup(Binary)eq { pop null currentfile ct_Level2? { {cid_BYTE_COUNT()/SubFileDecode filter} stopped {pop pop pop} if } if /readstring load exit } if dup(Hex)eq { pop currentfile ct_Level2? { {null exch/ASCIIHexDecode filter/readstring} stopped {pop exch pop(>)exch/readhexstring} if } {(>)exch/readhexstring} ifelse load exit } if /StartData/typecheck ct_raise } loop cid_BYTE_COUNT ct_CID_STR_SIZE le { 2 copy cid_BYTE_COUNT string exch exec pop 1 array dup 3 -1 roll 0 exch put } { cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi dup array exch 2 sub 0 exch 1 exch { 2 copy 5 index ct_CID_STR_SIZE string 6 index exec pop put pop } for 2 index cid_BYTE_COUNT ct_CID_STR_SIZE mod string 3 index exec pop 1 index exch 1 index length 1 sub exch put } ifelse cid_CIDFONT exch/GlyphData exch put 2 index null eq { pop pop pop } { pop/readstring load 1 string exch { 3 copy exec pop dup length 0 eq { pop pop pop pop pop true exit } if 4 index eq { pop pop pop pop false exit } if } loop pop } ifelse }bind def /StartData { mark { currentdict dup/FDArray get 0 get/FontMatrix get 0 get 0.001 eq { dup/CDevProc known not { /CDevProc 1183615869 internaldict/stdCDevProc 2 copy known {get} { pop pop {pop pop pop pop pop 0 -1000 7 index 2 div 880} } ifelse def } if } { /CDevProc { pop pop pop pop pop 0 1 cid_temp/cid_CIDFONT get /FDArray get 0 get /FontMatrix get 0 get div 7 index 2 div 1 index 0.88 mul }def } ifelse /cid_temp 15 dict def cid_temp begin /cid_CIDFONT exch def 3 copy pop dup/cid_BYTE_COUNT exch def 0 gt { ct_cidfont_stream_init FDArray { /Private get dup/SubrMapOffset known { begin /Subrs SubrCount array def Subrs SubrMapOffset SubrCount SDBytes ct_Level2? { currentdict dup/SubrMapOffset undef dup/SubrCount undef /SDBytes undef } if end /cid_SD_BYTES exch def /cid_SUBR_COUNT exch def /cid_SUBR_MAP_OFFSET exch def /cid_SUBRS exch def cid_SUBR_COUNT 0 gt { GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi 0 1 cid_SUBR_COUNT 1 sub { exch 1 index 1 add cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add GlyphData exch cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi cid_SUBRS 4 2 roll GlyphData exch 4 index 1 index sub ct_GetInterval dup length string copy put } for pop } if } {pop} ifelse } forall } if cleartomark pop pop end CIDFontName currentdict/CIDFont defineresource pop end end } stopped {cleartomark/StartData ct_reraise} if }bind def currentdict end def /ct_saveCIDInit { /CIDInit/ProcSet ct_resourcestatus {true} {/CIDInitC/ProcSet ct_resourcestatus} ifelse { pop pop /CIDInit/ProcSet findresource ct_UseNativeCapability? {pop null} {/CIDInit ct_CIDInit/ProcSet defineresource pop} ifelse } {/CIDInit ct_CIDInit/ProcSet defineresource pop null} ifelse ct_Vars exch/ct_oldCIDInit exch put }bind def /ct_restoreCIDInit { ct_Vars/ct_oldCIDInit get dup null ne {/CIDInit exch/ProcSet defineresource pop} {pop} ifelse }bind def /ct_BuildCharSetUp { 1 index begin CIDFont begin Adobe_CoolType_Utility/ct_BuildCharDict get begin /ct_dfCharCode exch def /ct_dfDict exch def CIDFirstByte ct_dfCharCode add dup CIDCount ge {pop 0} if /cid exch def { GlyphDirectory cid 2 copy known {get} {pop pop nullstring} ifelse dup length FDBytes sub 0 gt { dup FDBytes 0 ne {0 FDBytes ct_cvnsi} {pop 0} ifelse /fdIndex exch def dup length FDBytes sub FDBytes exch getinterval /charstring exch def exit } { pop cid 0 eq {/charstring nullstring def exit} if /cid 0 def } ifelse } loop }def /ct_SetCacheDevice { 0 0 moveto dup stringwidth 3 -1 roll true charpath pathbbox 0 -1000 7 index 2 div 880 setcachedevice2 0 0 moveto }def /ct_CloneSetCacheProc { 1 eq { stringwidth pop -2 div -880 0 -1000 setcharwidth moveto } { usewidths? { currentfont/Widths get cid 2 copy known {get exch pop aload pop} {pop pop stringwidth} ifelse } {stringwidth} ifelse setcharwidth 0 0 moveto } ifelse }def /ct_Type3ShowCharString { ct_FDDict fdIndex 2 copy known {get} { currentglobal 3 1 roll 1 index gcheck setglobal ct_Type1FontTemplate dup maxlength dict copy begin FDArray fdIndex get dup/FontMatrix 2 copy known {get} {pop pop ct_defaultFontMtx} ifelse /FontMatrix exch dup length array copy def /Private get /Private exch def /Widths rootfont/Widths get def /CharStrings 1 dict dup/.notdef <d841272cf18f54fc13>dup length string copy put def currentdict end /ct_Type1Font exch definefont dup 5 1 roll put setglobal } ifelse dup/CharStrings get 1 index/Encoding get ct_dfCharCode get charstring put rootfont/WMode 2 copy known {get} {pop pop 0} ifelse exch 1000 scalefont setfont ct_str1 0 ct_dfCharCode put ct_str1 exch ct_dfSetCacheProc ct_SyntheticBold { currentpoint ct_str1 show newpath moveto ct_str1 true charpath ct_StrokeWidth setlinewidth stroke } {ct_str1 show} ifelse }def /ct_Type4ShowCharString { ct_dfDict ct_dfCharCode charstring FDArray fdIndex get dup/FontMatrix get dup ct_defaultFontMtx ct_matrixeq not {ct_1000Mtx matrix concatmatrix concat} {pop} ifelse /Private get Adobe_CoolType_Utility/ct_Level2? get not { ct_dfDict/Private 3 -1 roll {put} 1183615869 internaldict/superexec get exec } if 1183615869 internaldict Adobe_CoolType_Utility/ct_Level2? get {1 index} {3 index/Private get mark 6 1 roll} ifelse dup/RunInt known {/RunInt get} {pop/CCRun} ifelse get exec Adobe_CoolType_Utility/ct_Level2? get not {cleartomark} if }bind def /ct_BuildCharIncremental { { Adobe_CoolType_Utility/ct_MakeOCF get begin ct_BuildCharSetUp ct_ShowCharString } stopped {stop} if end end end end }bind def /BaseFontNameStr(BF00)def /ct_Type1FontTemplate 14 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0]def /FontBBox [-250 -250 1250 1250]def /Encoding ct_cHexEncoding def /PaintType 0 def currentdict end def /BaseFontTemplate 11 dict begin /FontMatrix [0.001 0 0 0.001 0 0]def /FontBBox [-250 -250 1250 1250]def /Encoding ct_cHexEncoding def /BuildChar/ct_BuildCharIncremental load def ct_Clone? { /FontType 3 def /ct_ShowCharString/ct_Type3ShowCharString load def /ct_dfSetCacheProc/ct_CloneSetCacheProc load def /ct_SyntheticBold false def /ct_StrokeWidth 1 def } { /FontType 4 def /Private 1 dict dup/lenIV 4 put def /CharStrings 1 dict dup/.notdef<d841272cf18f54fc13>put def /PaintType 0 def /ct_ShowCharString/ct_Type4ShowCharString load def } ifelse /ct_str1 1 string def currentdict end def /BaseFontDictSize BaseFontTemplate length 5 add def /ct_matrixeq { true 0 1 5 { dup 4 index exch get exch 3 index exch get eq and dup not {exit} if } for exch pop exch pop }bind def /ct_makeocf { 15 dict begin exch/WMode exch def exch/FontName exch def /FontType 0 def /FMapType 2 def dup/FontMatrix known {dup/FontMatrix get/FontMatrix exch def} {/FontMatrix matrix def} ifelse /bfCount 1 index/CIDCount get 256 idiv 1 add dup 256 gt{pop 256}if def /Encoding 256 array 0 1 bfCount 1 sub{2 copy dup put pop}for bfCount 1 255{2 copy bfCount put pop}for def /FDepVector bfCount dup 256 lt{1 add}if array def BaseFontTemplate BaseFontDictSize dict copy begin /CIDFont exch def CIDFont/FontBBox known {CIDFont/FontBBox get/FontBBox exch def} if CIDFont/CDevProc known {CIDFont/CDevProc get/CDevProc exch def} if currentdict end BaseFontNameStr 3(0)putinterval 0 1 bfCount dup 256 eq{1 sub}if { FDepVector exch 2 index BaseFontDictSize dict copy begin dup/CIDFirstByte exch 256 mul def FontType 3 eq {/ct_FDDict 2 dict def} if currentdict end 1 index 16 BaseFontNameStr 2 2 getinterval cvrs pop BaseFontNameStr exch definefont put } for ct_Clone? {/Widths 1 index/CIDFont get/GlyphDirectory get length dict def} if FontName currentdict end definefont ct_Clone? { gsave dup 1000 scalefont setfont ct_BuildCharDict begin /usewidths? false def currentfont/Widths get begin exch/CIDFont get/GlyphDirectory get { pop dup charcode exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore def } forall end /usewidths? true def end grestore } {exch pop} ifelse }bind def currentglobal true setglobal /ct_ComposeFont { ct_UseNativeCapability? { 2 index/CMap ct_resourcestatus {pop pop exch pop} { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CMapName 3 index def /CMapVersion 1.000 def /CMapType 1 def exch/WMode exch def /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering CMapName ct_mkocfStr100 cvs (Adobe-)search { pop pop (-)search { dup length string copy exch pop exch pop } {pop(Identity)} ifelse } {pop (Identity)} ifelse def /Supplement 0 def end def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse composefont } { 3 2 roll pop 0 get/CIDFont findresource ct_makeocf } ifelse }bind def setglobal /ct_MakeIdentity { ct_UseNativeCapability? { 1 index/CMap ct_resourcestatus {pop pop} { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CMapName 2 index def /CMapVersion 1.000 def /CMapType 1 def /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering CMapName ct_mkocfStr100 cvs (Adobe-)search { pop pop (-)search {dup length string copy exch pop exch pop} {pop(Identity)} ifelse } {pop(Identity)} ifelse def /Supplement 0 def end def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse composefont } { exch pop 0 get/CIDFont findresource ct_makeocf } ifelse }bind def currentdict readonly pop end end %%EndResource setglobal %%BeginResource: procset Adobe_CoolType_Utility_T42 1.0 0 %%Copyright: Copyright 1987-2004 Adobe Systems Incorporated. %%Version: 1.0 0 userdict/ct_T42Dict 15 dict put ct_T42Dict begin /Is2015? { version cvi 2015 ge }bind def /AllocGlyphStorage { Is2015? { pop } { {string}forall }ifelse }bind def /Type42DictBegin { 25 dict begin /FontName exch def /CharStrings 256 dict begin /.notdef 0 def currentdict end def /Encoding exch def /PaintType 0 def /FontType 42 def /FontMatrix[1 0 0 1 0 0]def 4 array astore cvx/FontBBox exch def /sfnts }bind def /Type42DictEnd { currentdict dup/FontName get exch definefont end ct_T42Dict exch dup/FontName get exch put }bind def /RD{string currentfile exch readstring pop}executeonly def /PrepFor2015 { Is2015? { /GlyphDirectory 16 dict def sfnts 0 get dup 2 index (glyx) putinterval 2 index (locx) putinterval pop pop } { pop pop }ifelse }bind def /AddT42Char { Is2015? { /GlyphDirectory get begin def end pop pop } { /sfnts get 4 index get 3 index 2 index putinterval pop pop pop pop }ifelse }bind def /T0AddT42Mtx2 { /CIDFont findresource/Metrics2 get begin def end }bind def end %%EndResource currentglobal true setglobal %%BeginFile: MMFauxFont.prc %%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. %%All Rights Reserved. userdict /ct_EuroDict 10 dict put ct_EuroDict begin /ct_CopyFont { { 1 index /FID ne {def} {pop pop} ifelse} forall } def /ct_GetGlyphOutline { gsave initmatrix newpath exch findfont dup length 1 add dict begin ct_CopyFont /Encoding Encoding dup length array copy dup 4 -1 roll 0 exch put def currentdict end /ct_EuroFont exch definefont 1000 scalefont setfont 0 0 moveto [ <00> stringwidth <00> false charpath pathbbox [ {/m cvx} {/l cvx} {/c cvx} {/cp cvx} pathforall grestore counttomark 8 add } def /ct_MakeGlyphProc { ] cvx /ct_PSBuildGlyph cvx ] cvx } def /ct_PSBuildGlyph { gsave 8 -1 roll pop 7 1 roll 6 -2 roll ct_FontMatrix transform 6 2 roll 4 -2 roll ct_FontMatrix transform 4 2 roll ct_FontMatrix transform currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse dup 9 1 roll { currentdict /StrokeWidth 2 copy known { get 2 div 0 ct_FontMatrix dtransform pop 5 1 roll 4 -1 roll 4 index sub 4 1 roll 3 -1 roll 4 index sub 3 1 roll exch 4 index add exch 4 index add 5 -1 roll pop } { pop pop } ifelse } if setcachedevice ct_FontMatrix concat ct_PSPathOps begin exec end { currentdict /StrokeWidth 2 copy known { get } { pop pop 0 } ifelse setlinewidth stroke } { fill } ifelse grestore } def /ct_PSPathOps 4 dict dup begin /m {moveto} def /l {lineto} def /c {curveto} def /cp {closepath} def end def /ct_matrix1000 [1000 0 0 1000 0 0] def /ct_AddGlyphProc { 2 index findfont dup length 4 add dict begin ct_CopyFont /CharStrings CharStrings dup length 1 add dict copy begin 3 1 roll def currentdict end def /ct_FontMatrix ct_matrix1000 FontMatrix matrix concatmatrix def /ct_PSBuildGlyph /ct_PSBuildGlyph load def /ct_PSPathOps /ct_PSPathOps load def currentdict end definefont pop } def systemdict /languagelevel known { /ct_AddGlyphToPrinterFont { 2 copy ct_GetGlyphOutline 3 add -1 roll restore ct_MakeGlyphProc ct_AddGlyphProc } def } { /ct_AddGlyphToPrinterFont { pop pop restore Adobe_CTFauxDict /$$$FONTNAME get /Euro Adobe_CTFauxDict /$$$SUBSTITUTEBASE get ct_EuroDict exch get ct_AddGlyphProc } def } ifelse /AdobeSansMM { 556 0 24 -19 541 703 { 541 628 m 510 669 442 703 354 703 c 201 703 117 607 101 444 c 50 444 l 25 372 l 97 372 l 97 301 l 49 301 l 24 229 l 103 229 l 124 67 209 -19 350 -19 c 435 -19 501 25 509 32 c 509 131 l 492 105 417 60 343 60 c 267 60 204 127 197 229 c 406 229 l 430 301 l 191 301 l 191 372 l 455 372 l 479 444 l 194 444 l 201 531 245 624 348 624 c 433 624 484 583 509 534 c cp 556 0 m } ct_PSBuildGlyph } def /AdobeSerifMM { 500 0 10 -12 484 692 { 347 298 m 171 298 l 170 310 170 322 170 335 c 170 362 l 362 362 l 374 403 l 172 403 l 184 580 244 642 308 642 c 380 642 434 574 457 457 c 481 462 l 474 691 l 449 691 l 433 670 429 657 410 657 c 394 657 360 692 299 692 c 204 692 94 604 73 403 c 22 403 l 10 362 l 70 362 l 69 352 69 341 69 330 c 69 319 69 308 70 298 c 22 298 l 10 257 l 73 257 l 97 57 216 -12 295 -12 c 364 -12 427 25 484 123 c 458 142 l 425 101 384 37 316 37 c 256 37 189 84 173 257 c 335 257 l cp 500 0 m } ct_PSBuildGlyph } def end %%EndFile setglobal Adobe_CoolType_Core begin /$Oblique SetSubstituteStrategy end %%BeginResource: procset Adobe_AGM_Image 1.0 0 +%%BeginResource: procset Adobe_CoolType_Core 2.31 0 %%Copyright: Copyright 1997-2006 Adobe Systems Incorporated. All Rights Reserved. %%Version: 2.31 0 10 dict begin /Adobe_CoolType_Passthru currentdict def /Adobe_CoolType_Core_Defined userdict/Adobe_CoolType_Core known def Adobe_CoolType_Core_Defined {/Adobe_CoolType_Core userdict/Adobe_CoolType_Core get def} if userdict/Adobe_CoolType_Core 70 dict dup begin put /Adobe_CoolType_Version 2.31 def /Level2? systemdict/languagelevel known dup {pop systemdict/languagelevel get 2 ge} if def Level2? not { /currentglobal false def /setglobal/pop load def /gcheck{pop false}bind def /currentpacking false def /setpacking/pop load def /SharedFontDirectory 0 dict def } if currentpacking true setpacking currentglobal false setglobal userdict/Adobe_CoolType_Data 2 copy known not {2 copy 10 dict put} if get begin /@opStackCountByLevel 32 dict def /@opStackLevel 0 def /@dictStackCountByLevel 32 dict def /@dictStackLevel 0 def end setglobal currentglobal true setglobal userdict/Adobe_CoolType_GVMFonts known not {userdict/Adobe_CoolType_GVMFonts 10 dict put} if setglobal currentglobal false setglobal userdict/Adobe_CoolType_LVMFonts known not {userdict/Adobe_CoolType_LVMFonts 10 dict put} if setglobal /ct_VMDictPut { dup gcheck{Adobe_CoolType_GVMFonts}{Adobe_CoolType_LVMFonts}ifelse 3 1 roll put }bind def /ct_VMDictUndef { dup Adobe_CoolType_GVMFonts exch known {Adobe_CoolType_GVMFonts exch undef} { dup Adobe_CoolType_LVMFonts exch known {Adobe_CoolType_LVMFonts exch undef} {pop} ifelse }ifelse }bind def /ct_str1 1 string def /ct_xshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { _ct_x _ct_y moveto 0 rmoveto } ifelse /_ct_i _ct_i 1 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /ct_yshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { _ct_x _ct_y moveto 0 exch rmoveto } ifelse /_ct_i _ct_i 1 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /ct_xyshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { {_ct_na _ct_i 1 add get}stopped {pop pop pop} { _ct_x _ct_y moveto rmoveto } ifelse } ifelse /_ct_i _ct_i 2 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /xsh{{@xshow}stopped{Adobe_CoolType_Data begin ct_xshow end}if}bind def /ysh{{@yshow}stopped{Adobe_CoolType_Data begin ct_yshow end}if}bind def /xysh{{@xyshow}stopped{Adobe_CoolType_Data begin ct_xyshow end}if}bind def currentglobal true setglobal /ct_T3Defs { /BuildChar { 1 index/Encoding get exch get 1 index/BuildGlyph get exec }bind def /BuildGlyph { exch begin GlyphProcs exch get exec end }bind def }bind def setglobal /@_SaveStackLevels { Adobe_CoolType_Data begin /@vmState currentglobal def false setglobal @opStackCountByLevel @opStackLevel 2 copy known not { 2 copy 3 dict dup/args 7 index 5 add array put put get } { get dup/args get dup length 3 index lt { dup length 5 add array exch 1 index exch 0 exch putinterval 1 index exch/args exch put } {pop} ifelse } ifelse begin count 1 sub 1 index lt {pop count} if dup/argCount exch def dup 0 gt { args exch 0 exch getinterval astore pop } {pop} ifelse count /restCount exch def end /@opStackLevel @opStackLevel 1 add def countdictstack 1 sub @dictStackCountByLevel exch @dictStackLevel exch put /@dictStackLevel @dictStackLevel 1 add def @vmState setglobal end }bind def /@_RestoreStackLevels { Adobe_CoolType_Data begin /@opStackLevel @opStackLevel 1 sub def @opStackCountByLevel @opStackLevel get begin count restCount sub dup 0 gt {{pop}repeat} {pop} ifelse args 0 argCount getinterval{}forall end /@dictStackLevel @dictStackLevel 1 sub def @dictStackCountByLevel @dictStackLevel get end countdictstack exch sub dup 0 gt {{end}repeat} {pop} ifelse }bind def /@_PopStackLevels { Adobe_CoolType_Data begin /@opStackLevel @opStackLevel 1 sub def /@dictStackLevel @dictStackLevel 1 sub def end }bind def /@Raise { exch cvx exch errordict exch get exec stop }bind def /@ReRaise { cvx $error/errorname get errordict exch get exec stop }bind def /@Stopped { 0 @#Stopped }bind def /@#Stopped { @_SaveStackLevels stopped {@_RestoreStackLevels true} {@_PopStackLevels false} ifelse }bind def /@Arg { Adobe_CoolType_Data begin @opStackCountByLevel @opStackLevel 1 sub get begin args exch argCount 1 sub exch sub get end end }bind def currentglobal true setglobal /CTHasResourceForAllBug Level2? { 1 dict dup /@shouldNotDisappearDictValue true def Adobe_CoolType_Data exch/@shouldNotDisappearDict exch put begin count @_SaveStackLevels {(*){pop stop}128 string/Category resourceforall} stopped pop @_RestoreStackLevels currentdict Adobe_CoolType_Data/@shouldNotDisappearDict get dup 3 1 roll ne dup 3 1 roll { /@shouldNotDisappearDictValue known { { end currentdict 1 index eq {pop exit} if } loop } if } { pop end } ifelse } {false} ifelse def true setglobal /CTHasResourceStatusBug Level2? { mark {/steveamerige/Category resourcestatus} stopped {cleartomark true} {cleartomark currentglobal not} ifelse } {false} ifelse def setglobal /CTResourceStatus { mark 3 1 roll /Category findresource begin ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec {cleartomark false} {{3 2 roll pop true}{cleartomark false}ifelse} ifelse end }bind def /CTWorkAroundBugs { Level2? { /cid_PreLoad/ProcSet resourcestatus { pop pop currentglobal mark { (*) { dup/CMap CTHasResourceStatusBug {CTResourceStatus} {resourcestatus} ifelse { pop dup 0 eq exch 1 eq or { dup/CMap findresource gcheck setglobal /CMap undefineresource } { pop CTHasResourceForAllBug {exit} {stop} ifelse } ifelse } {pop} ifelse } 128 string/CMap resourceforall } stopped {cleartomark} stopped pop setglobal } if } if }bind def /ds { Adobe_CoolType_Core begin CTWorkAroundBugs /mo/moveto load def /nf/newencodedfont load def /msf{makefont setfont}bind def /uf{dup undefinefont ct_VMDictUndef}bind def /ur/undefineresource load def /chp/charpath load def /awsh/awidthshow load def /wsh/widthshow load def /ash/ashow load def /@xshow/xshow load def /@yshow/yshow load def /@xyshow/xyshow load def /@cshow/cshow load def /sh/show load def /rp/repeat load def /.n/.notdef def end currentglobal false setglobal userdict/Adobe_CoolType_Data 2 copy known not {2 copy 10 dict put} if get begin /AddWidths? false def /CC 0 def /charcode 2 string def /@opStackCountByLevel 32 dict def /@opStackLevel 0 def /@dictStackCountByLevel 32 dict def /@dictStackLevel 0 def /InVMFontsByCMap 10 dict def /InVMDeepCopiedFonts 10 dict def end setglobal }bind def /dt { currentdict Adobe_CoolType_Core eq {end} if }bind def /ps { Adobe_CoolType_Core begin Adobe_CoolType_GVMFonts begin Adobe_CoolType_LVMFonts begin SharedFontDirectory begin }bind def /pt { end end end end }bind def /unload { systemdict/languagelevel known { systemdict/languagelevel get 2 ge { userdict/Adobe_CoolType_Core 2 copy known {undef} {pop pop} ifelse } if } if }bind def /ndf { 1 index where {pop pop pop} {dup xcheck{bind}if def} ifelse }def /findfont systemdict begin userdict begin /globaldict where{/globaldict get begin}if dup where pop exch get /globaldict where{pop end}if end end Adobe_CoolType_Core_Defined {/systemfindfont exch def} { /findfont 1 index def /systemfindfont exch def } ifelse /undefinefont {pop}ndf /copyfont { currentglobal 3 1 roll 1 index gcheck setglobal dup null eq{0}{dup length}ifelse 2 index length add 1 add dict begin exch { 1 index/FID eq {pop pop} {def} ifelse } forall dup null eq {pop} {{def}forall} ifelse currentdict end exch setglobal }bind def /copyarray { currentglobal exch dup gcheck setglobal dup length array copy exch setglobal }bind def /newencodedfont { currentglobal { SharedFontDirectory 3 index known {SharedFontDirectory 3 index get/FontReferenced known} {false} ifelse } { FontDirectory 3 index known {FontDirectory 3 index get/FontReferenced known} { SharedFontDirectory 3 index known {SharedFontDirectory 3 index get/FontReferenced known} {false} ifelse } ifelse } ifelse dup { 3 index findfont/FontReferenced get 2 index dup type/nametype eq {findfont} if ne {pop false} if } if dup { 1 index dup type/nametype eq {findfont} if dup/CharStrings known { /CharStrings get length 4 index findfont/CharStrings get length ne { pop false } if } {pop} ifelse } if { pop 1 index findfont /Encoding get exch 0 1 255 {2 copy get 3 index 3 1 roll put} for pop pop pop } { currentglobal 4 1 roll dup type/nametype eq {findfont} if dup gcheck setglobal dup dup maxlength 2 add dict begin exch { 1 index/FID ne 2 index/Encoding ne and {def} {pop pop} ifelse } forall /FontReferenced exch def /Encoding exch dup length array copy def /FontName 1 index dup type/stringtype eq{cvn}if def dup currentdict end definefont ct_VMDictPut setglobal } ifelse }bind def /SetSubstituteStrategy { $SubstituteFont begin dup type/dicttype ne {0 dict} if currentdict/$Strategies known { exch $Strategies exch 2 copy known { get 2 copy maxlength exch maxlength add dict begin {def}forall {def}forall currentdict dup/$Init known {dup/$Init get exec} if end /$Strategy exch def } {pop pop pop} ifelse } {pop pop} ifelse end }bind def /scff { $SubstituteFont begin dup type/stringtype eq {dup length exch} {null} ifelse /$sname exch def /$slen exch def /$inVMIndex $sname null eq { 1 index $str cvs dup length $slen sub $slen getinterval cvn } {$sname} ifelse def end {findfont} @Stopped { dup length 8 add string exch 1 index 0(BadFont:)putinterval 1 index exch 8 exch dup length string cvs putinterval cvn {findfont} @Stopped {pop/Courier findfont} if } if $SubstituteFont begin /$sname null def /$slen 0 def /$inVMIndex null def end }bind def /isWidthsOnlyFont { dup/WidthsOnly known {pop pop true} { dup/FDepVector known {/FDepVector get{isWidthsOnlyFont dup{exit}if}forall} { dup/FDArray known {/FDArray get{isWidthsOnlyFont dup{exit}if}forall} {pop} ifelse } ifelse } ifelse }bind def /ct_StyleDicts 4 dict dup begin /Adobe-Japan1 4 dict dup begin Level2? { /Serif /HeiseiMin-W3-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiMin-W3} { /CIDFont/Category resourcestatus { pop pop /HeiseiMin-W3/CIDFont resourcestatus {pop pop/HeiseiMin-W3} {/Ryumin-Light} ifelse } {/Ryumin-Light} ifelse } ifelse def /SansSerif /HeiseiKakuGo-W5-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiKakuGo-W5} { /CIDFont/Category resourcestatus { pop pop /HeiseiKakuGo-W5/CIDFont resourcestatus {pop pop/HeiseiKakuGo-W5} {/GothicBBB-Medium} ifelse } {/GothicBBB-Medium} ifelse } ifelse def /HeiseiMaruGo-W4-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiMaruGo-W4} { /CIDFont/Category resourcestatus { pop pop /HeiseiMaruGo-W4/CIDFont resourcestatus {pop pop/HeiseiMaruGo-W4} { /Jun101-Light-RKSJ-H/Font resourcestatus {pop pop/Jun101-Light} {SansSerif} ifelse } ifelse } { /Jun101-Light-RKSJ-H/Font resourcestatus {pop pop/Jun101-Light} {SansSerif} ifelse } ifelse } ifelse /RoundSansSerif exch def /Default Serif def } { /Serif/Ryumin-Light def /SansSerif/GothicBBB-Medium def { (fonts/Jun101-Light-83pv-RKSJ-H)status }stopped {pop}{ {pop pop pop pop/Jun101-Light} {SansSerif} ifelse /RoundSansSerif exch def }ifelse /Default Serif def } ifelse end def /Adobe-Korea1 4 dict dup begin /Serif/HYSMyeongJo-Medium def /SansSerif/HYGoThic-Medium def /RoundSansSerif SansSerif def /Default Serif def end def /Adobe-GB1 4 dict dup begin /Serif/STSong-Light def /SansSerif/STHeiti-Regular def /RoundSansSerif SansSerif def /Default Serif def end def /Adobe-CNS1 4 dict dup begin /Serif/MKai-Medium def /SansSerif/MHei-Medium def /RoundSansSerif SansSerif def /Default Serif def end def end def Level2?{currentglobal true setglobal}if /ct_BoldRomanWidthProc { stringwidth 1 index 0 ne{exch .03 add exch}if setcharwidth 0 0 }bind def /ct_Type0WidthProc { dup stringwidth 0 0 moveto 2 index true charpath pathbbox 0 -1 7 index 2 div .88 setcachedevice2 pop 0 0 }bind def /ct_Type0WMode1WidthProc { dup stringwidth pop 2 div neg -0.88 2 copy moveto 0 -1 5 -1 roll true charpath pathbbox setcachedevice }bind def /cHexEncoding [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def /ct_BoldBaseFont 11 dict begin /FontType 3 def /FontMatrix[1 0 0 1 0 0]def /FontBBox[0 0 1 1]def /Encoding cHexEncoding def /_setwidthProc/ct_BoldRomanWidthProc load def /_bcstr1 1 string def /BuildChar { exch begin _basefont setfont _bcstr1 dup 0 4 -1 roll put dup _setwidthProc 3 copy moveto show _basefonto setfont moveto show end }bind def currentdict end def systemdict/composefont known { /ct_DefineIdentity-H { /Identity-H/CMap resourcestatus { pop pop } { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering(Identity)def /Supplement 0 def end def /CMapName/Identity-H def /CMapVersion 1.000 def /CMapType 1 def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse } def /ct_BoldBaseCIDFont 11 dict begin /CIDFontType 1 def /CIDFontName/ct_BoldBaseCIDFont def /FontMatrix[1 0 0 1 0 0]def /FontBBox[0 0 1 1]def /_setwidthProc/ct_Type0WidthProc load def /_bcstr2 2 string def /BuildGlyph { exch begin _basefont setfont _bcstr2 1 2 index 256 mod put _bcstr2 0 3 -1 roll 256 idiv put _bcstr2 dup _setwidthProc 3 copy moveto show _basefonto setfont moveto show end }bind def currentdict end def }if Level2?{setglobal}if /ct_CopyFont{ { 1 index/FID ne 2 index/UniqueID ne and {def}{pop pop}ifelse }forall }bind def /ct_Type0CopyFont { exch dup length dict begin ct_CopyFont [ exch FDepVector { dup/FontType get 0 eq { 1 index ct_Type0CopyFont /_ctType0 exch definefont } { /_ctBaseFont exch 2 index exec } ifelse exch } forall pop ] /FDepVector exch def currentdict end }bind def /ct_MakeBoldFont { dup/ct_SyntheticBold known { dup length 3 add dict begin ct_CopyFont /ct_StrokeWidth .03 0 FontMatrix idtransform pop def /ct_SyntheticBold true def currentdict end definefont } { dup dup length 3 add dict begin ct_CopyFont /PaintType 2 def /StrokeWidth .03 0 FontMatrix idtransform pop def /dummybold currentdict end definefont dup/FontType get dup 9 ge exch 11 le and { ct_BoldBaseCIDFont dup length 3 add dict copy begin dup/CIDSystemInfo get/CIDSystemInfo exch def ct_DefineIdentity-H /_Type0Identity/Identity-H 3 -1 roll[exch]composefont /_basefont exch def /_Type0Identity/Identity-H 3 -1 roll[exch]composefont /_basefonto exch def currentdict end /CIDFont defineresource } { ct_BoldBaseFont dup length 3 add dict copy begin /_basefont exch def /_basefonto exch def currentdict end definefont } ifelse } ifelse }bind def /ct_MakeBold{ 1 index 1 index findfont currentglobal 5 1 roll dup gcheck setglobal dup /FontType get 0 eq { dup/WMode known{dup/WMode get 1 eq}{false}ifelse version length 4 ge and {version 0 4 getinterval cvi 2015 ge} {true} ifelse {/ct_Type0WidthProc} {/ct_Type0WMode1WidthProc} ifelse ct_BoldBaseFont/_setwidthProc 3 -1 roll load put {ct_MakeBoldFont}ct_Type0CopyFont definefont } { dup/_fauxfont known not 1 index/SubstMaster known not and { ct_BoldBaseFont/_setwidthProc /ct_BoldRomanWidthProc load put ct_MakeBoldFont } { 2 index 2 index eq {exch pop } { dup length dict begin ct_CopyFont currentdict end definefont } ifelse } ifelse } ifelse pop pop pop setglobal }bind def /?str1 256 string def /?set { $SubstituteFont begin /$substituteFound false def /$fontname 1 index def /$doSmartSub false def end dup findfont $SubstituteFont begin $substituteFound {false} { dup/FontName known { dup/FontName get $fontname eq 1 index/DistillerFauxFont known not and /currentdistillerparams where {pop false 2 index isWidthsOnlyFont not and} if } {false} ifelse } ifelse exch pop /$doSmartSub true def end { 5 1 roll pop pop pop pop findfont } { 1 index findfont dup/FontType get 3 eq { 6 1 roll pop pop pop pop pop false } {pop true} ifelse { $SubstituteFont begin pop pop /$styleArray 1 index def /$regOrdering 2 index def pop pop 0 1 $styleArray length 1 sub { $styleArray exch get ct_StyleDicts $regOrdering 2 copy known { get exch 2 copy known not {pop/Default} if get dup type/nametype eq { ?str1 cvs length dup 1 add exch ?str1 exch(-)putinterval exch dup length exch ?str1 exch 3 index exch putinterval add ?str1 exch 0 exch getinterval cvn } { pop pop/Unknown } ifelse } { pop pop pop pop/Unknown } ifelse } for end findfont }if } ifelse currentglobal false setglobal 3 1 roll null copyfont definefont pop setglobal }bind def setpacking userdict/$SubstituteFont 25 dict put 1 dict begin /SubstituteFont dup $error exch 2 copy known {get} {pop pop{pop/Courier}bind} ifelse def /currentdistillerparams where dup { pop pop currentdistillerparams/CannotEmbedFontPolicy 2 copy known {get/Error eq} {pop pop false} ifelse } if not { countdictstack array dictstack 0 get begin userdict begin $SubstituteFont begin /$str 128 string def /$fontpat 128 string def /$slen 0 def /$sname null def /$match false def /$fontname null def /$substituteFound false def /$inVMIndex null def /$doSmartSub true def /$depth 0 def /$fontname null def /$italicangle 26.5 def /$dstack null def /$Strategies 10 dict dup begin /$Type3Underprint { currentglobal exch false setglobal 11 dict begin /UseFont exch $WMode 0 ne { dup length dict copy dup/WMode $WMode put /UseFont exch definefont } if def /FontName $fontname dup type/stringtype eq{cvn}if def /FontType 3 def /FontMatrix[.001 0 0 .001 0 0]def /Encoding 256 array dup 0 1 255{/.notdef put dup}for pop def /FontBBox[0 0 0 0]def /CCInfo 7 dict dup begin /cc null def /x 0 def /y 0 def end def /BuildChar { exch begin CCInfo begin 1 string dup 0 3 index put exch pop /cc exch def UseFont 1000 scalefont setfont cc stringwidth/y exch def/x exch def x y setcharwidth $SubstituteFont/$Strategy get/$Underprint get exec 0 0 moveto cc show x y moveto end end }bind def currentdict end exch setglobal }bind def /$GetaTint 2 dict dup begin /$BuildFont { dup/WMode known {dup/WMode get} {0} ifelse /$WMode exch def $fontname exch dup/FontName known { dup/FontName get dup type/stringtype eq{cvn}if } {/unnamedfont} ifelse exch Adobe_CoolType_Data/InVMDeepCopiedFonts get 1 index/FontName get known { pop Adobe_CoolType_Data/InVMDeepCopiedFonts get 1 index get null copyfont } {$deepcopyfont} ifelse exch 1 index exch/FontBasedOn exch put dup/FontName $fontname dup type/stringtype eq{cvn}if put definefont Adobe_CoolType_Data/InVMDeepCopiedFonts get begin dup/FontBasedOn get 1 index def end }bind def /$Underprint { gsave x abs y abs gt {/y 1000 def} {/x -1000 def 500 120 translate} ifelse Level2? { [/Separation(All)/DeviceCMYK{0 0 0 1 pop}] setcolorspace } {0 setgray} ifelse 10 setlinewidth x .8 mul [7 3] { y mul 8 div 120 sub x 10 div exch moveto 0 y 4 div neg rlineto dup 0 rlineto 0 y 4 div rlineto closepath gsave Level2? {.2 setcolor} {.8 setgray} ifelse fill grestore stroke } forall pop grestore }bind def end def /$Oblique 1 dict dup begin /$BuildFont { currentglobal exch dup gcheck setglobal null copyfont begin /FontBasedOn currentdict/FontName known { FontName dup type/stringtype eq{cvn}if } {/unnamedfont} ifelse def /FontName $fontname dup type/stringtype eq{cvn}if def /currentdistillerparams where {pop} { /FontInfo currentdict/FontInfo known {FontInfo null copyfont} {2 dict} ifelse dup begin /ItalicAngle $italicangle def /FontMatrix FontMatrix [1 0 ItalicAngle dup sin exch cos div 1 0 0] matrix concatmatrix readonly end 4 2 roll def def } ifelse FontName currentdict end definefont exch setglobal }bind def end def /$None 1 dict dup begin /$BuildFont{}bind def end def end def /$Oblique SetSubstituteStrategy /$findfontByEnum { dup type/stringtype eq{cvn}if dup/$fontname exch def $sname null eq {$str cvs dup length $slen sub $slen getinterval} {pop $sname} ifelse $fontpat dup 0(fonts/*)putinterval exch 7 exch putinterval /$match false def $SubstituteFont/$dstack countdictstack array dictstack put mark { $fontpat 0 $slen 7 add getinterval {/$match exch def exit} $str filenameforall } stopped { cleardictstack currentdict true $SubstituteFont/$dstack get { exch { 1 index eq {pop false} {true} ifelse } {begin false} ifelse } forall pop } if cleartomark /$slen 0 def $match false ne {$match(fonts/)anchorsearch pop pop cvn} {/Courier} ifelse }bind def /$ROS 1 dict dup begin /Adobe 4 dict dup begin /Japan1 [/Ryumin-Light/HeiseiMin-W3 /GothicBBB-Medium/HeiseiKakuGo-W5 /HeiseiMaruGo-W4/Jun101-Light]def /Korea1 [/HYSMyeongJo-Medium/HYGoThic-Medium]def /GB1 [/STSong-Light/STHeiti-Regular]def /CNS1 [/MKai-Medium/MHei-Medium]def end def end def /$cmapname null def /$deepcopyfont { dup/FontType get 0 eq { 1 dict dup/FontName/copied put copyfont begin /FDepVector FDepVector copyarray 0 1 2 index length 1 sub { 2 copy get $deepcopyfont dup/FontName/copied put /copied exch definefont 3 copy put pop pop } for def currentdict end } {$Strategies/$Type3Underprint get exec} ifelse }bind def /$buildfontname { dup/CIDFont findresource/CIDSystemInfo get begin Registry length Ordering length Supplement 8 string cvs 3 copy length 2 add add add string dup 5 1 roll dup 0 Registry putinterval dup 4 index(-)putinterval dup 4 index 1 add Ordering putinterval 4 2 roll add 1 add 2 copy(-)putinterval end 1 add 2 copy 0 exch getinterval $cmapname $fontpat cvs exch anchorsearch {pop pop 3 2 roll putinterval cvn/$cmapname exch def} {pop pop pop pop pop} ifelse length $str 1 index(-)putinterval 1 add $str 1 index $cmapname $fontpat cvs putinterval $cmapname length add $str exch 0 exch getinterval cvn }bind def /$findfontByROS { /$fontname exch def $ROS Registry 2 copy known { get Ordering 2 copy known {get} {pop pop[]} ifelse } {pop pop[]} ifelse false exch { dup/CIDFont resourcestatus { pop pop save 1 index/CIDFont findresource dup/WidthsOnly known {dup/WidthsOnly get} {false} ifelse exch pop exch restore {pop} {exch pop true exit} ifelse } {pop} ifelse } forall {$str cvs $buildfontname} { false(*) { save exch dup/CIDFont findresource dup/WidthsOnly known {dup/WidthsOnly get not} {true} ifelse exch/CIDSystemInfo get dup/Registry get Registry eq exch/Ordering get Ordering eq and and {exch restore exch pop true exit} {pop restore} ifelse } $str/CIDFont resourceforall {$buildfontname} {$fontname $findfontByEnum} ifelse } ifelse }bind def end end currentdict/$error known currentdict/languagelevel known and dup {pop $error/SubstituteFont known} if dup {$error} {Adobe_CoolType_Core} ifelse begin { /SubstituteFont /CMap/Category resourcestatus { pop pop { $SubstituteFont begin /$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt and { $sname null eq {dup $str cvs dup length $slen sub $slen getinterval cvn} {$sname} ifelse Adobe_CoolType_Data/InVMFontsByCMap get 1 index 2 copy known { get false exch { pop currentglobal { GlobalFontDirectory 1 index known {exch pop true exit} {pop} ifelse } { FontDirectory 1 index known {exch pop true exit} { GlobalFontDirectory 1 index known {exch pop true exit} {pop} ifelse } ifelse } ifelse } forall } {pop pop false} ifelse { exch pop exch pop } { dup/CMap resourcestatus { pop pop dup/$cmapname exch def /CMap findresource/CIDSystemInfo get{def}forall $findfontByROS } { 128 string cvs dup(-)search { 3 1 roll search { 3 1 roll pop {dup cvi} stopped {pop pop pop pop pop $findfontByEnum} { 4 2 roll pop pop exch length exch 2 index length 2 index sub exch 1 sub -1 0 { $str cvs dup length 4 index 0 4 index 4 3 roll add getinterval exch 1 index exch 3 index exch putinterval dup/CMap resourcestatus { pop pop 4 1 roll pop pop pop dup/$cmapname exch def /CMap findresource/CIDSystemInfo get{def}forall $findfontByROS true exit } {pop} ifelse } for dup type/booleantype eq {pop} {pop pop pop $findfontByEnum} ifelse } ifelse } {pop pop pop $findfontByEnum} ifelse } {pop pop $findfontByEnum} ifelse } ifelse } ifelse } {//SubstituteFont exec} ifelse /$slen 0 def end } } { { $SubstituteFont begin /$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt and {$findfontByEnum} {//SubstituteFont exec} ifelse end } } ifelse bind readonly def Adobe_CoolType_Core/scfindfont/systemfindfont load put } { /scfindfont { $SubstituteFont begin dup systemfindfont dup/FontName known {dup/FontName get dup 3 index ne} {/noname true} ifelse dup { /$origfontnamefound 2 index def /$origfontname 4 index def/$substituteFound true def } if exch pop { $slen 0 gt $sname null ne 3 index length $slen gt or and { pop dup $findfontByEnum findfont dup maxlength 1 add dict begin {1 index/FID eq{pop pop}{def}ifelse} forall currentdict end definefont dup/FontName known{dup/FontName get}{null}ifelse $origfontnamefound ne { $origfontname $str cvs print ( substitution revised, using )print dup/FontName known {dup/FontName get}{(unspecified font)} ifelse $str cvs print(.\n)print } if } {exch pop} ifelse } {exch pop} ifelse end }bind def } ifelse end end Adobe_CoolType_Core_Defined not { Adobe_CoolType_Core/findfont { $SubstituteFont begin $depth 0 eq { /$fontname 1 index dup type/stringtype ne{$str cvs}if def /$substituteFound false def } if /$depth $depth 1 add def end scfindfont $SubstituteFont begin /$depth $depth 1 sub def $substituteFound $depth 0 eq and { $inVMIndex null ne {dup $inVMIndex $AddInVMFont} if $doSmartSub { currentdict/$Strategy known {$Strategy/$BuildFont get exec} if } if } if end }bind put } if } if end /$AddInVMFont { exch/FontName 2 copy known { get 1 dict dup begin exch 1 index gcheck def end exch Adobe_CoolType_Data/InVMFontsByCMap get exch $DictAdd } {pop pop pop} ifelse }bind def /$DictAdd { 2 copy known not {2 copy 4 index length dict put} if Level2? not { 2 copy get dup maxlength exch length 4 index length add lt 2 copy get dup length 4 index length add exch maxlength 1 index lt { 2 mul dict begin 2 copy get{forall}def 2 copy currentdict put end } {pop} ifelse } if get begin {def} forall end }bind def end end %%EndResource currentglobal true setglobal %%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.23 0 %%Copyright: Copyright 1987-2006 Adobe Systems Incorporated. %%Version: 1.23 0 systemdict/languagelevel known dup {currentglobal false setglobal} {false} ifelse exch userdict/Adobe_CoolType_Utility 2 copy known {2 copy get dup maxlength 27 add dict copy} {27 dict} ifelse put Adobe_CoolType_Utility begin /@eexecStartData <BAB431EA07F209EB8C4348311481D9D3F76E3D15246555577D87BC510ED54E 118C39697FA9F6DB58128E60EB8A12FA24D7CDD2FA94D221FA9EC8DA3E5E6A1C 4ACECC8C2D39C54E7C946031DD156C3A6B4A09AD29E1867A>def /@recognizeCIDFont null def /ct_Level2? exch def /ct_Clone? 1183615869 internaldict dup /CCRun known not exch/eCCRun known not ct_Level2? and or def ct_Level2? {globaldict begin currentglobal true setglobal} if /ct_AddStdCIDMap ct_Level2? {{ mark Adobe_CoolType_Utility/@recognizeCIDFont currentdict put { ((Hex)57 StartData 0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0 7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60 d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8 cc36 74f4 1144 b13b 77)0()/SubFileDecode filter cvx exec } stopped { cleartomark Adobe_CoolType_Utility/@recognizeCIDFont get countdictstack dup array dictstack exch 1 sub -1 0 { 2 copy get 3 index eq {1 index length exch sub 1 sub{end}repeat exit} {pop} ifelse } for pop pop Adobe_CoolType_Utility/@eexecStartData get eexec } {cleartomark} ifelse }} {{ Adobe_CoolType_Utility/@eexecStartData get eexec }} ifelse bind def userdict/cid_extensions known dup{cid_extensions/cid_UpdateDB known and}if { cid_extensions begin /cid_GetCIDSystemInfo { 1 index type/stringtype eq {exch cvn exch} if cid_extensions begin dup load 2 index known { 2 copy cid_GetStatusInfo dup null ne { 1 index load 3 index get dup null eq {pop pop cid_UpdateDB} { exch 1 index/Created get eq {exch pop exch pop} {pop cid_UpdateDB} ifelse } ifelse } {pop cid_UpdateDB} ifelse } {cid_UpdateDB} ifelse end }bind def end } if ct_Level2? {end setglobal} if /ct_UseNativeCapability? systemdict/composefont known def /ct_MakeOCF 35 dict def /ct_Vars 25 dict def /ct_GlyphDirProcs 6 dict def /ct_BuildCharDict 15 dict dup begin /charcode 2 string def /dst_string 1500 string def /nullstring()def /usewidths? true def end def ct_Level2?{setglobal}{pop}ifelse ct_GlyphDirProcs begin /GetGlyphDirectory { systemdict/languagelevel known {pop/CIDFont findresource/GlyphDirectory get} { 1 index/CIDFont findresource/GlyphDirectory get dup type/dicttype eq { dup dup maxlength exch length sub 2 index lt { dup length 2 index add dict copy 2 index /CIDFont findresource/GlyphDirectory 2 index put } if } if exch pop exch pop } ifelse + }def /+ { systemdict/languagelevel known { currentglobal false setglobal 3 dict begin /vm exch def } {1 dict begin} ifelse /$ exch def systemdict/languagelevel known { vm setglobal /gvm currentglobal def $ gcheck setglobal } if ?{$ begin}if }def /?{$ type/dicttype eq}def /|{ userdict/Adobe_CoolType_Data known { Adobe_CoolType_Data/AddWidths? known { currentdict Adobe_CoolType_Data begin begin AddWidths? { Adobe_CoolType_Data/CC 3 index put ?{def}{$ 3 1 roll put}ifelse CC charcode exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore currentfont/Widths get exch CC exch put } {?{def}{$ 3 1 roll put}ifelse} ifelse end end } {?{def}{$ 3 1 roll put}ifelse} ifelse } {?{def}{$ 3 1 roll put}ifelse} ifelse }def /! { ?{end}if systemdict/languagelevel known {gvm setglobal} if end }def /:{string currentfile exch readstring pop}executeonly def end ct_MakeOCF begin /ct_cHexEncoding [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def /ct_CID_STR_SIZE 8000 def /ct_mkocfStr100 100 string def /ct_defaultFontMtx[.001 0 0 .001 0 0]def /ct_1000Mtx[1000 0 0 1000 0 0]def /ct_raise{exch cvx exch errordict exch get exec stop}bind def /ct_reraise {cvx $error/errorname get(Error: )print dup( )cvs print errordict exch get exec stop }bind def /ct_cvnsi { 1 index add 1 sub 1 exch 0 4 1 roll { 2 index exch get exch 8 bitshift add } for exch pop }bind def /ct_GetInterval { Adobe_CoolType_Utility/ct_BuildCharDict get begin /dst_index 0 def dup dst_string length gt {dup string/dst_string exch def} if 1 index ct_CID_STR_SIZE idiv /arrayIndex exch def 2 index arrayIndex get 2 index arrayIndex ct_CID_STR_SIZE mul sub { dup 3 index add 2 index length le { 2 index getinterval dst_string dst_index 2 index putinterval length dst_index add/dst_index exch def exit } { 1 index length 1 index sub dup 4 1 roll getinterval dst_string dst_index 2 index putinterval pop dup dst_index add/dst_index exch def sub /arrayIndex arrayIndex 1 add def 2 index dup length arrayIndex gt {arrayIndex get} { pop exit } ifelse 0 } ifelse } loop pop pop pop dst_string 0 dst_index getinterval end }bind def ct_Level2? { /ct_resourcestatus currentglobal mark true setglobal {/unknowninstancename/Category resourcestatus} stopped {cleartomark setglobal true} {cleartomark currentglobal not exch setglobal} ifelse { { mark 3 1 roll/Category findresource begin ct_Vars/vm currentglobal put ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec {cleartomark false} {{3 2 roll pop true}{cleartomark false}ifelse} ifelse ct_Vars/vm get setglobal end } } {{resourcestatus}} ifelse bind def /CIDFont/Category ct_resourcestatus {pop pop} { currentglobal true setglobal /Generic/Category findresource dup length dict copy dup/InstanceType/dicttype put /CIDFont exch/Category defineresource pop setglobal } ifelse ct_UseNativeCapability? { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering(Identity)def /Supplement 0 def end def /CMapName/Identity-H def /CMapVersion 1.000 def /CMapType 1 def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } if } { /ct_Category 2 dict begin /CIDFont 10 dict def /ProcSet 2 dict def currentdict end def /defineresource { ct_Category 1 index 2 copy known { get dup dup maxlength exch length eq { dup length 10 add dict copy ct_Category 2 index 2 index put } if 3 index 3 index put pop exch pop } {pop pop/defineresource/undefined ct_raise} ifelse }bind def /findresource { ct_Category 1 index 2 copy known { get 2 index 2 copy known {get 3 1 roll pop pop} {pop pop/findresource/undefinedresource ct_raise} ifelse } {pop pop/findresource/undefined ct_raise} ifelse }bind def /resourcestatus { ct_Category 1 index 2 copy known { get 2 index known exch pop exch pop { 0 -1 true } { false } ifelse } {pop pop/findresource/undefined ct_raise} ifelse }bind def /ct_resourcestatus/resourcestatus load def } ifelse /ct_CIDInit 2 dict begin /ct_cidfont_stream_init { { dup(Binary)eq { pop null currentfile ct_Level2? { {cid_BYTE_COUNT()/SubFileDecode filter} stopped {pop pop pop} if } if /readstring load exit } if dup(Hex)eq { pop currentfile ct_Level2? { {null exch/ASCIIHexDecode filter/readstring} stopped {pop exch pop(>)exch/readhexstring} if } {(>)exch/readhexstring} ifelse load exit } if /StartData/typecheck ct_raise } loop cid_BYTE_COUNT ct_CID_STR_SIZE le { 2 copy cid_BYTE_COUNT string exch exec pop 1 array dup 3 -1 roll 0 exch put } { cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi dup array exch 2 sub 0 exch 1 exch { 2 copy 5 index ct_CID_STR_SIZE string 6 index exec pop put pop } for 2 index cid_BYTE_COUNT ct_CID_STR_SIZE mod string 3 index exec pop 1 index exch 1 index length 1 sub exch put } ifelse cid_CIDFONT exch/GlyphData exch put 2 index null eq { pop pop pop } { pop/readstring load 1 string exch { 3 copy exec pop dup length 0 eq { pop pop pop pop pop true exit } if 4 index eq { pop pop pop pop false exit } if } loop pop } ifelse }bind def /StartData { mark { currentdict dup/FDArray get 0 get/FontMatrix get 0 get 0.001 eq { dup/CDevProc known not { /CDevProc 1183615869 internaldict/stdCDevProc 2 copy known {get} { pop pop {pop pop pop pop pop 0 -1000 7 index 2 div 880} } ifelse def } if } { /CDevProc { pop pop pop pop pop 0 1 cid_temp/cid_CIDFONT get /FDArray get 0 get /FontMatrix get 0 get div 7 index 2 div 1 index 0.88 mul }def } ifelse /cid_temp 15 dict def cid_temp begin /cid_CIDFONT exch def 3 copy pop dup/cid_BYTE_COUNT exch def 0 gt { ct_cidfont_stream_init FDArray { /Private get dup/SubrMapOffset known { begin /Subrs SubrCount array def Subrs SubrMapOffset SubrCount SDBytes ct_Level2? { currentdict dup/SubrMapOffset undef dup/SubrCount undef /SDBytes undef } if end /cid_SD_BYTES exch def /cid_SUBR_COUNT exch def /cid_SUBR_MAP_OFFSET exch def /cid_SUBRS exch def cid_SUBR_COUNT 0 gt { GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi 0 1 cid_SUBR_COUNT 1 sub { exch 1 index 1 add cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add GlyphData exch cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi cid_SUBRS 4 2 roll GlyphData exch 4 index 1 index sub ct_GetInterval dup length string copy put } for pop } if } {pop} ifelse } forall } if cleartomark pop pop end CIDFontName currentdict/CIDFont defineresource pop end end } stopped {cleartomark/StartData ct_reraise} if }bind def currentdict end def /ct_saveCIDInit { /CIDInit/ProcSet ct_resourcestatus {true} {/CIDInitC/ProcSet ct_resourcestatus} ifelse { pop pop /CIDInit/ProcSet findresource ct_UseNativeCapability? {pop null} {/CIDInit ct_CIDInit/ProcSet defineresource pop} ifelse } {/CIDInit ct_CIDInit/ProcSet defineresource pop null} ifelse ct_Vars exch/ct_oldCIDInit exch put }bind def /ct_restoreCIDInit { ct_Vars/ct_oldCIDInit get dup null ne {/CIDInit exch/ProcSet defineresource pop} {pop} ifelse }bind def /ct_BuildCharSetUp { 1 index begin CIDFont begin Adobe_CoolType_Utility/ct_BuildCharDict get begin /ct_dfCharCode exch def /ct_dfDict exch def CIDFirstByte ct_dfCharCode add dup CIDCount ge {pop 0} if /cid exch def { GlyphDirectory cid 2 copy known {get} {pop pop nullstring} ifelse dup length FDBytes sub 0 gt { dup FDBytes 0 ne {0 FDBytes ct_cvnsi} {pop 0} ifelse /fdIndex exch def dup length FDBytes sub FDBytes exch getinterval /charstring exch def exit } { pop cid 0 eq {/charstring nullstring def exit} if /cid 0 def } ifelse } loop }def /ct_SetCacheDevice { 0 0 moveto dup stringwidth 3 -1 roll true charpath pathbbox 0 -1000 7 index 2 div 880 setcachedevice2 0 0 moveto }def /ct_CloneSetCacheProc { 1 eq { stringwidth pop -2 div -880 0 -1000 setcharwidth moveto } { usewidths? { currentfont/Widths get cid 2 copy known {get exch pop aload pop} {pop pop stringwidth} ifelse } {stringwidth} ifelse setcharwidth 0 0 moveto } ifelse }def /ct_Type3ShowCharString { ct_FDDict fdIndex 2 copy known {get} { currentglobal 3 1 roll 1 index gcheck setglobal ct_Type1FontTemplate dup maxlength dict copy begin FDArray fdIndex get dup/FontMatrix 2 copy known {get} {pop pop ct_defaultFontMtx} ifelse /FontMatrix exch dup length array copy def /Private get /Private exch def /Widths rootfont/Widths get def /CharStrings 1 dict dup/.notdef <d841272cf18f54fc13>dup length string copy put def currentdict end /ct_Type1Font exch definefont dup 5 1 roll put setglobal } ifelse dup/CharStrings get 1 index/Encoding get ct_dfCharCode get charstring put rootfont/WMode 2 copy known {get} {pop pop 0} ifelse exch 1000 scalefont setfont ct_str1 0 ct_dfCharCode put ct_str1 exch ct_dfSetCacheProc ct_SyntheticBold { currentpoint ct_str1 show newpath moveto ct_str1 true charpath ct_StrokeWidth setlinewidth stroke } {ct_str1 show} ifelse }def /ct_Type4ShowCharString { ct_dfDict ct_dfCharCode charstring FDArray fdIndex get dup/FontMatrix get dup ct_defaultFontMtx ct_matrixeq not {ct_1000Mtx matrix concatmatrix concat} {pop} ifelse /Private get Adobe_CoolType_Utility/ct_Level2? get not { ct_dfDict/Private 3 -1 roll {put} 1183615869 internaldict/superexec get exec } if 1183615869 internaldict Adobe_CoolType_Utility/ct_Level2? get {1 index} {3 index/Private get mark 6 1 roll} ifelse dup/RunInt known {/RunInt get} {pop/CCRun} ifelse get exec Adobe_CoolType_Utility/ct_Level2? get not {cleartomark} if }bind def /ct_BuildCharIncremental { { Adobe_CoolType_Utility/ct_MakeOCF get begin ct_BuildCharSetUp ct_ShowCharString } stopped {stop} if end end end end }bind def /BaseFontNameStr(BF00)def /ct_Type1FontTemplate 14 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0]def /FontBBox [-250 -250 1250 1250]def /Encoding ct_cHexEncoding def /PaintType 0 def currentdict end def /BaseFontTemplate 11 dict begin /FontMatrix [0.001 0 0 0.001 0 0]def /FontBBox [-250 -250 1250 1250]def /Encoding ct_cHexEncoding def /BuildChar/ct_BuildCharIncremental load def ct_Clone? { /FontType 3 def /ct_ShowCharString/ct_Type3ShowCharString load def /ct_dfSetCacheProc/ct_CloneSetCacheProc load def /ct_SyntheticBold false def /ct_StrokeWidth 1 def } { /FontType 4 def /Private 1 dict dup/lenIV 4 put def /CharStrings 1 dict dup/.notdef<d841272cf18f54fc13>put def /PaintType 0 def /ct_ShowCharString/ct_Type4ShowCharString load def } ifelse /ct_str1 1 string def currentdict end def /BaseFontDictSize BaseFontTemplate length 5 add def /ct_matrixeq { true 0 1 5 { dup 4 index exch get exch 3 index exch get eq and dup not {exit} if } for exch pop exch pop }bind def /ct_makeocf { 15 dict begin exch/WMode exch def exch/FontName exch def /FontType 0 def /FMapType 2 def dup/FontMatrix known {dup/FontMatrix get/FontMatrix exch def} {/FontMatrix matrix def} ifelse /bfCount 1 index/CIDCount get 256 idiv 1 add dup 256 gt{pop 256}if def /Encoding 256 array 0 1 bfCount 1 sub{2 copy dup put pop}for bfCount 1 255{2 copy bfCount put pop}for def /FDepVector bfCount dup 256 lt{1 add}if array def BaseFontTemplate BaseFontDictSize dict copy begin /CIDFont exch def CIDFont/FontBBox known {CIDFont/FontBBox get/FontBBox exch def} if CIDFont/CDevProc known {CIDFont/CDevProc get/CDevProc exch def} if currentdict end BaseFontNameStr 3(0)putinterval 0 1 bfCount dup 256 eq{1 sub}if { FDepVector exch 2 index BaseFontDictSize dict copy begin dup/CIDFirstByte exch 256 mul def FontType 3 eq {/ct_FDDict 2 dict def} if currentdict end 1 index 16 BaseFontNameStr 2 2 getinterval cvrs pop BaseFontNameStr exch definefont put } for ct_Clone? {/Widths 1 index/CIDFont get/GlyphDirectory get length dict def} if FontName currentdict end definefont ct_Clone? { gsave dup 1000 scalefont setfont ct_BuildCharDict begin /usewidths? false def currentfont/Widths get begin exch/CIDFont get/GlyphDirectory get { pop dup charcode exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore def } forall end /usewidths? true def end grestore } {exch pop} ifelse }bind def currentglobal true setglobal /ct_ComposeFont { ct_UseNativeCapability? { 2 index/CMap ct_resourcestatus {pop pop exch pop} { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CMapName 3 index def /CMapVersion 1.000 def /CMapType 1 def exch/WMode exch def /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering CMapName ct_mkocfStr100 cvs (Adobe-)search { pop pop (-)search { dup length string copy exch pop exch pop } {pop(Identity)} ifelse } {pop (Identity)} ifelse def /Supplement 0 def end def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse composefont } { 3 2 roll pop 0 get/CIDFont findresource ct_makeocf } ifelse }bind def setglobal /ct_MakeIdentity { ct_UseNativeCapability? { 1 index/CMap ct_resourcestatus {pop pop} { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CMapName 2 index def /CMapVersion 1.000 def /CMapType 1 def /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering CMapName ct_mkocfStr100 cvs (Adobe-)search { pop pop (-)search {dup length string copy exch pop exch pop} {pop(Identity)} ifelse } {pop(Identity)} ifelse def /Supplement 0 def end def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse composefont } { exch pop 0 get/CIDFont findresource ct_makeocf } ifelse }bind def currentdict readonly pop end end %%EndResource setglobal %%BeginResource: procset Adobe_CoolType_Utility_T42 1.0 0 %%Copyright: Copyright 1987-2004 Adobe Systems Incorporated. %%Version: 1.0 0 userdict/ct_T42Dict 15 dict put ct_T42Dict begin /Is2015? { version cvi 2015 ge }bind def /AllocGlyphStorage { Is2015? { pop } { {string}forall }ifelse }bind def /Type42DictBegin { 25 dict begin /FontName exch def /CharStrings 256 dict begin /.notdef 0 def currentdict end def /Encoding exch def /PaintType 0 def /FontType 42 def /FontMatrix[1 0 0 1 0 0]def 4 array astore cvx/FontBBox exch def /sfnts }bind def /Type42DictEnd { currentdict dup/FontName get exch definefont end ct_T42Dict exch dup/FontName get exch put }bind def /RD{string currentfile exch readstring pop}executeonly def /PrepFor2015 { Is2015? { /GlyphDirectory 16 dict def sfnts 0 get dup 2 index (glyx) putinterval 2 index (locx) putinterval pop pop } { pop pop }ifelse }bind def /AddT42Char { Is2015? { /GlyphDirectory get begin def end pop pop } { /sfnts get 4 index get 3 index 2 index putinterval pop pop pop pop }ifelse }bind def /T0AddT42Mtx2 { /CIDFont findresource/Metrics2 get begin def end }bind def end %%EndResource currentglobal true setglobal %%BeginFile: MMFauxFont.prc %%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. %%All Rights Reserved. userdict /ct_EuroDict 10 dict put ct_EuroDict begin /ct_CopyFont { { 1 index /FID ne {def} {pop pop} ifelse} forall } def /ct_GetGlyphOutline { gsave initmatrix newpath exch findfont dup length 1 add dict begin ct_CopyFont /Encoding Encoding dup length array copy dup 4 -1 roll 0 exch put def currentdict end /ct_EuroFont exch definefont 1000 scalefont setfont 0 0 moveto [ <00> stringwidth <00> false charpath pathbbox [ {/m cvx} {/l cvx} {/c cvx} {/cp cvx} pathforall grestore counttomark 8 add } def /ct_MakeGlyphProc { ] cvx /ct_PSBuildGlyph cvx ] cvx } def /ct_PSBuildGlyph { gsave 8 -1 roll pop 7 1 roll 6 -2 roll ct_FontMatrix transform 6 2 roll 4 -2 roll ct_FontMatrix transform 4 2 roll ct_FontMatrix transform currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse dup 9 1 roll { currentdict /StrokeWidth 2 copy known { get 2 div 0 ct_FontMatrix dtransform pop 5 1 roll 4 -1 roll 4 index sub 4 1 roll 3 -1 roll 4 index sub 3 1 roll exch 4 index add exch 4 index add 5 -1 roll pop } { pop pop } ifelse } if setcachedevice ct_FontMatrix concat ct_PSPathOps begin exec end { currentdict /StrokeWidth 2 copy known { get } { pop pop 0 } ifelse setlinewidth stroke } { fill } ifelse grestore } def /ct_PSPathOps 4 dict dup begin /m {moveto} def /l {lineto} def /c {curveto} def /cp {closepath} def end def /ct_matrix1000 [1000 0 0 1000 0 0] def /ct_AddGlyphProc { 2 index findfont dup length 4 add dict begin ct_CopyFont /CharStrings CharStrings dup length 1 add dict copy begin 3 1 roll def currentdict end def /ct_FontMatrix ct_matrix1000 FontMatrix matrix concatmatrix def /ct_PSBuildGlyph /ct_PSBuildGlyph load def /ct_PSPathOps /ct_PSPathOps load def currentdict end definefont pop } def systemdict /languagelevel known { /ct_AddGlyphToPrinterFont { 2 copy ct_GetGlyphOutline 3 add -1 roll restore ct_MakeGlyphProc ct_AddGlyphProc } def } { /ct_AddGlyphToPrinterFont { pop pop restore Adobe_CTFauxDict /$$$FONTNAME get /Euro Adobe_CTFauxDict /$$$SUBSTITUTEBASE get ct_EuroDict exch get ct_AddGlyphProc } def } ifelse /AdobeSansMM { 556 0 24 -19 541 703 { 541 628 m 510 669 442 703 354 703 c 201 703 117 607 101 444 c 50 444 l 25 372 l 97 372 l 97 301 l 49 301 l 24 229 l 103 229 l 124 67 209 -19 350 -19 c 435 -19 501 25 509 32 c 509 131 l 492 105 417 60 343 60 c 267 60 204 127 197 229 c 406 229 l 430 301 l 191 301 l 191 372 l 455 372 l 479 444 l 194 444 l 201 531 245 624 348 624 c 433 624 484 583 509 534 c cp 556 0 m } ct_PSBuildGlyph } def /AdobeSerifMM { 500 0 10 -12 484 692 { 347 298 m 171 298 l 170 310 170 322 170 335 c 170 362 l 362 362 l 374 403 l 172 403 l 184 580 244 642 308 642 c 380 642 434 574 457 457 c 481 462 l 474 691 l 449 691 l 433 670 429 657 410 657 c 394 657 360 692 299 692 c 204 692 94 604 73 403 c 22 403 l 10 362 l 70 362 l 69 352 69 341 69 330 c 69 319 69 308 70 298 c 22 298 l 10 257 l 73 257 l 97 57 216 -12 295 -12 c 364 -12 427 25 484 123 c 458 142 l 425 101 384 37 316 37 c 256 37 189 84 173 257 c 335 257 l cp 500 0 m } ct_PSBuildGlyph } def end %%EndFile setglobal Adobe_CoolType_Core begin /$Oblique SetSubstituteStrategy end %%BeginResource: procset Adobe_AGM_Image 1.0 0 %%Version: 1.0 0 %%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved. systemdict/setpacking known @@ -3595,7 +3595,7 @@ userdict/Adobe_AGM_Image 71 dict dup begin put /ps { Adobe_AGM_Image begin - /AGMIMG_ccimage_exists{/customcolorimage where + /AGMIMG_ccimage_exists{/customcolorimage where { pop /Adobe_AGM_OnHost_Seps where @@ -3611,7 +3611,7 @@ userdict/Adobe_AGM_Image 71 dict dup begin put }ifelse }{ false - }ifelse + }ifelse }bdf level2{ /invert_image_samples @@ -3625,7 +3625,7 @@ userdict/Adobe_AGM_Image 71 dict dup begin put /Decode[1 1]def }if }def - }{ + }{ /invert_image_samples { {1 exch sub}currenttransfer addprocs settransfer @@ -3684,7 +3684,7 @@ userdict/Adobe_AGM_Image 71 dict dup begin put /imagemask }{ /O load 2 eq{ - /image + /image }{ /colorimage }ifelse @@ -3701,7 +3701,7 @@ userdict/Adobe_AGM_Image 71 dict dup begin put DataSource 0 get type/filetype eq{ /_Filters DataSource def currentdict/MultipleDataSources known not{ - /DataSource DataSource dup length 1 sub get def + /DataSource DataSource dup length 1 sub get def }if }if }if @@ -3816,7 +3816,7 @@ userdict/Adobe_AGM_Image 71 dict dup begin put use_mask{ process_mask image }{ - DeviceN_NoneName DeviceN_PS2 Indexed_DeviceN level3 not and or or AGMCORE_in_rip_sep and + DeviceN_NoneName DeviceN_PS2 Indexed_DeviceN level3 not and or or AGMCORE_in_rip_sep and { Names convert_to_process not{ 2 dict begin @@ -3870,11 +3870,11 @@ userdict/Adobe_AGM_Image 71 dict dup begin put currentdict imageormask_sys }{ currentdict ignoreimagedata - }ifelse + }ifelse }ifelse }ifelse }{ - BitsPerComponent ImageMatrix + BitsPerComponent ImageMatrix MultipleDataSources{ 0 1 NComponents 1 sub{ DataSource exch get @@ -3900,8 +3900,8 @@ userdict/Adobe_AGM_Image 71 dict dup begin put DataSource aload pop AGMCORE_get_ink_data }ifelse def }{ - /DataSource - Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul + /DataSource + Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul /DataSource load filter_cmyk 0()/SubFileDecode filter def }ifelse @@ -3920,8 +3920,8 @@ userdict/Adobe_AGM_Image 71 dict dup begin put currentdict ignoreimagedata }ifelse }ifelse - }{ - MultipleDataSources NComponents AGMIMG_&colorimage + }{ + MultipleDataSources NComponents AGMIMG_&colorimage }ifelse }{ true NComponents colorimage @@ -3972,20 +3972,20 @@ userdict/Adobe_AGM_Image 71 dict dup begin put SkipImageProc{ currentdict consumeimagedata }{ - save mark + save mark AGMCORE_avoid_L2_sep_space{ /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def }if - AGMIMG_ccimage_exists + AGMIMG_ccimage_exists MappedCSA 0 get/DeviceCMYK eq and - currentdict/Components known and - Name()ne and - Name(All)ne and + currentdict/Components known and + Name()ne and + Name(All)ne and Operator/image eq and AGMCORE_producing_seps not and level2 not and { - Width Height BitsPerComponent ImageMatrix + Width Height BitsPerComponent ImageMatrix [ /DataSource load/exec cvx { @@ -4027,7 +4027,7 @@ userdict/Adobe_AGM_Image 71 dict dup begin put currentgray 1 ne{ AGMCORE_is_cmyk_sep Name(All)ne and{ level2{ - Name AGMCORE_IsSeparationAProcessColor + Name AGMCORE_IsSeparationAProcessColor { Operator/imagemask eq{ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{ @@ -4064,15 +4064,15 @@ userdict/Adobe_AGM_Image 71 dict dup begin put }ifelse }{ currentoverprint not Name(All)eq or Operator/imagemask eq and{ - currentdict imageormask_sys + currentdict imageormask_sys }{ currentoverprint not { - gsave + gsave knockout_unitsq grestore }if - currentdict consumeimagedata + currentdict consumeimagedata }ifelse }ifelse }ifelse @@ -4083,10 +4083,10 @@ userdict/Adobe_AGM_Image 71 dict dup begin put /sep_tint AGMCORE_gget setcolor }if }if - currentoverprint - MappedCSA 0 get/DeviceCMYK eq and + currentoverprint + MappedCSA 0 get/DeviceCMYK eq and Name AGMCORE_IsSeparationAProcessColor not and - //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{Name inRip_spot_has_ink not and}{false}ifelse + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{Name inRip_spot_has_ink not and}{false}ifelse Name(All)ne and{ imageormask_l2_overprint }{ @@ -4116,7 +4116,7 @@ userdict/Adobe_AGM_Image 71 dict dup begin put }for ]cvx bind end -}bdf +}bdf /devn_alt_datasource { 11 dict begin @@ -4136,9 +4136,9 @@ userdict/Adobe_AGM_Image 71 dict dup begin put dup 7 mul 1 add index exch dup BitsPerComponent 8 idiv mul exch origDataSource exch get 0()/SubFileDecode filter BitsPerComponent 8 idiv string/readstring cvx/pop cvx/putinterval cvx - }for + }for ]bind cvx - }{origDataSource}ifelse 0()/SubFileDecode filter def + }{origDataSource}ifelse 0()/SubFileDecode filter def [ origcolorSpaceElemCnt string 0 2 origDecode length 2 sub @@ -4178,14 +4178,14 @@ userdict/Adobe_AGM_Image 71 dict dup begin put SkipImageProc{ currentdict consumeimagedata }{ - save mark + save mark AGMCORE_producing_seps not{ level3 not{ Operator/imagemask ne{ /DataSource[[ DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse - colorSpaceElemCnt/devicen_colorspace_dict AGMCORE_gget/TintTransform get - devn_alt_datasource 1/string cvx/readstring cvx/pop cvx]cvx colorSpaceElemCnt 1 sub{dup}repeat]def + colorSpaceElemCnt/devicen_colorspace_dict AGMCORE_gget/TintTransform get + devn_alt_datasource 1/string cvx/readstring cvx/pop cvx]cvx colorSpaceElemCnt 1 sub{dup}repeat]def /MultipleDataSources true def /Decode colorSpaceElemCnt[exch{0 1}repeat]def }if @@ -4196,9 +4196,9 @@ userdict/Adobe_AGM_Image 71 dict dup begin put Names convert_to_process{ CSA get_csa_by_name 0 get/DeviceCMYK eq{ /DataSource - Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul + Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse - 4/devicen_colorspace_dict AGMCORE_gget/TintTransform get + 4/devicen_colorspace_dict AGMCORE_gget/TintTransform get devn_alt_datasource filter_cmyk 0()/SubFileDecode filter def /MultipleDataSources false def @@ -4216,14 +4216,14 @@ userdict/Adobe_AGM_Image 71 dict dup begin put /Decode colorSpaceElemCnt[exch{0 1}repeat]def currentdict imageormask_sys }{ - gsave + gsave knockout_unitsq grestore - currentdict consumeimagedata + currentdict consumeimagedata }ifelse }ifelse } - { + { /devicen_colorspace_dict AGMCORE_gget/names_index known{ Operator/imagemask ne{ MultipleDataSources{ @@ -4237,15 +4237,15 @@ userdict/Adobe_AGM_Image 71 dict dup begin put currentdict imageormask_sys }{ currentoverprint not Operator/imagemask eq and{ - currentdict imageormask_sys + currentdict imageormask_sys }{ currentoverprint not { - gsave + gsave knockout_unitsq grestore }if - currentdict consumeimagedata + currentdict consumeimagedata }ifelse }ifelse }ifelse @@ -4266,11 +4266,11 @@ userdict/Adobe_AGM_Image 71 dict dup begin put currentcmykcolor add add add 0 eq{ currentdict consumeimagedata }{ - level3{ - currentcmykcolor - /AGMIMG_k xdf - /AGMIMG_y xdf - /AGMIMG_m xdf + level3{ + currentcmykcolor + /AGMIMG_k xdf + /AGMIMG_y xdf + /AGMIMG_m xdf /AGMIMG_c xdf Operator/imagemask eq{ [/DeviceN[ @@ -4283,10 +4283,10 @@ userdict/Adobe_AGM_Image 71 dict dup begin put AGMIMG_m 0 ne{AGMIMG_m}if AGMIMG_y 0 ne{AGMIMG_y}if AGMIMG_k 0 ne{AGMIMG_k}if - setcolor - }{ + setcolor + }{ /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def - [/Indexed + [/Indexed [ /DeviceN[ AGMIMG_c 0 ne{/Cyan}if @@ -4298,34 +4298,34 @@ userdict/Adobe_AGM_Image 71 dict dup begin put AGMIMG_k 0 eq{0}if AGMIMG_y 0 eq{0 exch}if AGMIMG_m 0 eq{0 3 1 roll}if - AGMIMG_c 0 eq{0 4 1 roll}if + AGMIMG_c 0 eq{0 4 1 roll}if } ] 255 { - 255 div + 255 div mark exch dup dup dup AGMIMG_k 0 ne{ - /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop counttomark 1 roll }{ pop }ifelse AGMIMG_y 0 ne{ - /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop counttomark 1 roll }{ pop }ifelse AGMIMG_m 0 ne{ - /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop counttomark 1 roll }{ pop }ifelse AGMIMG_c 0 ne{ - /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop counttomark 1 roll }{ pop @@ -4368,7 +4368,7 @@ userdict/Adobe_AGM_Image 71 dict dup begin put 0 ne{ [/Separation/Cyan/DeviceGray{}]setcolorspace gsave - /Cyan + /Cyan [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{pop pop pop 1 exch sub}/exec cvx] cvx modify_halftone_xfer Operator currentdict read_image_file @@ -4385,7 +4385,7 @@ userdict/Adobe_AGM_Image 71 dict dup begin put { begin AGMIMG_init_common - save mark + save mark currentdict AGMCORE_host_sep{ Operator/knockout eq{ @@ -4465,17 +4465,17 @@ userdict/Adobe_AGM_Image 71 dict dup begin put /indexed_colorspace_dict AGMCORE_gget begin begin Indexed_DeviceN not{ - currentcolorspace + currentcolorspace dup 1/DeviceGray put dup 3 currentcolorspace 2 get 1 add string 0 1 2 3 AGMCORE_get_ink_data 4 currentcolorspace 3 get length 1 sub { dup 4 idiv exch currentcolorspace 3 get exch get 255 exch sub 2 index 3 1 roll put - }for + }for put setcolorspace }if - currentdict + currentdict Operator/imagemask eq{ AGMIMG_&imagemask }{ @@ -4506,7 +4506,7 @@ userdict/Adobe_AGM_Image 71 dict dup begin put /MultipleDataSources false cdndf /SkipImageProc{false}cdndf /Decode[ - 0 + 0 currentcolorspace 0 get/Indexed eq{ 2 BitsPerComponent exp 1 sub }{ @@ -4545,7 +4545,7 @@ userdict/Adobe_AGM_Image 71 dict dup begin put }def /spot_alias { - /mapto_sep_imageormask + /mapto_sep_imageormask { dup type/dicttype ne{ 12 dict begin @@ -4562,7 +4562,7 @@ userdict/Adobe_AGM_Image 71 dict dup begin put /Decode[/customcolor_tint AGMCORE_gget 0]def /Operator/image def /SkipImageProc{false}def - currentdict + currentdict end sep_imageormask }bdf @@ -4576,7 +4576,7 @@ userdict/Adobe_AGM_Image 71 dict dup begin put /TintMethod/Subtractive /TintProc null /MappedCSA null - /NComponents 4 + /NComponents 4 /Components[AGMIMG_colorAry aload pop pop] >> setsepcolorspace @@ -4595,7 +4595,7 @@ userdict/Adobe_AGM_Image 71 dict dup begin put true set_spot_alias }{ //Adobe_AGM_Image/AGMIMG_&customcolorimage get exec - }ifelse + }ifelse }bdf }def /snap_to_device @@ -4613,7 +4613,7 @@ userdict/Adobe_AGM_Image 71 dict dup begin put 1 1 transform AGMIMG_ySign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch AGMIMG_xSign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch - itransform/AGMIMG_urY exch def/AGMIMG_urX exch def + itransform/AGMIMG_urY exch def/AGMIMG_urX exch def [AGMIMG_urX AGMIMG_llX sub 0 0 AGMIMG_urY AGMIMG_llY sub AGMIMG_llX AGMIMG_llY]concat }{ }ifelse @@ -4623,17 +4623,17 @@ level2 not{ /colorbuf { 0 1 2 index length 1 sub{ - dup 2 index exch get - 255 exch sub - 2 index - 3 1 roll + dup 2 index exch get + 255 exch sub + 2 index + 3 1 roll put }for }def /tint_image_to_color { begin - Width Height BitsPerComponent ImageMatrix + Width Height BitsPerComponent ImageMatrix /DataSource load end Adobe_AGM_Image begin @@ -4651,9 +4651,9 @@ level2 not{ dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop } addprocs - {AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf}true 4 colorimage + {AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf}true 4 colorimage end - }def + }def /sep_imageormask_lev1 { begin @@ -4669,10 +4669,10 @@ level2 not{ }{ 0 0 0 Components aload pop 1 exch sub }ifelse - Adobe_AGM_Image/AGMIMG_k xddf - Adobe_AGM_Image/AGMIMG_y xddf - Adobe_AGM_Image/AGMIMG_m xddf - Adobe_AGM_Image/AGMIMG_c xddf + Adobe_AGM_Image/AGMIMG_k xddf + Adobe_AGM_Image/AGMIMG_y xddf + Adobe_AGM_Image/AGMIMG_m xddf + Adobe_AGM_Image/AGMIMG_c xddf AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{ {AGMIMG_k mul 1 exch sub}currenttransfer addprocs settransfer currentdict imageormask @@ -4696,7 +4696,7 @@ level2 not{ {255 mul round cvi ColorLookup exch get 2 get 1 exch sub}exch addprocs 4 1 roll {255 mul round cvi ColorLookup exch get 1 get 1 exch sub}exch addprocs 4 1 roll {255 mul round cvi ColorLookup exch get 0 get 1 exch sub}exch addprocs 4 1 roll - setcolortransfer + setcolortransfer currentdict tint_image_to_color }{ currentcolortransfer @@ -4704,7 +4704,7 @@ level2 not{ {255 mul round cvi ColorLookup exch get 2 get}exch addprocs 4 1 roll {255 mul round cvi ColorLookup exch get 1 get}exch addprocs 4 1 roll {255 mul round cvi ColorLookup exch get 0 get}exch addprocs 4 1 roll - setcolortransfer + setcolortransfer currentdict tint_image_to_color }ifelse }ifelse @@ -4717,10 +4717,10 @@ level2 not{ begin /sep_colorspace_dict AGMCORE_gget/Components known{ Components aload pop - Adobe_AGM_Image/AGMIMG_k xddf - Adobe_AGM_Image/AGMIMG_y xddf - Adobe_AGM_Image/AGMIMG_m xddf - Adobe_AGM_Image/AGMIMG_c xddf + Adobe_AGM_Image/AGMIMG_k xddf + Adobe_AGM_Image/AGMIMG_y xddf + Adobe_AGM_Image/AGMIMG_m xddf + Adobe_AGM_Image/AGMIMG_c xddf {AGMIMG_c mul 1 exch sub} {AGMIMG_m mul 1 exch sub} {AGMIMG_y mul 1 exch sub} @@ -4754,7 +4754,7 @@ level2 not{ {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll - setcolortransfer + setcolortransfer tint_image_to_color }{ currentcolortransfer @@ -4762,7 +4762,7 @@ level2 not{ {3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div}exch addprocs 4 1 roll {3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div}exch addprocs 4 1 roll {3 mul HiVal mul round cvi Lookup exch get HiVal div}exch addprocs 4 1 roll - setcolortransfer + setcolortransfer tint_image_to_color }ifelse }ifelse @@ -4892,27 +4892,27 @@ Adobe_CoolType_Core/ps get exec Adobe_AGM_Image/ps gx </rdf:Description> </rdf:RDF> </x:xmpmeta> - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + <?xpacket end="w"?> % &&end XMP packet marker&& [{ai_metadata_stream_123} <</Type /Metadata /Subtype /XML>> /PUT AI11_PDFMark5 [/Document 1 dict begin /Metadata {ai_metadata_stream_123} def currentdict end /BDC AI11_PDFMark5 %ADOEndClientInjection: PageSetup End "AI11EPS" %%EndPageSetup @@ -4940,29 +4940,29 @@ clp 40.6597 .91748 li cp false sop -/0 +/0 [/DeviceCMYK] /CSA add_res level3{ gsave clp [-5.12966e-06 117.353 -117.353 -5.12966e-06 20.5796 7.771 ]ct -/0 +/0 << -/ShadingType 2 +/ShadingType 2 /ColorSpace /0 /CSA get_res /Coords [0 0 1 0 ] /Domain [0 1 ] /Extend[ true true] /Function << -/Domain[0 1 ] +/Domain[0 1 ] /FunctionType 3 /Functions [ << -/Domain[0 1 ] -/Range[0 1 0 1 0 1 0 1 ] +/Domain[0 1 ] +/Range[0 1 0 1 0 1 0 1 ] /FunctionType 0 -/Order 1 +/Order 1 /DataSource <~z!W`<%"Tni,#6b82$3pe9%LNOC&e,9M'bCoV)&!Y`*#9:i*uPpr,9.['-QaE1.j?/;0-qqF1FXaQ2_?T ]4"r>g5;P(q6T6q(7li[290GE<:I.8H;aj(S=%Gj^>YRll@8Kc$AQ2V0Bie@;Cg1'FDdH]PEa`>[G%>( fH"^dsHu!C)J8K'5JoGT@Kl_2LLj!hYMg9IfNdQ'rOFMU*PCe37Q%a`DR"p8PRYlb]S;i:jSr\_!T95% @@ -4973,10 +4973,10 @@ fH"^dsHu!C)J8K'5JoGT@Kl_2LLj!hYMg9IfNdQ'rOFMU*PCe37Q%a`DR"p8PRYlb]S;i:jSr\_!T95% /Size [64 ] >> << -/Domain[0 1 ] -/Range[0 1 0 1 0 1 0 1 ] +/Domain[0 1 ] +/Range[0 1 0 1 0 1 0 1 ] /FunctionType 0 -/Order 1 +/Order 1 /DataSource <~ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7 ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7 ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7 @@ -5000,8 +5000,8 @@ clp /0 { /0 /CSA get_res setcolorspace << -/NumSamples 256 -/NumComp 4 +/NumSamples 256 +/NumComp 4 /Scaling[[.00392157 0 ][.00392157 0 ][.00392157 0 ][.00392157 0 ]] /Samples[ <~!!!$#!WrQ/"U5/9#RLhG$k3[W&/#Th'GVB")&X>3*$$(B+<_pR,UFfd.4Qi!/MAe41,CaE2`NfY4$5Yj @@ -5095,23 +5095,23 @@ level3{ gsave clp [-6.39794e-06 -114.618 -146.368 5.0101e-06 20.5796 147.394 ]ct -/1 +/1 << -/ShadingType 2 +/ShadingType 2 /ColorSpace /0 /CSA get_res /Coords [0 0 1 0 ] /Domain [0 1 ] /Extend[ true true] /Function << -/Domain[0 1 ] +/Domain[0 1 ] /FunctionType 3 /Functions [ << -/Domain[0 1 ] -/Range[0 1 0 1 0 1 0 1 ] +/Domain[0 1 ] +/Range[0 1 0 1 0 1 0 1 ] /FunctionType 0 -/Order 1 +/Order 1 /DataSource <~ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7 ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7 ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7 @@ -5123,10 +5123,10 @@ ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7ZE0h7 /Size [64 ] >> << -/Domain[0 1 ] -/Range[0 1 0 1 0 1 0 1 ] +/Domain[0 1 ] +/Range[0 1 0 1 0 1 0 1 ] /FunctionType 0 -/Order 1 +/Order 1 /DataSource <~ZE0h7Z)aV-Yc=D#YGe+lY,@k`XehSTXJDAIX.l&<Wh>`0WLfE#Vk')lVONc`Um[?SUR$sGTp1R;T95%- Sr\_!S;i:jRYlb]R"p8PQ%a`DPCe37OFMU*NdQ'rMg9IfLj!hYKl_2LJoGT@J8K'5Hu!C)H"^dsG%>(f Ea`>[DdH]PCg1'FBie@;AQ2V0@8Kc$>YRll=%Gj^;aj(S:I.8H90GE<7li[26T6q(5;P(q4"r>g2_?T] @@ -5150,8 +5150,8 @@ clp /1 { /0 /CSA get_res setcolorspace << -/NumSamples 256 -/NumComp 4 +/NumSamples 256 +/NumComp 4 /Scaling[[.00392157 0 ][.00392157 0 ][.00392157 0 ][.00392157 0 ]] /Samples[ <~Z*CR=Z*CR=Z*CR=Z*CR=Z*CR=Z*CR=Z*CR=Z*CR=Z*CR=Z*CR=Z*CR=Z*:I:YHP.5Y-+q0Xf\\+XK8J' diff --git a/plugins/PrivacyManager/DoNotTrackHeaderChecker.php b/plugins/PrivacyManager/DoNotTrackHeaderChecker.php index b8e37a4771d83404d007e2457756bc4f356c444d..b857debf853db5a2ebe8e2afbcf71ddc08029f4b 100644 --- a/plugins/PrivacyManager/DoNotTrackHeaderChecker.php +++ b/plugins/PrivacyManager/DoNotTrackHeaderChecker.php @@ -14,10 +14,10 @@ use Piwik\Tracker\Request; /** * Excludes visits where user agent's request contains either: - * + * * - X-Do-Not-Track header (used by AdBlockPlus and NoScript) * - DNT header (used by Mozilla) - * + * */ class DoNotTrackHeaderChecker { diff --git a/plugins/Provider/Columns/Provider.php b/plugins/Provider/Columns/Provider.php index 2c33969cb9fdddec43a883614ebad0403d2ae6cf..c20b75ac9c041e2dcd55969301bc26fa692a318c 100644 --- a/plugins/Provider/Columns/Provider.php +++ b/plugins/Provider/Columns/Provider.php @@ -20,7 +20,7 @@ use Piwik\Plugins\PrivacyManager\Config as PrivacyManagerConfig; use Piwik\Plugins\Provider\Provider as ProviderPlugin; class Provider extends VisitDimension -{ +{ protected $columnName = 'location_provider'; protected function configureSegments() diff --git a/plugins/Referrers/Columns/Referrer.php b/plugins/Referrers/Columns/Referrer.php index ac22e6f5c97bcda0220778f899a79f4c30ca3af9..5d1daf16ba7c62fb64067ccfd472718c596d9e45 100644 --- a/plugins/Referrers/Columns/Referrer.php +++ b/plugins/Referrers/Columns/Referrer.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class Referrer extends Dimension -{ +{ public function getName() { return Piwik::translate('Referrers_Referrer'); diff --git a/plugins/Referrers/Columns/SearchEngine.php b/plugins/Referrers/Columns/SearchEngine.php index 4c2a0740e8ff95373823db4e6fd6d7e952f3fbce..c314a801af37a6d9f9601d4ae1bb4c11664f5f47 100644 --- a/plugins/Referrers/Columns/SearchEngine.php +++ b/plugins/Referrers/Columns/SearchEngine.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class SearchEngine extends Dimension -{ +{ public function getName() { return Piwik::translate('Referrers_ColumnSearchEngine'); diff --git a/plugins/Referrers/Columns/SocialNetwork.php b/plugins/Referrers/Columns/SocialNetwork.php index 62ce964c37c9f41aea795ab990036ded378a1622..66478d167f0232d5300d5f77e2710b9165194272 100644 --- a/plugins/Referrers/Columns/SocialNetwork.php +++ b/plugins/Referrers/Columns/SocialNetwork.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class SocialNetwork extends Dimension -{ +{ public function getName() { return Piwik::translate('Referrers_ColumnSocial'); diff --git a/plugins/Referrers/Columns/Website.php b/plugins/Referrers/Columns/Website.php index e0ce2b284541df66d71d9d3771dfb528ab7cab3e..53b143d6933f1ae33956ef2d603347aedfb7bdc3 100644 --- a/plugins/Referrers/Columns/Website.php +++ b/plugins/Referrers/Columns/Website.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class Website extends Dimension -{ +{ public function getName() { return Piwik::translate('General_Website'); diff --git a/plugins/Referrers/Columns/WebsitePage.php b/plugins/Referrers/Columns/WebsitePage.php index 5ac2bc63f3306113aa91035a770bf4cb5ea08aca..963c83414ba54732dc6a5c76c37f0c93c9fc0b83 100644 --- a/plugins/Referrers/Columns/WebsitePage.php +++ b/plugins/Referrers/Columns/WebsitePage.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class WebsitePage extends Dimension -{ +{ public function getName() { return Piwik::translate('Referrers_ColumnWebsitePage'); diff --git a/plugins/SEO/templates/getRank.twig b/plugins/SEO/templates/getRank.twig index f513609c0ad52a812dfcd966b55ca2e11cc46b21..08839997b3b0c632cddbd66a03b019a6a6b01c48 100644 --- a/plugins/SEO/templates/getRank.twig +++ b/plugins/SEO/templates/getRank.twig @@ -5,7 +5,7 @@ <div align="left" class="mediumtext"> {{ 'Installation_SetupWebSiteURL'|translate|capitalize }} <input type="text" id="seoUrl" size="15" value="{{ urlToRank }}" class="textbox"/> - <span style="padding-left:2px;"> + <span style="padding-left:2px;"> <input type="submit" id="rankbutton" value="{{ 'SEO_Rank'|translate }}"/> </span> </div> diff --git a/plugins/ScheduledReports/API.php b/plugins/ScheduledReports/API.php index cf02d1eb0f0c01366e2978e5c398936986feed6d..3ea8a05c28b4883282bf85d28b4ecbfe0eaf11fd 100644 --- a/plugins/ScheduledReports/API.php +++ b/plugins/ScheduledReports/API.php @@ -388,10 +388,10 @@ class API extends \Piwik\Plugin\API * * This event can be used to modify the report data or report metadata of one or more reports * in a scheduled report, before the scheduled report is rendered and delivered. - * + * * TODO: list data available in $report or make it a new class that can be documented (same for * all other events that use a $report) - * + * * @param array &$processedReports The list of processed reports in the scheduled * report. Entries includes report data and metadata for each report. * @param string $reportType A string ID describing how the scheduled report will be sent, eg, @@ -409,10 +409,10 @@ class API extends \Piwik\Plugin\API /** * Triggered when obtaining a renderer instance based on the scheduled report output format. - * + * * Plugins that provide new scheduled report output formats should use this event to * handle their new report formats. - * + * * @param ReportRenderer &$reportRenderer This variable should be set to an instance that * extends {@link Piwik\ReportRenderer} by one of the event * subscribers. @@ -524,7 +524,7 @@ class API extends \Piwik\Plugin\API * * Plugins that provide new scheduled report transport mediums should use this event to * send the scheduled report. - * + * * @param string $reportType A string ID describing how the report is sent, eg, * `'sms'` or `'email'`. * @param array $report An array describing the scheduled report that is being @@ -589,10 +589,10 @@ class API extends \Piwik\Plugin\API /** * Triggered when gathering the available parameters for a scheduled report type. - * + * * Plugins that provide their own scheduled report transport mediums should use this * event to list the available report parameters for their transport medium. - * + * * @param array $availableParameters The list of available parameters for this report type. * This is an array that maps paramater IDs with a boolean * that indicates whether the parameter is mandatory or not. @@ -618,10 +618,10 @@ class API extends \Piwik\Plugin\API /** * Triggered when validating the parameters for a scheduled report. - * + * * Plugins that provide their own scheduled reports backend should use this * event to validate the custom parameters defined with {@link ScheduledReports::getReportParameters()}. - * + * * @param array $parameters The list of parameters for the scheduled report. * @param string $reportType A string ID describing how the report is sent, eg, * `'sms'` or `'email'`. @@ -735,10 +735,10 @@ class API extends \Piwik\Plugin\API * TODO: change this event so it returns a list of API methods instead of report metadata arrays. * Triggered when gathering the list of Piwik reports that can be used with a certain * transport medium. - * + * * Plugins that provide their own transport mediums should use this * event to list the Piwik reports that their backend supports. - * + * * @param array &$availableReportMetadata An array containg report metadata for each supported * report. * @param string $reportType A string ID describing how the report is sent, eg, @@ -763,11 +763,11 @@ class API extends \Piwik\Plugin\API /** * Triggered when we're determining if a scheduled report transport medium can * handle sending multiple Piwik reports in one scheduled report or not. - * + * * Plugins that provide their own transport mediums should use this * event to specify whether their backend can send more than one Piwik report * at a time. - * + * * @param bool &$allowMultipleReports Whether the backend type can handle multiple * Piwik reports or not. * @param string $reportType A string ID describing how the report is sent, eg, @@ -789,10 +789,10 @@ class API extends \Piwik\Plugin\API /** * Triggered when gathering all available transport mediums. - * + * * Plugins that provide their own transport mediums should use this * event to make their medium available. - * + * * @param array &$reportTypes An array mapping transport medium IDs with the paths to those * mediums' icons. Add your new backend's ID to this array. */ @@ -810,10 +810,10 @@ class API extends \Piwik\Plugin\API /** * Triggered when gathering all available scheduled report formats. - * + * * Plugins that provide their own scheduled report format should use * this event to make their format available. - * + * * @param array &$reportFormats An array mapping string IDs for each available * scheduled report format with icon paths for those * formats. Add your new format's ID to this array. @@ -837,11 +837,11 @@ class API extends \Piwik\Plugin\API /** * Triggered when getting the list of recipients of a scheduled report. - * + * * Plugins that provide their own scheduled report transport medium should use this event * to extract the list of recipients their backend's specific scheduled report * format. - * + * * @param array &$recipients An array of strings describing each of the scheduled * reports recipients. Can be, for example, a list of email * addresses or phone numbers or whatever else your plugin diff --git a/plugins/SegmentEditor/javascripts/Segmentation.js b/plugins/SegmentEditor/javascripts/Segmentation.js index 3a11eb40034a57299014b44f2af17ff1f6bdfae6..3e965e476711fa686a9dba7f6b48d476740ce796 100644 --- a/plugins/SegmentEditor/javascripts/Segmentation.js +++ b/plugins/SegmentEditor/javascripts/Segmentation.js @@ -43,7 +43,7 @@ Segmentation = (function($) { self.availableMatches["metric"][">="] = self.translations['General_OperationAtLeast']; self.availableMatches["metric"]["<"] = self.translations['General_OperationLessThan']; self.availableMatches["metric"][">"] = self.translations['General_OperationGreaterThan']; - + self.availableMatches["dimension"] = []; self.availableMatches["dimension"]["=="] = self.translations['General_OperationIs']; self.availableMatches["dimension"]["!="] = self.translations['General_OperationIsNot']; @@ -74,7 +74,7 @@ Segmentation = (function($) { if(typeof length === "undefined") length = 18; if(typeof name === "undefined") name = ""; var i; - + if(name.length > length) { return name.slice(0, length).trim() + "..."; } @@ -1087,7 +1087,7 @@ $(document).ready(function() { /** * Sets up and handles events for the segment selector & editor control. - * + * * @param {Element} element The HTML element generated by the SegmentSelectorControl PHP class. Should * have the CSS class 'segmentEditorPanel'. * @constructor diff --git a/plugins/SitesManager/API.php b/plugins/SitesManager/API.php index c44a269b9120f36f07152eadbcb01ce87c71f270..d55c40686e3bd8453dee35947b595ae53f7ee3c3 100644 --- a/plugins/SitesManager/API.php +++ b/plugins/SitesManager/API.php @@ -673,11 +673,11 @@ class API extends \Piwik\Plugin\API /** * Triggered after a site has been deleted. - * + * * Plugins can use this event to remove site specific values or settings, such as removing all * goals that belong to a specific website. If you store any data related to a website you * should clean up that information here. - * + * * @param int $idSite The ID of the site being deleted. */ Piwik::postEvent('SitesManager.deleteSite.end', array($idSite)); diff --git a/plugins/Transitions/stylesheets/_transitionColors.less b/plugins/Transitions/stylesheets/_transitionColors.less index e74d16b341ed6b2d07b90cb851a8903d968550b6..07ad7c3b9bf6a5949c79efe586b2b6a3d8ca6c32 100644 --- a/plugins/Transitions/stylesheets/_transitionColors.less +++ b/plugins/Transitions/stylesheets/_transitionColors.less @@ -1,6 +1,6 @@ -// +// // transitions colors -// +// // colors for entries gradients .transition-entries[data-name=light] { diff --git a/plugins/UserCountry/Columns/City.php b/plugins/UserCountry/Columns/City.php index 3f97a0b7c841785c61a3cb363f6b3df02dbcfe00..3521768f4dc21eb5474f17330e65f453a60d7f19 100644 --- a/plugins/UserCountry/Columns/City.php +++ b/plugins/UserCountry/Columns/City.php @@ -16,7 +16,7 @@ use Piwik\Tracker\Action; use Piwik\Plugins\UserCountry\Segment; class City extends Base -{ +{ protected $columnName = 'location_city'; protected $columnType = 'varchar(255) DEFAULT NULL'; diff --git a/plugins/UserCountry/Columns/Country.php b/plugins/UserCountry/Columns/Country.php index f2b5872e2e62c840cbeed79ad2c7a3f8bf64cf43..31e2839a54f2db0a07e12dba9adc3f67fefaa787 100644 --- a/plugins/UserCountry/Columns/Country.php +++ b/plugins/UserCountry/Columns/Country.php @@ -22,7 +22,7 @@ use Piwik\Tracker\Action; use Piwik\Tracker\Request; class Country extends Base -{ +{ protected $columnName = 'location_country'; protected $columnType = 'CHAR(3) NOT NULL'; diff --git a/plugins/UserCountry/Columns/Provider.php b/plugins/UserCountry/Columns/Provider.php index d361fa18c61eba077a0b1396b5b8c1b8d11cd09e..98c5bf97cac3995ff8071f11a0a33eec4a8334b9 100644 --- a/plugins/UserCountry/Columns/Provider.php +++ b/plugins/UserCountry/Columns/Provider.php @@ -15,7 +15,7 @@ use Piwik\Tracker\Action; use Piwik\Tracker\Request; class Provider extends Base -{ +{ protected $columnName = 'location_provider'; /** diff --git a/plugins/UserCountry/Columns/Region.php b/plugins/UserCountry/Columns/Region.php index 78dacb4974f3794dece5e5c7608f4cb8a29441f3..5b749673cfdc8740905f0bd5c25dd558501e4627 100644 --- a/plugins/UserCountry/Columns/Region.php +++ b/plugins/UserCountry/Columns/Region.php @@ -16,7 +16,7 @@ use Piwik\Tracker\Visitor; use Piwik\Tracker\Action; class Region extends Base -{ +{ protected $columnName = 'location_region'; protected $columnType = 'char(2) DEFAULT NULL'; diff --git a/plugins/UserCountry/GeoIPAutoUpdater.php b/plugins/UserCountry/GeoIPAutoUpdater.php index a581e4ca3ae881fba1a62bce38ca6ebccbe3b457..035f2fcd11469f30eb73523300f6b365f58c6a8c 100755 --- a/plugins/UserCountry/GeoIPAutoUpdater.php +++ b/plugins/UserCountry/GeoIPAutoUpdater.php @@ -332,7 +332,7 @@ class GeoIPAutoUpdater extends ScheduledTask // set period option if (!empty($options['period'])) { $period = $options['period']; - + if ($period != self::SCHEDULE_PERIOD_MONTHLY && $period != self::SCHEDULE_PERIOD_WEEKLY ) { @@ -622,7 +622,7 @@ class GeoIPAutoUpdater extends ScheduledTask /** * Returns the next scheduled time for the auto updater. - * + * * @return Date|false */ public static function getNextRunTime() diff --git a/plugins/UserCountry/templates/_updaterManage.twig b/plugins/UserCountry/templates/_updaterManage.twig index 2bd6d9df6d39854d2c66b218d5fbc339eb75d2dd..f094d5ee9f89bf831b6221d1383c85ad40ffbe0c 100755 --- a/plugins/UserCountry/templates/_updaterManage.twig +++ b/plugins/UserCountry/templates/_updaterManage.twig @@ -37,7 +37,7 @@ <td id="geoip-update-period-cell"> <input type="radio" name="geoip-update-period" value="month" id="geoip-update-period-month" {% if geoIPUpdatePeriod == 'month' %}checked="checked"{% endif %} /> <label for="geoip-update-period-month">{{ 'CoreHome_PeriodMonth'|translate }}</label> - + <input type="radio" name="geoip-update-period" value="week" id="geoip-update-period-week" {% if geoIPUpdatePeriod == 'week' %}checked="checked"{% endif %}/> <label for="geoip-update-period-week">{{ 'CoreHome_PeriodWeek'|translate }}</label> </td> diff --git a/plugins/UserSettings/Columns/BrowserFamily.php b/plugins/UserSettings/Columns/BrowserFamily.php index 1de0c4be8d613625348434133a1cda9cb3290308..4893ded787f5c35c9c05621940306cb61b587f84 100644 --- a/plugins/UserSettings/Columns/BrowserFamily.php +++ b/plugins/UserSettings/Columns/BrowserFamily.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class BrowserFamily extends Dimension -{ +{ public function getName() { return Piwik::translate('UserSettings_ColumnBrowserFamily'); diff --git a/plugins/UserSettings/Columns/BrowserVersion.php b/plugins/UserSettings/Columns/BrowserVersion.php index 29c753ba609338e918893c24fdb1fc1763573c82..ea30ea07817f9821cce0f3e484fb2444f8aed1dd 100644 --- a/plugins/UserSettings/Columns/BrowserVersion.php +++ b/plugins/UserSettings/Columns/BrowserVersion.php @@ -12,7 +12,7 @@ use Piwik\Piwik; use Piwik\Plugins\UserSettings\Segment; class BrowserVersion extends \Piwik\Plugins\DevicesDetection\Columns\BrowserVersion -{ +{ protected $columnName = 'config_browser_version'; protected $columnType = 'VARCHAR(20) NOT NULL'; diff --git a/plugins/UserSettings/Columns/Configuration.php b/plugins/UserSettings/Columns/Configuration.php index c0b636d4cd9ee5ce702458470834d8fc72bc8e8f..7577c064953a9ca020f3ff8a0d631d626985ba56 100644 --- a/plugins/UserSettings/Columns/Configuration.php +++ b/plugins/UserSettings/Columns/Configuration.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class Configuration extends Dimension -{ +{ public function getName() { return Piwik::translate('UserSettings_ColumnConfiguration'); diff --git a/plugins/UserSettings/Columns/MobilevsDesktop.php b/plugins/UserSettings/Columns/MobilevsDesktop.php index 98a0ad97993be2604a58b6f09f4819aa89cf1836..79721238b7cde963b3b3851d424c14847634f996 100644 --- a/plugins/UserSettings/Columns/MobilevsDesktop.php +++ b/plugins/UserSettings/Columns/MobilevsDesktop.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class MobilevsDesktop extends Dimension -{ +{ public function getName() { return Piwik::translate('UserSettings_MobileVsDesktop'); diff --git a/plugins/UserSettings/Columns/Operatingsystem.php b/plugins/UserSettings/Columns/Operatingsystem.php index 0476fdf114569d698599626fc7b91cabca92a0bf..82a00aa8c4c3dd7bf15c0f2bff5a7a28182dea08 100644 --- a/plugins/UserSettings/Columns/Operatingsystem.php +++ b/plugins/UserSettings/Columns/Operatingsystem.php @@ -13,7 +13,7 @@ use Piwik\Plugins\DevicesDetection\Columns\Os; use Piwik\Plugins\UserSettings\Segment; class Operatingsystem extends Os -{ +{ protected $columnName = 'config_os'; protected $columnType = 'CHAR(3) NOT NULL'; diff --git a/plugins/UserSettings/Columns/OperatingsystemFamily.php b/plugins/UserSettings/Columns/OperatingsystemFamily.php index cdec387d19bc294ac9130c0d261bc22b94edc64c..7f8ed89a96f9c046d627efd09fc1f7eeb4e03185 100644 --- a/plugins/UserSettings/Columns/OperatingsystemFamily.php +++ b/plugins/UserSettings/Columns/OperatingsystemFamily.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class OperatingsystemFamily extends Dimension -{ +{ public function getName() { return Piwik::translate('UserSettings_OperatingSystemFamily'); diff --git a/plugins/UserSettings/Columns/Plugin.php b/plugins/UserSettings/Columns/Plugin.php index dd047f94790f40b3218e72a128449a10360b600b..a6ecef0c29978832659c94c8b254bb662f38e64a 100644 --- a/plugins/UserSettings/Columns/Plugin.php +++ b/plugins/UserSettings/Columns/Plugin.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class Plugin extends Dimension -{ +{ public function getName() { return Piwik::translate('General_Plugin'); diff --git a/plugins/UserSettings/Columns/PluginCookie.php b/plugins/UserSettings/Columns/PluginCookie.php index f8b93dbfc17186441cb823c6828e923833e9900c..8af841ca52e1484d01b0620d7f89d869157e7067 100644 --- a/plugins/UserSettings/Columns/PluginCookie.php +++ b/plugins/UserSettings/Columns/PluginCookie.php @@ -15,7 +15,7 @@ use Piwik\Tracker\Visitor; use Piwik\Tracker\Action; class PluginCookie extends VisitDimension -{ +{ protected $columnName = 'config_cookie'; protected $columnType = 'TINYINT(1) NOT NULL'; diff --git a/plugins/UserSettings/Columns/PluginDirector.php b/plugins/UserSettings/Columns/PluginDirector.php index 20a659929502b59a65083389a9cd939482893045..58019826ce292114c66e14bc53aab42f0c51a4bf 100644 --- a/plugins/UserSettings/Columns/PluginDirector.php +++ b/plugins/UserSettings/Columns/PluginDirector.php @@ -15,7 +15,7 @@ use Piwik\Tracker\Visitor; use Piwik\Tracker\Action; class PluginDirector extends VisitDimension -{ +{ protected $columnName = 'config_director'; protected $columnType = 'TINYINT(1) NOT NULL'; diff --git a/plugins/UserSettings/Columns/PluginFlash.php b/plugins/UserSettings/Columns/PluginFlash.php index 058429edbf7bde3b27ceb223c126b3a391206501..d691d200a43afa38831b4aa5d123e26d9317f53e 100644 --- a/plugins/UserSettings/Columns/PluginFlash.php +++ b/plugins/UserSettings/Columns/PluginFlash.php @@ -15,7 +15,7 @@ use Piwik\Tracker\Visitor; use Piwik\Tracker\Action; class PluginFlash extends VisitDimension -{ +{ protected $columnName = 'config_flash'; protected $columnType = 'TINYINT(1) NOT NULL'; diff --git a/plugins/UserSettings/Columns/PluginGears.php b/plugins/UserSettings/Columns/PluginGears.php index 08161fa9feb41b5fb7bda034cfd4aa808406a11d..edf024877e0186ed2d6f5e11a74aad95cc5289d6 100644 --- a/plugins/UserSettings/Columns/PluginGears.php +++ b/plugins/UserSettings/Columns/PluginGears.php @@ -15,7 +15,7 @@ use Piwik\Tracker\Visitor; use Piwik\Tracker\Action; class PluginGears extends VisitDimension -{ +{ protected $columnName = 'config_gears'; protected $columnType = 'TINYINT(1) NOT NULL'; diff --git a/plugins/UserSettings/Columns/PluginJava.php b/plugins/UserSettings/Columns/PluginJava.php index 0cc6bdcd2326de19161b48325346979cc8116f6f..0db9b81778f4f99f58e60c3392b1a2b4a7989e40 100644 --- a/plugins/UserSettings/Columns/PluginJava.php +++ b/plugins/UserSettings/Columns/PluginJava.php @@ -15,7 +15,7 @@ use Piwik\Tracker\Visitor; use Piwik\Tracker\Action; class PluginJava extends VisitDimension -{ +{ protected $columnName = 'config_java'; protected $columnType = 'TINYINT(1) NOT NULL'; diff --git a/plugins/UserSettings/Columns/PluginPdf.php b/plugins/UserSettings/Columns/PluginPdf.php index e9b1ac396bcdfac8ee1695e9106b1b4881e6a323..c50f92c53edc6e1babe20f23bbb8c69575631a55 100644 --- a/plugins/UserSettings/Columns/PluginPdf.php +++ b/plugins/UserSettings/Columns/PluginPdf.php @@ -15,7 +15,7 @@ use Piwik\Tracker\Visitor; use Piwik\Tracker\Action; class PluginPdf extends VisitDimension -{ +{ protected $columnName = 'config_pdf'; protected $columnType = 'TINYINT(1) NOT NULL'; diff --git a/plugins/UserSettings/Columns/PluginQuickTime.php b/plugins/UserSettings/Columns/PluginQuickTime.php index dae625084969973672190547171e1ceb25888517..ea2f85ad0b8ffb91d83a2456da24690b6a6f0b22 100644 --- a/plugins/UserSettings/Columns/PluginQuickTime.php +++ b/plugins/UserSettings/Columns/PluginQuickTime.php @@ -15,7 +15,7 @@ use Piwik\Tracker\Visitor; use Piwik\Tracker\Action; class PluginQuickTime extends VisitDimension -{ +{ protected $columnName = 'config_quicktime'; protected $columnType = 'TINYINT(1) NOT NULL'; diff --git a/plugins/UserSettings/Columns/PluginRealPlayer.php b/plugins/UserSettings/Columns/PluginRealPlayer.php index d1b904e5af49bb159e2f4fc0c291155da939a1f5..b8e17c605c277a035f411b4a1c3f985946ebca17 100644 --- a/plugins/UserSettings/Columns/PluginRealPlayer.php +++ b/plugins/UserSettings/Columns/PluginRealPlayer.php @@ -15,7 +15,7 @@ use Piwik\Tracker\Visitor; use Piwik\Tracker\Action; class PluginRealPlayer extends VisitDimension -{ +{ protected $columnName = 'config_realplayer'; protected $columnType = 'TINYINT(1) NOT NULL'; diff --git a/plugins/UserSettings/Columns/PluginSilverlight.php b/plugins/UserSettings/Columns/PluginSilverlight.php index 95c7789de2c7139bf9ce399817b3d4c90a1f75a6..f917c3d2963ac5a84156916345e77b45a1fbdeba 100644 --- a/plugins/UserSettings/Columns/PluginSilverlight.php +++ b/plugins/UserSettings/Columns/PluginSilverlight.php @@ -15,7 +15,7 @@ use Piwik\Tracker\Visitor; use Piwik\Tracker\Action; class PluginSilverlight extends VisitDimension -{ +{ protected $columnName = 'config_silverlight'; protected $columnType = 'TINYINT(1) NOT NULL'; diff --git a/plugins/UserSettings/Columns/PluginWindowsMedia.php b/plugins/UserSettings/Columns/PluginWindowsMedia.php index 1643a553bbad242e67ecad5b9b11419a778874e4..02e7088ce0e36586679997ed989980d3bbd74fcd 100644 --- a/plugins/UserSettings/Columns/PluginWindowsMedia.php +++ b/plugins/UserSettings/Columns/PluginWindowsMedia.php @@ -15,7 +15,7 @@ use Piwik\Tracker\Visitor; use Piwik\Tracker\Action; class PluginWindowsMedia extends VisitDimension -{ +{ protected $columnName = 'config_windowsmedia'; protected $columnType = 'TINYINT(1) NOT NULL'; diff --git a/plugins/UserSettings/Columns/Resolution.php b/plugins/UserSettings/Columns/Resolution.php index 511c946186afe1b80ec9b55e965063f7b182a76e..35aaf4a23e57e1407e668c24f4c5aca97440c8c0 100644 --- a/plugins/UserSettings/Columns/Resolution.php +++ b/plugins/UserSettings/Columns/Resolution.php @@ -16,7 +16,7 @@ use Piwik\Tracker\Request; use Piwik\Tracker\Visitor; class Resolution extends VisitDimension -{ +{ protected $columnName = 'config_resolution'; protected $columnType = 'VARCHAR(9) NOT NULL'; diff --git a/plugins/UserSettings/Columns/TypeOfScreen.php b/plugins/UserSettings/Columns/TypeOfScreen.php index 640eb35ea482b791fb176dc7adc9fecf3d6cc4d9..cdbc796ab244ee386269ab58252d3c7223ce652b 100644 --- a/plugins/UserSettings/Columns/TypeOfScreen.php +++ b/plugins/UserSettings/Columns/TypeOfScreen.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class TypeOfScreen extends Dimension -{ +{ public function getName() { return Piwik::translate('UserSettings_ColumnTypeOfScreen'); diff --git a/plugins/UsersManager/API.php b/plugins/UsersManager/API.php index 3fff901c3876e8db686a9e75936825889978efb7..5eb0df261faa9b3ad8c4974fb3830b61d75d072b 100644 --- a/plugins/UsersManager/API.php +++ b/plugins/UsersManager/API.php @@ -341,7 +341,7 @@ class API extends \Piwik\Plugin\API /** * Triggered after a new user is created. - * + * * @param string $userLogin The new user's login handle. */ Piwik::postEvent('UsersManager.addUser.end', array($userLogin, $email, $password, $alias)); @@ -445,7 +445,7 @@ class API extends \Piwik\Plugin\API /** * Triggered after an existing user has been updated. * Event notify about password change. - * + * * @param string $userLogin The user's login handle. * @param boolean $passwordHasBeenUpdated Flag containing information about password change. */ diff --git a/plugins/UsersManager/Model.php b/plugins/UsersManager/Model.php index d5668b19ea1486a118fc975a2d5da950999f9581..872d693ee6d6006711c80ac4b813c2c70d1f27b4 100644 --- a/plugins/UsersManager/Model.php +++ b/plugins/UsersManager/Model.php @@ -64,7 +64,7 @@ class Model foreach ($users as $login) { $return[] = $login['login']; } - + return $return; } diff --git a/plugins/VisitTime/Columns/DayOfTheWeek.php b/plugins/VisitTime/Columns/DayOfTheWeek.php index b6e39310ab2af4c9c0a3b86a9fe4f6cfbaedd448..7728c070611dc5eb16a9b826222ca7532b945d4f 100644 --- a/plugins/VisitTime/Columns/DayOfTheWeek.php +++ b/plugins/VisitTime/Columns/DayOfTheWeek.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class DayOfTheWeek extends Dimension -{ +{ public function getName() { return Piwik::translate('VisitTime_DayOfWeek'); diff --git a/plugins/VisitTime/Columns/LocalTime.php b/plugins/VisitTime/Columns/LocalTime.php index ade984c1f110eea90636c63c341d36e981424ef2..abe27d777b5b19e4faba0a0afa08a37df5717b08 100644 --- a/plugins/VisitTime/Columns/LocalTime.php +++ b/plugins/VisitTime/Columns/LocalTime.php @@ -16,7 +16,7 @@ use Piwik\Tracker\Request; use Piwik\Tracker\Visitor; class LocalTime extends VisitDimension -{ +{ protected $columnName = 'visitor_localtime'; protected $columnType = 'TIME NOT NULL'; diff --git a/plugins/VisitTime/Columns/ServerTime.php b/plugins/VisitTime/Columns/ServerTime.php index f7c1c6c3d06203d7e71f8a9ba5c897f5f3c01b4f..5ee82706a57901bbbcb7635cc25d6fb4a02916ef 100644 --- a/plugins/VisitTime/Columns/ServerTime.php +++ b/plugins/VisitTime/Columns/ServerTime.php @@ -13,7 +13,7 @@ use Piwik\Plugin\Dimension\VisitDimension; use Piwik\Plugins\VisitTime\Segment; class ServerTime extends VisitDimension -{ +{ protected $columnName = 'visit_last_action_time'; protected function configureSegments() diff --git a/plugins/VisitorInterest/Columns/PagesPerVisit.php b/plugins/VisitorInterest/Columns/PagesPerVisit.php index a64e7e28fdc31b2cc14bbb1ab131268fc9eddaf3..0d4bbe1a182b249769fbadad2c7524aad812e613 100644 --- a/plugins/VisitorInterest/Columns/PagesPerVisit.php +++ b/plugins/VisitorInterest/Columns/PagesPerVisit.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class PagesPerVisit extends Dimension -{ +{ public function getName() { return Piwik::translate('VisitorInterest_ColumnPagesPerVisit'); diff --git a/plugins/VisitorInterest/Columns/VisitDuration.php b/plugins/VisitorInterest/Columns/VisitDuration.php index 68311a013c24a2ef01987e59ccb522110d70f308..d0286bedd2cb33a12f82a16da364baa684367b5e 100644 --- a/plugins/VisitorInterest/Columns/VisitDuration.php +++ b/plugins/VisitorInterest/Columns/VisitDuration.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class VisitDuration extends Dimension -{ +{ public function getName() { return Piwik::translate('VisitorInterest_ColumnVisitDuration'); diff --git a/plugins/VisitorInterest/Columns/VisitsbyVisitNumber.php b/plugins/VisitorInterest/Columns/VisitsbyVisitNumber.php index 2d16fa5a5df0818508c81890ff5a3e7b0c28fd3e..7993fb1c240a97748bd93eee3b94f491e107ef4f 100644 --- a/plugins/VisitorInterest/Columns/VisitsbyVisitNumber.php +++ b/plugins/VisitorInterest/Columns/VisitsbyVisitNumber.php @@ -12,7 +12,7 @@ use Piwik\Columns\Dimension; use Piwik\Piwik; class VisitsbyVisitNumber extends Dimension -{ +{ public function getName() { return Piwik::translate('VisitorInterest_visitsByVisitCount'); diff --git a/plugins/VisitsSummary/Reports/Get.php b/plugins/VisitsSummary/Reports/Get.php index 83b74d987de22dcf3fd657d32b4d5d98fd58b3e6..926967875a839f25855ec31c61c4580b4269af8e 100644 --- a/plugins/VisitsSummary/Reports/Get.php +++ b/plugins/VisitsSummary/Reports/Get.php @@ -37,7 +37,7 @@ class Get extends \Piwik\Plugin\Report public function getMetrics() { $metrics = parent::getMetrics(); - + $metrics['avg_time_on_site'] = Piwik::translate('General_VisitDuration'); $metrics['max_actions'] = Piwik::translate('General_ColumnMaxActions'); diff --git a/tests/PHPUnit/Benchmarks/ArchiveQueryBenchmark.php b/tests/PHPUnit/Benchmarks/ArchiveQueryBenchmark.php index 63307ec667caad75d5d3f73d2b9ca2af4b96402e..05e14b02fdc138b54348add56e3f64cb6bade6b2 100644 --- a/tests/PHPUnit/Benchmarks/ArchiveQueryBenchmark.php +++ b/tests/PHPUnit/Benchmarks/ArchiveQueryBenchmark.php @@ -19,7 +19,7 @@ require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/BenchmarkTestCase.php'; class ArchiveQueryBenchmark extends BenchmarkTestCase { private $archivingLaunched = false; - + public function setUp() { $archivingTables = ArchiveTableCreator::getTablesArchivesInstalled(); @@ -40,10 +40,10 @@ class ArchiveQueryBenchmark extends BenchmarkTestCase } Rules::$archivingDisabledByTests = true; - + $period = Period\Factory::build(self::$fixture->period, Date::factory(self::$fixture->date)); $dateRange = $period->getDateStart().','.$period->getDateEnd(); - + API::getInstance()->get(self::$fixture->idSite, 'day', $dateRange); } } diff --git a/tests/PHPUnit/Benchmarks/Fixtures/ManyThousandSitesOneVisitEach.php b/tests/PHPUnit/Benchmarks/Fixtures/ManyThousandSitesOneVisitEach.php index 6a89c57a90094789e233e24185c8b82368c171be..f399b9ffa791761b0d46201dcf70686b102ac054 100644 --- a/tests/PHPUnit/Benchmarks/Fixtures/ManyThousandSitesOneVisitEach.php +++ b/tests/PHPUnit/Benchmarks/Fixtures/ManyThousandSitesOneVisitEach.php @@ -17,16 +17,16 @@ class Piwik_Test_Fixture_ManyThousandSitesOneVisitEach public $period = 'day'; public $siteCount = 20000; public $idSite = 'all'; - + public function setUp() { for ($i = 0; $i != $this->siteCount; ++$i) { $idSite = Fixture::createWebsite( $this->date, $ecommerce = 1, $siteName = "Site #$i", $siteUrl = "http://site$i.com/"); - + API::getInstance()->addGoal($idSite, 'all', 'url', 'http', 'contains', false, 5); } - + // track one visit for each site $t = BenchmarkTestCase::getLocalTracker(1); $t->setForceVisitDateTime(Date::factory($this->date)->addHour(6)); @@ -34,9 +34,9 @@ class Piwik_Test_Fixture_ManyThousandSitesOneVisitEach $ip = "157.5.6.4"; $t->setIp($ip); $t->setNewVisitorId(); - + $t->setIdSite($idSite); - + $t->setUrl("http://site" . ($idSite - 1) . ".com/page.html"); $t->doTrackPageView('page title'); } diff --git a/tests/PHPUnit/Benchmarks/Fixtures/OneSiteThousandsOfDistinctUrlsOverMonth.php b/tests/PHPUnit/Benchmarks/Fixtures/OneSiteThousandsOfDistinctUrlsOverMonth.php index c719d7bfa37794d3f385cf41ba8e6cbdd7cf3fc1..cab9278adb38ef2457ffbb5559abc598e2a5cf56 100644 --- a/tests/PHPUnit/Benchmarks/Fixtures/OneSiteThousandsOfDistinctUrlsOverMonth.php +++ b/tests/PHPUnit/Benchmarks/Fixtures/OneSiteThousandsOfDistinctUrlsOverMonth.php @@ -29,16 +29,16 @@ class Piwik_Test_Fixture_OneSiteThousandsOfDistinctUrlsOverMonth $goals = API::getInstance(); $goals->addGoal($this->idSite, 'all', 'url', 'http', 'contains', false, 5); $goals->addGoal($this->idSite, 'all', 'url', 'thing2', 'contains'); - + $start = Date::factory($this->date); - + $dates = array(); for ($day = 0; $day != 31; ++$day) { $dates[] = $start->addDay($day); } - + $t = BenchmarkTestCase::getLocalTracker($this->idSite); - + $actionNum = 0; foreach ($dates as $date) { for ($visitNum = 0; $visitNum != 1000; ++$visitNum) { @@ -50,10 +50,10 @@ class Piwik_Test_Fixture_OneSiteThousandsOfDistinctUrlsOverMonth $referrerUrl = "http://"; } $title = "A page title / $actionNum / 0 / 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 /9"; - + $t->setNewVisitorId(); $t->setForceVisitDateTime($date); - + $t->setUrl($url); $t->setUrlReferrer($referrerUrl); Fixture::checkResponse($t->doTrackPageView($title)); diff --git a/tests/PHPUnit/Benchmarks/MultiSitesBenchmark.php b/tests/PHPUnit/Benchmarks/MultiSitesBenchmark.php index 54dc180f535598b5eb849aa1dda36118fde921c0..249b006251007811211896e7699a45c8eebc7ad0 100644 --- a/tests/PHPUnit/Benchmarks/MultiSitesBenchmark.php +++ b/tests/PHPUnit/Benchmarks/MultiSitesBenchmark.php @@ -18,7 +18,7 @@ require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/BenchmarkTestCase.php'; class MultiSitesBenchmark extends BenchmarkTestCase { private $archivingLaunched = false; - + public function setUp() { $archivingTables = ArchiveTableCreator::getTablesArchivesInstalled(); @@ -37,7 +37,7 @@ class MultiSitesBenchmark extends BenchmarkTestCase if ($this->archivingLaunched) { echo "NOTE: Had to archive data, memory results will not be accurate. Run again for better results."; } - + Rules::$archivingDisabledByTests = true; APIMultiSites::getInstance()->getAll(self::$fixture->period, self::$fixture->date); } diff --git a/tests/PHPUnit/Benchmarks/README.md b/tests/PHPUnit/Benchmarks/README.md index ce750f69188bab3a87387fb4e15400bc3f469e83..d82892cfaa99c9dd9b2a2e61d15f76f757a5cabd 100644 --- a/tests/PHPUnit/Benchmarks/README.md +++ b/tests/PHPUnit/Benchmarks/README.md @@ -2,7 +2,7 @@ Piwik comes with a system that can be used to benchmark certain Piwik processes. The benchmarking system relies both on PHPUnit. -## Benchmarks & Fixtures +## Benchmarks & Fixtures Piwik's benchmarks are written as unit tests. Except, they don't setup the database by themselves. Instead, there are several 'fixture' classes that do the setup. You can mix and match different @@ -41,7 +41,7 @@ These are the fixtures currently included with Piwik: website with ~230,000 visits on one day. There are around ~2.3 pageviews per visit and each visit resulted in at least one conversion. -## Benchmarking with git +## Benchmarking with git If you use git, you can use the benchmarking system to easily see if there are performance regressions caused by your changes. diff --git a/tests/PHPUnit/Core/AssetManagerTest.php b/tests/PHPUnit/Core/AssetManagerTest.php index e26443f8b3b75caa8f285f5435e8cc505a91f3d4..ca77a609f7eee9bf78a16de6eb9471823bb9406e 100644 --- a/tests/PHPUnit/Core/AssetManagerTest.php +++ b/tests/PHPUnit/Core/AssetManagerTest.php @@ -538,7 +538,7 @@ class AssetManagerTest extends PHPUnit_Framework_TestCase public function test_getMergedStylesheet_Generated_MergedAssetsEnabled_Stale() { $this->activateMergedAssets(); - + $this->setStylesheetCacheBuster(self::FIRST_CACHE_BUSTER_SS); $this->triggerGetMergedStylesheet(); diff --git a/tests/PHPUnit/Core/CookieTest.php b/tests/PHPUnit/Core/CookieTest.php index d173e60f4c0d6e69cc7dcf50dab7edaf273dc452..9b77aeddaf094a20fdda85e14d30e0fa1899fe2b 100644 --- a/tests/PHPUnit/Core/CookieTest.php +++ b/tests/PHPUnit/Core/CookieTest.php @@ -36,7 +36,7 @@ class CookieTest extends PHPUnit_Framework_TestCase /** * @group Core - * + * * @dataProvider getJsonSerializeData */ public function testJsonSerialize($testData, $id) @@ -78,7 +78,7 @@ class CookieTest extends PHPUnit_Framework_TestCase /** * @group Core - * + * * @dataProvider getSafeSerializeData */ public function testSafeSerialize($id, $testData) diff --git a/tests/PHPUnit/Core/DataTableTest.php b/tests/PHPUnit/Core/DataTableTest.php index 97d53e860ea41f533074a3a2bbafd9c06b5563fc..656df66a90c02e59654fc56a96d8eb29e10b41fd 100644 --- a/tests/PHPUnit/Core/DataTableTest.php +++ b/tests/PHPUnit/Core/DataTableTest.php @@ -312,7 +312,7 @@ class DataTableTest extends PHPUnit_Framework_TestCase * Test that adding two string column values results in an exception. * * @group Core - * + * * @expectedException Exception */ public function testSumRow_stringException() @@ -336,7 +336,7 @@ class DataTableTest extends PHPUnit_Framework_TestCase * After 100 recursion must throw an exception * * @group Core - * + * * @expectedException Exception */ public function testSerializeWithInfiniteRecursion() @@ -434,7 +434,7 @@ class DataTableTest extends PHPUnit_Framework_TestCase /* * create some fake tables to make sure that the serialized array of the first TABLE * does not take in consideration those tables - * -> we check that the DataTable_Manager is not impacting DataTable + * -> we check that the DataTable_Manager is not impacting DataTable */ $useless1->addRowFromArray(array(Row::COLUMNS => array(8487,),)); $useless3 = new DataTable; diff --git a/tests/PHPUnit/Core/DateTest.php b/tests/PHPUnit/Core/DateTest.php index f208e90c2869b00b4a979ba92896c809d86522dd..fbff27519e9f333aa97f7498a5173e386d01c0cd 100644 --- a/tests/PHPUnit/Core/DateTest.php +++ b/tests/PHPUnit/Core/DateTest.php @@ -55,7 +55,7 @@ class DateTest extends PHPUnit_Framework_TestCase */ public function testFactoryTimezone() { - // now in UTC converted to UTC+10 means adding 10 hours + // now in UTC converted to UTC+10 means adding 10 hours $date = Date::factory('now', 'UTC+10'); $dateExpected = Date::now()->addHour(10); $this->assertEquals($dateExpected->getDatetime(), $date->getDatetime()); diff --git a/tests/PHPUnit/Core/HttpTest.php b/tests/PHPUnit/Core/HttpTest.php index 5589a5c35890f232d1e3ae0d00b77f67e6c92ccd..ae5ecb96ecd908bf43812459542a71a19d97b1d0 100644 --- a/tests/PHPUnit/Core/HttpTest.php +++ b/tests/PHPUnit/Core/HttpTest.php @@ -26,7 +26,7 @@ class HttpTest extends PHPUnit_Framework_TestCase /** * @group Core - * + * * @dataProvider getMethodsToTest */ public function testFetchRemoteFile($method) @@ -88,7 +88,7 @@ class HttpTest extends PHPUnit_Framework_TestCase /** * @group Core - * + * * @dataProvider getMethodsToTest */ public function testHEADOperation($method) diff --git a/tests/PHPUnit/Core/IPTest.php b/tests/PHPUnit/Core/IPTest.php index c80af0c20104bf2a7406daf43a2cde7cd4ff0e1a..cbf0c59816c38559992e0782bcfa43d3f6ba0aec 100644 --- a/tests/PHPUnit/Core/IPTest.php +++ b/tests/PHPUnit/Core/IPTest.php @@ -165,7 +165,7 @@ class IPTest extends PHPUnit_Framework_TestCase /** * @group Core - * + * * @dataProvider getP2NInvalidInputData */ public function testP2NInvalidInput($P) @@ -535,7 +535,7 @@ class IPTest extends PHPUnit_Framework_TestCase /** * @group Core - * + * * @dataProvider getIpsInRangeData */ public function testIsIpInRange($range, $test) @@ -603,7 +603,7 @@ class IPTest extends PHPUnit_Framework_TestCase /** * @group Core - * + * * @dataProvider getIpTestData */ public function testGetNonProxyIpFromHeader($ip) @@ -613,7 +613,7 @@ class IPTest extends PHPUnit_Framework_TestCase /** * @group Core - * + * * @dataProvider getIpTestData */ public function testGetNonProxyIpFromHeader2($ip) @@ -626,7 +626,7 @@ class IPTest extends PHPUnit_Framework_TestCase /** * @group Core - * + * * @dataProvider getIpTestData */ public function testGetNonProxyIpFromHeader3($ip) @@ -662,7 +662,7 @@ class IPTest extends PHPUnit_Framework_TestCase /** * @group Core - * + * * @dataProvider getLastIpFromListTestData */ public function testGetLastIpFromList($csv, $expected) diff --git a/tests/PHPUnit/Core/Period/RangeTest.php b/tests/PHPUnit/Core/Period/RangeTest.php index 2a70eb00d56cb1bef40edf51ed20e26958fe70ce..6d87dffb10a6bfc31b0cca205c94f481e00a99cb 100644 --- a/tests/PHPUnit/Core/Period/RangeTest.php +++ b/tests/PHPUnit/Core/Period/RangeTest.php @@ -1305,8 +1305,8 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase /** * @group Core - * - * + * + * * @dataProvider getDataForLastNLimitsTest */ public function testLastNLimits($period, $lastN, $expectedLastN) diff --git a/tests/PHPUnit/Core/RankingQueryTest.php b/tests/PHPUnit/Core/RankingQueryTest.php index 17d3cdd2c69247ee2b2d1b1aa11944493bef1388..7941c25d350783aa607929f8cb654fb81cb01784 100644 --- a/tests/PHPUnit/Core/RankingQueryTest.php +++ b/tests/PHPUnit/Core/RankingQueryTest.php @@ -32,10 +32,10 @@ class RankingQueryTest extends PHPUnit_Framework_TestCase END AS `label`, `column`, sum(`columnSum`) AS `columnSum` - FROM ( + FROM ( SELECT `label`, - CASE + CASE WHEN @counter = 11 THEN 11 ELSE @counter:=@counter+1 END AS counter, @@ -69,7 +69,7 @@ class RankingQueryTest extends PHPUnit_Framework_TestCase ELSE `label` END AS `label`, `exclude_marker` - FROM ( + FROM ( SELECT `label`, CASE @@ -106,7 +106,7 @@ class RankingQueryTest extends PHPUnit_Framework_TestCase ELSE `label` END AS `label`, `partition` - FROM ( + FROM ( SELECT `label`, CASE @@ -122,7 +122,7 @@ class RankingQueryTest extends PHPUnit_Framework_TestCase FROM ( SELECT @counter1:=0 ) initCounter1, ( SELECT @counter2:=0 ) initCounter2, - ( SELECT @counter3:=0 ) initCounter3, + ( SELECT @counter3:=0 ) initCounter3, ( SELECT label, partition FROM myTable ) actualQuery ) AS withCounter GROUP BY counter, `partition` diff --git a/tests/PHPUnit/Core/ScheduledTaskTest.php b/tests/PHPUnit/Core/ScheduledTaskTest.php index 6cdbebbc3592eea4cd39bfa84966b77a00b31dfb..5a131521ff3681cb5ed8f4a7f4288d4ce5fcd500 100644 --- a/tests/PHPUnit/Core/ScheduledTaskTest.php +++ b/tests/PHPUnit/Core/ScheduledTaskTest.php @@ -36,7 +36,7 @@ class ScheduledTaskTest extends PHPUnit_Framework_TestCase /** * @group Core - * + * * @dataProvider getTaskNameTestCases */ public function testGetTaskName($expectedTaskName, $className, $methodName, $methodParameter) diff --git a/tests/PHPUnit/Core/ScheduledTime/WeeklyTest.php b/tests/PHPUnit/Core/ScheduledTime/WeeklyTest.php index b1956f570be6f377f60bee059692a76a88a15e97..2f6df0230aa6a2b8c48f95fab87e4932f35fbfaa 100644 --- a/tests/PHPUnit/Core/ScheduledTime/WeeklyTest.php +++ b/tests/PHPUnit/Core/ScheduledTime/WeeklyTest.php @@ -158,12 +158,12 @@ class ScheduledTime_WeeklyTest extends PHPUnit_Framework_TestCase /** * Tests getRescheduledTime on Weekly with unspecified hour and specified day - * + * * Context : * - getRescheduledTime called Monday January 4 1971 09:00:00 UTC * - setHour is not called, defaulting to midnight * - setDay is set to $dayToSet - * + * * @dataProvider getSetDayParametersToTest */ public function testGetRescheduledTimeWeeklyUnspecifiedHourSpecifiedDay($dayToSet, $expectedRescheduledTime) diff --git a/tests/PHPUnit/Core/TaskSchedulerTest.php b/tests/PHPUnit/Core/TaskSchedulerTest.php index f11b7e2745831b2eb7cd375753c3adffaef39443..3ec8781df743ad85e21e8991a332b480b59277b0 100644 --- a/tests/PHPUnit/Core/TaskSchedulerTest.php +++ b/tests/PHPUnit/Core/TaskSchedulerTest.php @@ -73,7 +73,7 @@ class TaskSchedulerTest extends PHPUnit_Framework_TestCase /** * @group Core - * + * * @dataProvider taskHasBeenScheduledOnceTestCases */ public function testTaskHasBeenScheduledOnce($expectedDecision, $taskName, $timetable) @@ -132,7 +132,7 @@ class TaskSchedulerTest extends PHPUnit_Framework_TestCase /** * @group Core - * + * * @dataProvider taskShouldBeExecutedTestCases */ public function testTaskShouldBeExecuted($expectedDecision, $taskName, $timetable) @@ -157,7 +157,7 @@ class TaskSchedulerTest extends PHPUnit_Framework_TestCase /** * @group Core - * + * * @dataProvider executeTaskTestCases */ public function testExecuteTask($methodName, $parameterValue) @@ -270,7 +270,7 @@ class TaskSchedulerTest extends PHPUnit_Framework_TestCase /** * @group Core - * + * * @dataProvider testRunTasksTestCases */ public function testRunTasks($expectedTimetable, $expectedExecutedTasks, $timetableBeforeTaskExecution, $configuredTasks) @@ -280,7 +280,7 @@ class TaskSchedulerTest extends PHPUnit_Framework_TestCase $plugins = array_map(function ($p) { return $p->getPluginName(); }, $plugins); \Piwik\Plugin\Manager::getInstance()->unloadPlugins(); - + // make sure the get tasks event returns our configured tasks \Piwik\Piwik::addAction(TaskScheduler::GET_TASKS_EVENT, function(&$tasks) use($configuredTasks) { $tasks = $configuredTasks; diff --git a/tests/PHPUnit/Core/UrlTest.php b/tests/PHPUnit/Core/UrlTest.php index 3bf4a3e41dee9782c2beeaa4a222f1629741284b..f30508186c06d80a3ea23f81ec8415356c90f213 100644 --- a/tests/PHPUnit/Core/UrlTest.php +++ b/tests/PHPUnit/Core/UrlTest.php @@ -258,7 +258,7 @@ class UrlTest extends PHPUnit_Framework_TestCase /** * @group Core - * + * * @dataProvider getQueryParameters */ public function testGetQueryStringFromParameters($params, $queryString) diff --git a/tests/PHPUnit/FakeAccess.php b/tests/PHPUnit/FakeAccess.php index d576da702f5a1210f5ee0aa3ce0fbf8f73e2ac08..be97babff04f2b83d0a04274a17ba1b17c38e767 100644 --- a/tests/PHPUnit/FakeAccess.php +++ b/tests/PHPUnit/FakeAccess.php @@ -87,7 +87,7 @@ class FakeAccess if (self::$superUser) { return; } - + $websitesAccess = array_merge(self::$idSitesView, self::$idSitesAdmin); if (!is_array($idSites)) { @@ -160,7 +160,7 @@ class FakeAccess } return array_merge(self::$idSitesView, self::$idSitesAdmin); } - + public function getRawSitesWithSomeViewAccess($login) { $result = array(); diff --git a/tests/PHPUnit/Fixture.php b/tests/PHPUnit/Fixture.php index 255153e3672e011d501828ba7d263dbacc1e1a84..d9c213f01aa924846210dfdee66d05bf7c2eb89f 100644 --- a/tests/PHPUnit/Fixture.php +++ b/tests/PHPUnit/Fixture.php @@ -809,7 +809,7 @@ class Fixture extends PHPUnit_Framework_Assert { Cache::deleteTrackerCache(); Option::clearCache(); - + if ($force) { // remove version options to force update Option::deleteLike('version%'); diff --git a/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php b/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php index 33e13f7999b6ef72a9b5bbf243f9a4ad06e97b4b..2ddc236f0c25a65eafbb767e83d37a55d2ace6c9 100644 --- a/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php +++ b/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php @@ -25,7 +25,7 @@ class ManySitesImportedLogs extends Fixture public $idSite2 = 2; public $idGoal = 1; public $segments = null; // should be array mapping segment name => segment definition - + public $addSegments = false; public static function createAccessInstance() @@ -112,28 +112,28 @@ class ManySitesImportedLogs extends Fixture $this->replayLogFile(); $this->logCustomFormat(); } - + private function setupSegments() { if (!$this->addSegments) { return; } - + if ($this->segments === null) { $this->segments = $this->getDefaultSegments(); } - + foreach ($this->segments as $segmentName => $info) { $idSite = false; if (isset($info['idSite'])) { $idSite = $info['idSite']; } - + $autoArchive = true; if (isset($info['autoArchive'])) { $autoArchive = $info['autoArchive']; } - + $enabledAllUsers = true; if (isset($info['enabledAllUsers'])) { $enabledAllUsers = $info['enabledAllUsers']; diff --git a/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php b/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php index 4ed24f85737baa9c3ea0c5f52e6c3eaa2d5cd5c9..70f2d07ca5140abb2a66fa413d1ea700db5fbaf6 100644 --- a/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php +++ b/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php @@ -27,7 +27,7 @@ class ManySitesImportedLogsWithXssAttempts extends ManySitesImportedLogs { $this->now = Date::factory('now'); } - + public function setUp() { parent::setUp(); @@ -56,7 +56,7 @@ class ManySitesImportedLogsWithXssAttempts extends ManySitesImportedLogs $siteUrl = 'http://example-site-two.com'); } } - + public function addAnnotations() { APIAnnotations::getInstance()->add($this->idSite, '2012-08-09', "Note 1", $starred = 1); diff --git a/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php b/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php index b53d88d25fb4144a7515598c0f409966493771dc..aee0adbba9f6992ee5a1ddb84c56d68dd7608a39 100644 --- a/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php +++ b/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php @@ -120,7 +120,7 @@ class ManyVisitsWithMockLocationProvider extends Fixture // track outlinks $this->trackActions($t, $visitorCounter, 'outlink', $userAgents, $resolutions); - + // track ecommerce product orders $this->trackOrders($t); } @@ -175,15 +175,15 @@ class ManyVisitsWithMockLocationProvider extends Fixture } } } - + private function trackOrders($t) { $nextDay = Date::factory($this->nextDay); $t->setForceVisitDateTime($nextDay); - + for ($i = 0; $i != 25; ++$i) { $cat = $i % 5; - + $t->setNewVisitorId(); $t->setIp("155.5.4.$i"); $t->setEcommerceView("id_book$i", "Book$i", "Books Cat #$cat", 7.50); diff --git a/tests/PHPUnit/Fixtures/OmniFixture.php b/tests/PHPUnit/Fixtures/OmniFixture.php index 406deb77bc0204d189b3d6bf771544fdce66310d..197939904d1800f06db5c989b15c11d9bf478952 100644 --- a/tests/PHPUnit/Fixtures/OmniFixture.php +++ b/tests/PHPUnit/Fixtures/OmniFixture.php @@ -60,7 +60,7 @@ class OmniFixture extends Fixture $fixture = new $className(); if (!property_exists($fixture, 'dateTime')) { continue; - } + } $fixture->dateTime = $this->adjustDateTime($fixture->dateTime, $date); diff --git a/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php b/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php index 53db8ca2f5e06e6a732272f9454993f88e827a06..3d43cb159bbb5f8f20cf5ed940482d008bab0592 100644 --- a/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php +++ b/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php @@ -69,10 +69,10 @@ class SomeVisitsCustomVariablesCampaignsNotHeuristics extends Fixture $visitorId2 = $t2->getVisitorId(); self::assertTrue($visitorId != $visitorId2); - // Then force the visitor ID + // Then force the visitor ID $t2->setVisitorId($visitorId); - // And Record a Goal: The previous visit should be updated rather than a new visit Created + // And Record a Goal: The previous visit should be updated rather than a new visit Created $t2->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.3)->getDatetime()); self::checkResponse($t2->doTrackGoal($idGoal, $revenue = 42.256)); @@ -80,7 +80,7 @@ class SomeVisitsCustomVariablesCampaignsNotHeuristics extends Fixture $t3 = self::getTracker($idSite, $dateTime); $t3->setUrlReferrer('http://example.org/referrer'); $t3->setForceVisitDateTime(Date::factory($dateTime)->addHour(1.3)->getDatetime()); - // fake a website ref cookie, the campaign should be credited for conversion, not referrer.example.com nor example.org + // fake a website ref cookie, the campaign should be credited for conversion, not referrer.example.com nor example.org $t3->DEBUG_APPEND_URL = '&_ref=http%3A%2F%2Freferrer.example.com%2Fpage%2Fsub%3Fquery%3Dtest%26test2%3Dtest3'; $t3->setUrl('http://example.org/index.htm#pk_campaign=CREDITED TO GOAL PLEASE'); self::checkResponse($t3->doTrackGoal($idGoal, 42)); diff --git a/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php b/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php index 1791b4375088667e89c40ad025ff8118c562641d..52845bc0b87eabfeadf4a5969126c5f78b722782 100644 --- a/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php +++ b/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php @@ -44,7 +44,7 @@ class SomeVisitsManyPageviewsWithTransitions extends Fixture { $tracker = self::getTracker($this->idSite, $this->dateTime, $defaultInit = true); $tracker->enableBulkTracking(); - + $tracker->setIp('156.5.3.1'); $tracker->setUrlReferrer('http://www.google.com.vn/url?sa=t&rct=j&q=%3C%3E%26%5C%22the%20pdo%20extension%20is%20required%20for%20this%20adapter%20but%20the%20extension%20is%20not%20loaded&source=web&cd=4&ved=0FjAD&url=http%3A%2F%2Fforum.piwik.org%2Fread.php%3F2%2C1011&ei=y-HHAQ&usg=AFQjCN2-nt5_GgDeg&cad=rja'); $this->trackPageView($tracker, 0, 'page/one.html'); @@ -88,7 +88,7 @@ class SomeVisitsManyPageviewsWithTransitions extends Fixture $tracker->setNewVisitorId(); $tracker->setUrlReferrer(''); $this->trackPageView($tracker, 0, 'page/one.html'); - + // perform site search before & after page/one.html, then outlink after page/one.html, then download // before & after $tracker->setIp('156.5.3.6'); @@ -105,7 +105,7 @@ class SomeVisitsManyPageviewsWithTransitions extends Fixture $this->trackPageView($tracker, 0.5, '', $this->dateTime, $pageViewType = 'download'); $this->trackPageView($tracker, 0.55, 'page/one.html'); $this->trackPageView($tracker, 0.6, 'to/outlink/page2.html', $this->dateTime, $pageViewType = 'outlink'); - + // perform new searches/outlinks before & after in later date to test 'month' period $laterDate = Date::factory($this->dateTime)->addDay(8)->getDatetime(); $tracker->setIp('156.5.3.7'); @@ -120,7 +120,7 @@ class SomeVisitsManyPageviewsWithTransitions extends Fixture $this->trackPageView($tracker, 0.35, 'page/search.html#q=anotherkwd', $laterDate, $pageViewType = 'site-search', $searchKeyword = 'anotherkwd', $searchCategory = 'mysearchcat'); - + self::checkBulkTrackingResponse($tracker->doBulkTrack()); } @@ -130,7 +130,7 @@ class SomeVisitsManyPageviewsWithTransitions extends Fixture if ($dateTime === null) { $dateTime = $this->dateTime; } - + // rotate protocol and www to make sure it doesn't matter $prefixes = array('http://', 'http://www.', 'https://', 'https://'); $prefix = $prefixes[$this->prefixCounter % 4]; @@ -139,7 +139,7 @@ class SomeVisitsManyPageviewsWithTransitions extends Fixture /** @var $visit PiwikTracker */ $visit->setUrl($prefix . 'example.org/' . $path); $visit->setForceVisitDateTime(Date::factory($dateTime)->addHour($timeOffset)->getDatetime()); - + if ($pageViewType == 'normal') { self::assertTrue($visit->doTrackPageView('page title - ' . $path)); } else if ($pageViewType == 'outlink') { diff --git a/tests/PHPUnit/Fixtures/TwoVisitsNoKeywordWithBot.php b/tests/PHPUnit/Fixtures/TwoVisitsNoKeywordWithBot.php index eb48a6bd6185f04a8af447ae082b3cfabb5e966d..fcbb864bfbdac9e174c2da8a0c431fc414c9a13c 100644 --- a/tests/PHPUnit/Fixtures/TwoVisitsNoKeywordWithBot.php +++ b/tests/PHPUnit/Fixtures/TwoVisitsNoKeywordWithBot.php @@ -62,7 +62,7 @@ class TwoVisitsNoKeywordWithBot extends Fixture $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.3)->getDatetime()); self::checkResponse($t->doTrackGoal($idGoal, $revenue = 42)); - // VISIT 2 = Referrer has keyword, but the URL should be rewritten + // VISIT 2 = Referrer has keyword, but the URL should be rewritten // in Live Output to point to google search result page $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(2)->getDatetime()); $t->setUrlReferrer('http://www.google.com.vn/url?sa=t&rct=j&q=%3C%3E%26%5C%22the%20pdo%20extension%20is%20required%20for%20this%20adapter%20but%20the%20extension%20is%20not%20loaded&source=web&cd=4&ved=0FjAD&url=http%3A%2F%2Fforum.piwik.org%2Fread.php%3F2%2C1011&ei=y-HHAQ&usg=AFQjCN2-nt5_GgDeg&cad=rja'); diff --git a/tests/PHPUnit/Fixtures/UITestFixture.php b/tests/PHPUnit/Fixtures/UITestFixture.php index 453a0c7d10b2b97feb2de0d297b8b2d68e4e3628..a65b0bc1f06d3a910ff0e6b0f936f3a1ce566e3b 100644 --- a/tests/PHPUnit/Fixtures/UITestFixture.php +++ b/tests/PHPUnit/Fixtures/UITestFixture.php @@ -176,7 +176,7 @@ class UITestFixture extends SqlDump { $dashboardColumnCount = 3; $dashboardCount = 4; - + $layout = array(); for ($j = 0; $j != $dashboardColumnCount; ++$j) { $layout[] = array(); @@ -186,10 +186,10 @@ class UITestFixture extends SqlDump for ($i = 0; $i != $dashboardCount; ++$i) { $dashboards[] = $layout; } - + $oldGet = $_GET; $_GET['idSite'] = 1; - + // collect widgets & sort them so widget order is not important $allWidgets = array(); foreach (WidgetsList::get() as $category => $widgets) { @@ -218,7 +218,7 @@ class UITestFixture extends SqlDump 'uniqueId' => $widget['uniqueId'], 'parameters' => $widget['parameters'] ); - + // dashboard images must have height of less than 4000px to avoid odd discoloration of last line of image $widgetEntry['parameters']['filter_limit'] = 5; @@ -233,13 +233,13 @@ class UITestFixture extends SqlDump throw new Exception("Unexpected error: Incorrect dashboard widget placement logic. Something's wrong w/ the code."); } } - + // distribute widgets in each dashboard $column = 0; foreach ($groupedWidgets as $dashboardIndex => $dashboardWidgets) { foreach ($dashboardWidgets as $widget) { $column = ($column + 1) % $dashboardColumnCount; - + $dashboards[$dashboardIndex][$column][] = $widget; } } @@ -279,7 +279,7 @@ class UITestFixture extends SqlDump $_GET = $oldGet; } - + public function createSegments() { Db::exec("TRUNCATE TABLE " . Common::prefixTable('segment')); diff --git a/tests/PHPUnit/Integration/BlobReportLimitingTest.php b/tests/PHPUnit/Integration/BlobReportLimitingTest.php index 8010501886c00d04dcb0882bf6b1b0acf1a1231d..b0aa0731a2cf9853726257281dde78bc3c6a5090 100755 --- a/tests/PHPUnit/Integration/BlobReportLimitingTest.php +++ b/tests/PHPUnit/Integration/BlobReportLimitingTest.php @@ -43,40 +43,40 @@ class BlobReportLimitingTest extends IntegrationTestCase 'UserSettings.getBrowserVersion', 'UserCountry.getRegion', 'UserCountry.getCity', ); - + $ecommerceApi = array('Goals.getItemsSku', 'Goals.getItemsName', 'Goals.getItemsCategory'); return array( array($apiToCall, array('idSite' => self::$fixture->idSite, 'date' => self::$fixture->dateTime, 'periods' => array('day'))), - + array($ecommerceApi, array('idSite' => self::$fixture->idSite, 'date' => self::$fixture->nextDay, 'periods' => 'day')), ); } - + public function getRankingQueryDisabledApiForTesting() { $idSite = self::$fixture->idSite; $dateTime = self::$fixture->dateTime; - + return array( array('Actions.getPageUrls', array('idSite' => $idSite, 'date' => $dateTime, 'periods' => array('day'))), - + array('Provider.getProvider', array('idSite' => $idSite, 'date' => $dateTime, 'periods' => array('month'))), - + array('Provider.getProvider', array('idSite' => $idSite, 'date' => $dateTime, 'periods' => array('month'), 'segment' => 'provider==comcast.net', 'testSuffix' => '_segment_provider')), - + // test getDownloads w/ period=range & flat=1 array('Actions.getDownloads', array('idSite' => $idSite, 'date' => '2010-01-02,2010-01-05', @@ -106,7 +106,7 @@ class BlobReportLimitingTest extends IntegrationTestCase foreach ($this->getApiForTesting() as $pair) { list($apiToCall, $params) = $pair; - + if (empty($params['testSuffix'])) { $params['testSuffix'] = ''; } @@ -115,7 +115,7 @@ class BlobReportLimitingTest extends IntegrationTestCase $this->runApiTests($apiToCall, $params); } } - + public function testApiWithRankingQueryDisabled() { self::deleteArchiveTables(); @@ -128,10 +128,10 @@ class BlobReportLimitingTest extends IntegrationTestCase $generalConfig['datatable_archiving_maximum_rows_custom_variables'] = 500; $generalConfig['datatable_archiving_maximum_rows_subtable_custom_variables'] = 500; $generalConfig['archiving_ranking_query_row_limit'] = 0; - + foreach ($this->getRankingQueryDisabledApiForTesting() as $pair) { list($apiToCall, $params) = $pair; - + if (empty($params['testSuffix'])) { $params['testSuffix'] = ''; } diff --git a/tests/PHPUnit/Integration/Core/ArchiveProcessingTest.php b/tests/PHPUnit/Integration/Core/ArchiveProcessingTest.php index 3a522ee0ccba5f2454cc09a37ea831f36f570e08..d67e899c1ada438338b2cbff32759c54f192e841 100644 --- a/tests/PHPUnit/Integration/Core/ArchiveProcessingTest.php +++ b/tests/PHPUnit/Integration/Core/ArchiveProcessingTest.php @@ -136,7 +136,7 @@ class Core_ArchiveProcessingTest extends DatabaseTestCase { $archiveProcessor = $this->_createArchiveProcessor('day', '2010-01-01', 'UTC'); - // min finished timestamp considered when looking at archive timestamp + // min finished timestamp considered when looking at archive timestamp $dateMinArchived = Date::factory('2010-01-02')->getTimestamp(); $this->assertEquals($dateMinArchived, $archiveProcessor->public_getMinTimeArchiveProcessed() + 1); @@ -153,7 +153,7 @@ class Core_ArchiveProcessingTest extends DatabaseTestCase { $timezone = 'UTC+5.5'; $archiveProcessor = $this->_createArchiveProcessor('day', '2010-01-01', $timezone); - // min finished timestamp considered when looking at archive timestamp + // min finished timestamp considered when looking at archive timestamp $dateMinArchived = Date::factory('2010-01-01 18:30:00'); $this->assertEquals($dateMinArchived->getTimestamp(), $archiveProcessor->public_getMinTimeArchiveProcessed() + 1); @@ -170,7 +170,7 @@ class Core_ArchiveProcessingTest extends DatabaseTestCase { $timezone = 'UTC-5.5'; $archiveProcessor = $this->_createArchiveProcessor('month', '2010-01-02', $timezone); - // min finished timestamp considered when looking at archive timestamp + // min finished timestamp considered when looking at archive timestamp $dateMinArchived = Date::factory('2010-02-01 05:30:00'); $this->assertEquals($dateMinArchived->getTimestamp(), $archiveProcessor->public_getMinTimeArchiveProcessed() + 1); diff --git a/tests/PHPUnit/Integration/Core/LogTest.php b/tests/PHPUnit/Integration/Core/LogTest.php index 3e9a2cf64d5083c5aebd4aca94966dd4b12dd3eb..a2ef5b55020e3d77e037729c77600c255f39bcf9 100644 --- a/tests/PHPUnit/Integration/Core/LogTest.php +++ b/tests/PHPUnit/Integration/Core/LogTest.php @@ -97,7 +97,7 @@ dummy backtrace' /** * @group Core - * + * * @dataProvider getBackendsToTest */ public function testLoggingWorksWhenMessageIsString($backend) @@ -114,7 +114,7 @@ dummy backtrace' /** * @group Core - * + * * @dataProvider getBackendsToTest */ public function testLoggingWorksWhenMessageIsSprintfString($backend) @@ -131,7 +131,7 @@ dummy backtrace' /** * @group Core - * + * * @dataProvider getBackendsToTest */ public function testLoggingWorksWhenMessageIsError($backend) @@ -150,7 +150,7 @@ dummy backtrace' /** * @group Core - * + * * @dataProvider getBackendsToTest */ public function testLoggingWorksWhenMessageIsException($backend) @@ -169,7 +169,7 @@ dummy backtrace' /** * @group Core - * + * * @dataProvider getBackendsToTest */ public function testLoggingCorrectlyIdentifiesPlugin($backend) @@ -186,7 +186,7 @@ dummy backtrace' /** * @group Core - * + * * @dataProvider getBackendsToTest */ public function testLogMessagesIgnoredWhenNotWithinLevel($backend) diff --git a/tests/PHPUnit/Integration/Core/SegmentTest.php b/tests/PHPUnit/Integration/Core/SegmentTest.php index 17667bf59c297b2f2f19d7e3d6d8e7064aa9294f..79f1273a231235002649f027eb1cc78ca79e6b9f 100644 --- a/tests/PHPUnit/Integration/Core/SegmentTest.php +++ b/tests/PHPUnit/Integration/Core/SegmentTest.php @@ -467,7 +467,7 @@ class SegmentTest extends DatabaseTestCase /** * @group Core - * + * * @dataProvider getBogusSegments */ public function testBogusSegmentThrowsException($segment) diff --git a/tests/PHPUnit/Integration/Core/Tracker/ActionTest.php b/tests/PHPUnit/Integration/Core/Tracker/ActionTest.php index f180db3a86520ed6bb5348aa24be07e5f99050d2..1498e67578bf5c97b8fa8d90eabca61b01172fef 100644 --- a/tests/PHPUnit/Integration/Core/Tracker/ActionTest.php +++ b/tests/PHPUnit/Integration/Core/Tracker/ActionTest.php @@ -37,7 +37,7 @@ class Core_Tracker_ActionTest extends DatabaseTestCase Config::getInstance()->Tracker = $section; \Piwik\Plugin\Manager::getInstance()->loadPlugins(array('SitesManager')); - + Translate::loadEnglishTranslation(); } @@ -180,7 +180,7 @@ class Core_Tracker_ActionTest extends DatabaseTestCase */ public function testExcludeQueryParametersSiteAndGlobalExcluded($url, $filteredUrl) { - // testing also that query parameters are case insensitive + // testing also that query parameters are case insensitive $excludedQueryParameters = 'P2,var[value][date]'; $excludedGlobalParameters = 'blabla, P4'; $this->setUpRootAccess(); diff --git a/tests/PHPUnit/Integration/Core/Tracker/VisitTest.php b/tests/PHPUnit/Integration/Core/Tracker/VisitTest.php index 9ddf6647e406b256a1dca12ddaea6ef3982fb540..1aef6fc6ead8603f7e13ca3985c7d77178f6eddc 100644 --- a/tests/PHPUnit/Integration/Core/Tracker/VisitTest.php +++ b/tests/PHPUnit/Integration/Core/Tracker/VisitTest.php @@ -131,11 +131,11 @@ class Core_Tracker_VisitTest extends DatabaseTestCase $excludedUserAgent); $request = new Request(array('idsite' => $idsite)); - + // test that user agents that contain excluded user agent strings are excluded foreach ($tests as $ua => $expected) { $excluded = new VisitExcluded_public($request, $ip = false, $ua); - + $this->assertSame($expected, $excluded->public_isUserAgentExcluded(), "Result if isUserAgentExcluded('$ua') was not " . ($expected ? 'true' : 'false') . "."); } } diff --git a/tests/PHPUnit/Integration/ImportLogsTest.php b/tests/PHPUnit/Integration/ImportLogsTest.php index 83b1da785a3fd9c3dcc1bc397aac6250bff1053f..a08750d12804247fe6bddf01fcb051660b4ea864 100755 --- a/tests/PHPUnit/Integration/ImportLogsTest.php +++ b/tests/PHPUnit/Integration/ImportLogsTest.php @@ -21,7 +21,7 @@ use Piwik\Tests\Fixtures\ManySitesImportedLogs; class ImportLogsTest extends IntegrationTestCase { public static $fixture = null; // initialized below class definition - + /** * @dataProvider getApiForTesting */ diff --git a/tests/PHPUnit/Integration/OneVisitorTwoVisitsTest.php b/tests/PHPUnit/Integration/OneVisitorTwoVisitsTest.php index 94f8f79153aa9539d59d6cd5307952082c1b6900..0de2982ad3267115613a732348bd4fb8bc8a2f88 100755 --- a/tests/PHPUnit/Integration/OneVisitorTwoVisitsTest.php +++ b/tests/PHPUnit/Integration/OneVisitorTwoVisitsTest.php @@ -209,7 +209,7 @@ class OneVisitorTwoVisitsTest extends IntegrationTestCase $this->assertTrue($foundSubtable, "Actions_actions subtable was not loaded"); } - + /** * Test that restricting the number of sites to those viewable to another login * works when building an archive query object. diff --git a/tests/PHPUnit/Integration/Plugins/SitesManagerTest.php b/tests/PHPUnit/Integration/Plugins/SitesManagerTest.php index 3c9b6042bcce1982f5b7d4faadc1739b45c5db70..65d520337c16a98b9002d9fdde9356fa6f250ea6 100644 --- a/tests/PHPUnit/Integration/Plugins/SitesManagerTest.php +++ b/tests/PHPUnit/Integration/Plugins/SitesManagerTest.php @@ -759,7 +759,7 @@ class Plugins_SitesManagerTest extends DatabaseTestCase $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, $excludedIps = null, $excludedQueryParameters = null, $timezone = null, $currency = null, $groupAfter); - // no result for the group before update + // no result for the group before update $websites = API::getInstance()->getSitesFromGroup($group); $this->assertEquals(0, count($websites)); @@ -848,7 +848,7 @@ class Plugins_SitesManagerTest extends DatabaseTestCase $excludedQueryParameters = API::getInstance()->getExcludedQueryParametersGlobal(); $this->assertEquals('', $excludedQueryParameters); - // test that when not specified, defaults are set as expected + // test that when not specified, defaults are set as expected $idsite = API::getInstance()->addSite("site1", array('http://example.org')); $site = new Site($idsite); $this->assertEquals('UTC', $site->getTimezone()); diff --git a/tests/PHPUnit/Integration/Plugins/UsersManagerTest.php b/tests/PHPUnit/Integration/Plugins/UsersManagerTest.php index cbcb6da860691a03795e28cdadc1f962e033d699..5b4e162c4e44f08eeb79e4417c68e363c9c4ffe5 100644 --- a/tests/PHPUnit/Integration/Plugins/UsersManagerTest.php +++ b/tests/PHPUnit/Integration/Plugins/UsersManagerTest.php @@ -30,7 +30,7 @@ class Plugins_UsersManagerTest extends DatabaseTestCase * @var Model */ private $model; - + public function setUp() { parent::setUp(); diff --git a/tests/PHPUnit/Integration/PrivacyManagerTest.php b/tests/PHPUnit/Integration/PrivacyManagerTest.php index 336361b31cbe0ed3a6cca717cfa042fd9e22b364..f0d044c709ff9d86d31b5f0506d7915b37d92676 100644 --- a/tests/PHPUnit/Integration/PrivacyManagerTest.php +++ b/tests/PHPUnit/Integration/PrivacyManagerTest.php @@ -37,7 +37,7 @@ require_once 'PrivacyManager/PrivacyManager.php'; class PrivacyManagerTest extends IntegrationTestCase { // constants used in checking whether numeric tables are populated correctly. - // 'done' entries exist for every period, even if there's no metric data, so we need the + // 'done' entries exist for every period, even if there's no metric data, so we need the // total archive count for each month. const TOTAL_JAN_ARCHIVE_COUNT = 37; // 31 + 4 + 1 + 1; const TOTAL_FEB_ARCHIVE_COUNT = 34; // 29 + 4 + 1; diff --git a/tests/PHPUnit/Integration/RowEvolutionTest.php b/tests/PHPUnit/Integration/RowEvolutionTest.php index 6fac424f54897b1402efb7d931b93deb3608bf02..268692df7e43297f75b8a7a8e1c22c72075dfdb6 100755 --- a/tests/PHPUnit/Integration/RowEvolutionTest.php +++ b/tests/PHPUnit/Integration/RowEvolutionTest.php @@ -97,7 +97,7 @@ class RowEvolutionTest extends IntegrationTestCase $label = urlencode('incredible title 0') . ',' . urlencode('incredible title 2'); $config['otherRequestParameters']['label'] = ($label); $return[] = array('API.getRowEvolution', $config); - + // standard label, entry page titles $config['testSuffix'] = '_entryPageTitles'; $config['periods'] = 'day'; @@ -183,7 +183,7 @@ class RowEvolutionTest extends IntegrationTestCase 'label' => 'Desktop,Mobile' ) )); - + // test multi row evolution w/ filter_limit to limit all available labels $return[] = array('API.getRowEvolution', array( 'testSuffix' => '_multiWithFilterLimit', @@ -198,7 +198,7 @@ class RowEvolutionTest extends IntegrationTestCase 'filter_limit' => 3, // only 3 labels should show up ) )); - + // test multi row evolution when there is no data $return[] = array('API.getRowEvolution', array( 'testSuffix' => '_multiWithNoData', @@ -213,7 +213,7 @@ class RowEvolutionTest extends IntegrationTestCase // no label ) )); - + // (non-rowevolution test) test flattener w/ search engines to make sure // queued filters are not applied twice $return[] = array('Referrers.getSearchEngines', array( diff --git a/tests/PHPUnit/Integration/TransitionsTest.php b/tests/PHPUnit/Integration/TransitionsTest.php index 7bb55b9f56bccf309edad06c5013ee9cdd822dd5..613e66dd45613d5ca2440d7927fac3c6e1fd4d1f 100644 --- a/tests/PHPUnit/Integration/TransitionsTest.php +++ b/tests/PHPUnit/Integration/TransitionsTest.php @@ -49,7 +49,7 @@ class TransitionsTest extends IntegrationTestCase 'pageTitle' => 'page title - page/one.html', ) )); - + // test w/ pages that don't exist $return[] = array('Transitions.getTransitionsForPageUrl', array( 'idSite' => self::$fixture->idSite, @@ -69,7 +69,7 @@ class TransitionsTest extends IntegrationTestCase 'pageTitle' => 'not a page title', ) )); - + $return[] = array('Transitions.getTransitionsForPageUrl', array( // test w/ limiting 'idSite' => self::$fixture->idSite, 'date' => self::$fixture->dateTime, diff --git a/tests/PHPUnit/IntegrationTestCase.php b/tests/PHPUnit/IntegrationTestCase.php index 961aa7ab13de40ba7a3a143ac2025a715dd34755..26781968018c7be401b1db2117d64589b8fab37f 100755 --- a/tests/PHPUnit/IntegrationTestCase.php +++ b/tests/PHPUnit/IntegrationTestCase.php @@ -415,7 +415,7 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase $parametersToSet['serialize'] = 1; $exampleUrl = $apiMetadata->getExampleUrl($class, $methodName, $parametersToSet); - + if ($exampleUrl === false) { continue; } diff --git a/tests/PHPUnit/Plugins/UserCountryTest.php b/tests/PHPUnit/Plugins/UserCountryTest.php index 7ca0709a1cb21c8d649627cb5699ad7f17a667af..72f9e7bfce1d0ac10361981365da5d92266bc6af 100644 --- a/tests/PHPUnit/Plugins/UserCountryTest.php +++ b/tests/PHPUnit/Plugins/UserCountryTest.php @@ -71,7 +71,7 @@ class Test_Piwik_UserCountry extends PHPUnit_Framework_Testcase /** * Test that redundant checks work. - * + * * @group Plugins */ public function testGeoIpUpdaterRedundantChecks() @@ -169,7 +169,7 @@ class Piwik_UserCountry_GeoIPAutoUpdater_publictest extends GeoIPAutoUpdater { // empty } - + public function performRedundantDbChecks() { parent::performRedundantDbChecks(); diff --git a/tests/PHPUnit/TestingEnvironment.php b/tests/PHPUnit/TestingEnvironment.php index ca1716358512d8735ad113050bacc01888660c8a..dae74b4a3c9c69607f035c282c6326187d3387ca 100644 --- a/tests/PHPUnit/TestingEnvironment.php +++ b/tests/PHPUnit/TestingEnvironment.php @@ -235,7 +235,7 @@ class Piwik_TestingEnvironment 'subject' => $mail->getSubject(), 'contents' => $outputContent ); - + file_put_contents($outputFile, Common::json_encode($outputContents)); }); } diff --git a/tests/PHPUnit/config.ini.travis.php b/tests/PHPUnit/config.ini.travis.php index 40ca1061586ec9b02cf0e38022f02f8490e97796..185973d488e84cffee7222f03d679bdf4eb389c8 100644 --- a/tests/PHPUnit/config.ini.travis.php +++ b/tests/PHPUnit/config.ini.travis.php @@ -9,7 +9,7 @@ password = dbname = piwik_tests adapter = PDO\MYSQL ; no table prefix for tests on travis -tables_prefix = +tables_prefix = ;charset = utf8 [database_tests] @@ -19,7 +19,7 @@ password = dbname = piwik_tests adapter = PDO\MYSQL ; no table prefix for tests on travis -tables_prefix = +tables_prefix = [log] log_writers[] = file diff --git a/tests/README.md b/tests/README.md index 8cfdf0ef7f4d3a433feeda52357d346eab081cc8..cabef0a92a928e68875e7b0d8a1810458ebd4ec7 100644 --- a/tests/README.md +++ b/tests/README.md @@ -1,5 +1,5 @@ Piwik comes with unit tests, integration tests, Javascript tests and Webtests. -This document briefly describes how to use and modify Piwik tests. +This document briefly describes how to use and modify Piwik tests. ## Continuous Integration @@ -64,7 +64,7 @@ To execute the tests: <server name="HTTP_HOST" value="localhost"/> <server name="REQUEST_URI" value="/path/to/piwik/"/> -3. Ensure the `[database_tests]` section in `piwik/config/config.php.ini` is set up correctly, +3. Ensure the `[database_tests]` section in `piwik/config/config.php.ini` is set up correctly, i.e. with the correct password to prevent the following error: `SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: NO)` @@ -78,7 +78,7 @@ To execute the tests: There are three main groups of tests: Core, Plugins and Integration For example run `phpunit --group Core` to run all Core Piwik tests. - + 5. Write more tests :) See ["Writing Unit tests with PHPUnit"](http://www.phpunit.de/manual/current/en/writing-tests-for-phpunit.html) @@ -104,7 +104,7 @@ Otherwise, if you didn't expect to modify the API outputs, it might be that your ### Scheduled Reports Tests -As part of our integration tests we generate the scheduled reports (in HTML, PDF & SMS). +As part of our integration tests we generate the scheduled reports (in HTML, PDF & SMS). Some of these scheduled reports contain PNG graphs. Depending on the system under test, generated images can differ. Therefore, PNG graphs are only tested and compared against "expected" graphs, if the system under test has the same characteristics as the integration server. The characteristics of the integration server are described in `IntegrationTestCase::canImagesBeIncludedInScheduledReports()` @@ -133,7 +133,7 @@ See [tests/PHPUnit/Benchmarks/README.md](https://github.com/piwik/piwik/blob/mas You can retrieve the files generated during the build (the build artifacts) at [builds-artifacts.piwik.org](http://builds-artifacts.piwik.org/) -## Troubleshooting +## Troubleshooting See [tests/README.troubleshooting.md](https://github.com/piwik/piwik/blob/master/tests/README.troubleshooting.md) for troubleshooting the tests. diff --git a/tests/README.screenshots.md b/tests/README.screenshots.md index b8f54c026328189c13bea46da584c6b4d7d151ac..6203313f71942c45778578ee5b2c669ed294be4c 100644 --- a/tests/README.screenshots.md +++ b/tests/README.screenshots.md @@ -11,7 +11,7 @@ Changes made to Piwik that affect the UI (such as changes to CSS, JavaScript, Tw break the UI tests build. This is an opportunity to review your code and as a Piwik developer you should ensure that any side effects created by your changes are correct. -If they are not correct, determine the cause of the change and fix it in a new commit. If the changes are correct, +If they are not correct, determine the cause of the change and fix it in a new commit. If the changes are correct, then you should update the expected screenshots accordingly. **Steps to fix a broken build** @@ -25,7 +25,7 @@ To fix a broken build, follow these steps: like this: View UI failures (if any) here http://builds-artifacts.piwik.org/ui-tests.master/1837.1/screenshot-diffs/diffviewer.html - + Click on the link in the message. * The diff viewer will list links to the generated screenshots for failed tests as well as the expected screenshots and image diffs. * For each failure, check if the change is desired. Sometimes we introduce regression without realising, and screenshot tests can help us spot such regressions. @@ -233,7 +233,7 @@ The following are examples of test environment manipulation: * [Dashboard_spec.js](https://github.com/piwik/piwik-ui-tests/blob/master/specs/Dashboard_spec.js) * [Login_spec.js](https://github.com/piwik/piwik-ui-tests/blob/master/specs/Login_spec.js) -## Learn more +## Learn more Check out this blog post to learn more about Screenshot Tests in Piwik: [QA Screenshot Testing blog post](http://piwik.org/blog/2013/10/our-latest-improvement-to-qa-screenshot-testing/) diff --git a/tests/README.troubleshooting.md b/tests/README.troubleshooting.md index 882ff9c7d721c50e17f321280a7647a0d706fd22..a82c84a3da6d75e39777ab02bd59c40d5350933f 100644 --- a/tests/README.troubleshooting.md +++ b/tests/README.troubleshooting.md @@ -1,6 +1,6 @@ # Troubleshooting Piwik Tests -If you have problems with running Piwik tests see below. +If you have problems with running Piwik tests see below. If you cannot solve your issues please [ask in the forums](http://forum.piwik.org/list.php?9) diff --git a/tests/README.xhprof.md b/tests/README.xhprof.md index 81a6a3f1f240a466c21210e235b50a02f6949c79..b7856f4f5d57276178d7970c8cbbf0670e9c6108 100644 --- a/tests/README.xhprof.md +++ b/tests/README.xhprof.md @@ -10,23 +10,23 @@ First, XHProf must be built (this guide assumes you're using a linux variant): $ cd /path/to/piwik/tests/lib/ $ wget http://pecl.php.net/get/xhprof $ tar -xzvf xhprof - + * Build XHProf. $ phpize $ ./configure $ make - + xhprof.so will now exist in the ./modules directory. - + * Configure PHP to use XHProf. Add the following to your php.ini file: - + ``` [xhprof] extension=/path/to/piwik/tests/lib/xhprof-0.9.4/extension/modules/xhprof.so xhprof.output_dir=/path/to/output/dir ``` - + Replace /path/to/output/dir with an existing directory. All your profiles will be stored there. diff --git a/tests/angularjs/README.md b/tests/angularjs/README.md index 40437418c1671f91d31555707319c06aa354e991..53c2b611e5692671ea653c2addc799d5f1c76aff 100644 --- a/tests/angularjs/README.md +++ b/tests/angularjs/README.md @@ -20,7 +20,7 @@ On Ubuntu you might be able to use the `scripts/install-ubuntu.sh` script. Have We do not have a general `tests` folder containing all test files. Instead we create a file having the same name appended by `_spec.js` in the same directory. For instance you want to test a file named `startfrom.js` then we create a file named `startfrom_spec.js`: -`plugins/CoreHome/angularjs/common/filters/startfrom.js` => +`plugins/CoreHome/angularjs/common/filters/startfrom.js` => `plugins/CoreHome/angularjs/common/filters/startfrom_spec.js` ## Execution @@ -41,7 +41,7 @@ Before executing a test it'll always run [JSHint](http://www.jshint.com/) to det ## Testing existing jQuery code -Just in case you want to write a test for your jQuery code you can do this the same way. You might be interested in the [Chai jQuery](http://chaijs.com/plugins/chai-jquery) plugin. +Just in case you want to write a test for your jQuery code you can do this the same way. You might be interested in the [Chai jQuery](http://chaijs.com/plugins/chai-jquery) plugin. ## Examples * [Testing a filter](../../plugins/CoreHome/angularjs/common/filters/startfrom_spec.js) diff --git a/tests/javascript/frameworks/dojo/dojo-1.0.3.js b/tests/javascript/frameworks/dojo/dojo-1.0.3.js index da6e171f67c4df5fcff22aa325878e05d7f65e95..793be17a79d21a49bde2eaec398d68415dcf3d5f 100644 --- a/tests/javascript/frameworks/dojo/dojo-1.0.3.js +++ b/tests/javascript/frameworks/dojo/dojo-1.0.3.js @@ -142,7 +142,7 @@ if(typeof dojo == "undefined"){ } dojo.mixin = function(/*Object*/obj, /*Object...*/props){ - // summary: Adds all properties and methods of props to obj. + // summary: Adds all properties and methods of props to obj. for(var i=1, l=arguments.length; i<l; i++){ d._mixin(obj, arguments[i]); } @@ -158,13 +158,13 @@ if(typeof dojo == "undefined"){ } dojo.setObject = function(/*String*/name, /*mixed*/value, /*Object*/context){ - // summary: + // summary: // Set a property from a dot-separated string, such as "A.B.C" - // description: + // description: // Useful for longer api chains where you have to test each object in // the chain, or when you have an object reference in string format. // Objects are created as needed along 'path'. - // name: + // name: // Path to a property, in the form "A.B.C". // context: // Optional. Object to use as root of path. Defaults to @@ -174,29 +174,29 @@ if(typeof dojo == "undefined"){ } dojo.getObject = function(/*String*/name, /*Boolean*/create, /*Object*/context){ - // summary: + // summary: // Get a property from a dot-separated string, such as "A.B.C" - // description: + // description: // Useful for longer api chains where you have to test each object in // the chain, or when you have an object reference in string format. - // name: + // name: // Path to an property, in the form "A.B.C". // context: // Optional. Object to use as root of path. Defaults to // 'dojo.global'. Null may be passed. - // create: + // create: // Optional. If true, Objects will be created at any point along the // 'path' that is undefined. return d._getProp(name.split("."), create, context); // mixed } dojo.exists = function(/*String*/name, /*Object?*/obj){ - // summary: + // summary: // determine if an object supports a given method - // description: + // description: // useful for longer api chains where you have to test each object in // the chain - // name: + // name: // Path to an object, in the form "A.B.C". // obj: // Object to use as root of path. Defaults to @@ -206,10 +206,10 @@ if(typeof dojo == "undefined"){ dojo["eval"] = function(/*String*/ scriptFragment){ - // summary: + // summary: // Perform an evaluation in the global scope. Use this rather than // calling 'eval()' directly. - // description: + // description: // Placed in a separate function to minimize size of trapped // evaluation context. // note: @@ -226,7 +226,7 @@ if(typeof dojo == "undefined"){ /*===== dojo.deprecated = function(behaviour, extra, removal){ - // summary: + // summary: // Log a debug message to indicate that a behavior has been // deprecated. // behaviour: String @@ -245,7 +245,7 @@ if(typeof dojo == "undefined"){ dojo.experimental = function(moduleName, extra){ // summary: Marks code as experimental. - // description: + // description: // This can be used to mark a function, file, or module as // experimental. Experimental code is not ready to be used, and the // APIs are subject to change without notice. Experimental code may be @@ -306,11 +306,11 @@ if(typeof dojo == "undefined"){ _loadedUrls: [], - //WARNING: + //WARNING: // This variable is referenced by packages outside of bootstrap: // FloatingPane.js and undo/browser.js _postLoad: false, - + //Egad! Lots of test files push on this directly instead of using dojo.addOnLoad. _loaders: [], _unloaders: [], @@ -329,13 +329,13 @@ if(typeof dojo == "undefined"){ // not caught by us, so the caller will see it. We return a true // value if and only if the script is found. // - // relpath: + // relpath: // A relative path to a script (no leading '/', and typically ending // in '.js'). - // module: + // module: // A module whose existance to check for after loading a path. Can be // used to determine success or failure of the load. - // cb: + // cb: // a callback function to pass the result of evaluating the script var uri = (((relpath.charAt(0) == '/' || relpath.match(/^\w+:/))) ? "" : this.baseUrl) + relpath; @@ -359,7 +359,7 @@ if(typeof dojo == "undefined"){ // it succeeded. Returns false if the URI reading failed. Throws if // the evaluation throws. // uri: a uri which points at the script to be loaded - // cb: + // cb: // a callback function to process the result of evaluating the script // as an expression, typically used by the resource bundle loader to // load JSON-style resources @@ -376,7 +376,7 @@ if(typeof dojo == "undefined"){ if(cb){ cb(value); } return true; // Boolean } - + // FIXME: probably need to add logging to this method dojo._loadUriAndCheck = function(/*String (URL)*/uri, /*String*/moduleName, /*Function?*/cb){ // summary: calls loadUri then findModule and returns true if both succeed @@ -400,7 +400,7 @@ if(typeof dojo == "undefined"){ this._loadNotifying = true; this._postLoad = true; var mll = this._loaders; - + //Clear listeners so new ones can be added //For other xdomain package loads after the initial load. this._loaders = []; @@ -410,7 +410,7 @@ if(typeof dojo == "undefined"){ } this._loadNotifying = false; - + //Make sure nothing else got added to the onload queue //after this first run. If something did, and we are not waiting for any //more inflight resources, run again. @@ -474,7 +474,7 @@ if(typeof dojo == "undefined"){ dojo._modulesLoaded = function(){ if(d._postLoad){ return; } - if(d._inFlightCount > 0){ + if(d._inFlightCount > 0){ console.debug("files still in flight!"); return; } @@ -502,8 +502,8 @@ if(typeof dojo == "undefined"){ var syms = modulename.split("."); for(var i = syms.length; i>0; i--){ var parentModule = syms.slice(0, i).join("."); - if((i==1) && !this._moduleHasPrefix(parentModule)){ - // Support default module directory (sibling of dojo) for top-level modules + if((i==1) && !this._moduleHasPrefix(parentModule)){ + // Support default module directory (sibling of dojo) for top-level modules syms[0] = "../" + syms[0]; }else{ var parentModulePath = this._getModulePrefix(parentModule); @@ -527,25 +527,25 @@ if(typeof dojo == "undefined"){ // description: // _loadModule("A.B") first checks to see if symbol A.B is defined. If // it is, it is simply returned (nothing to do). - // + // // If it is not defined, it will look for "A/B.js" in the script root // directory. - // + // // It throws if it cannot find a file to load, or if the symbol A.B is // not defined after loading. - // + // // It returns the object A.B. - // + // // This does nothing about importing symbols into the current package. // It is presumed that the caller will take care of that. For example, // to import all symbols: - // + // // | with (dojo._loadModule("A.B")) { // | ... // | } - // + // // And to import just the leaf symbol: - // + // // | var B = dojo._loadModule("A.B"); // | ... // returns: the required namespace object @@ -571,7 +571,7 @@ if(typeof dojo == "undefined"){ // pass in false so we can give better error module = this._loadedModules[moduleName]; if(!module){ - throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); + throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); } } @@ -588,7 +588,7 @@ if(typeof dojo == "undefined"){ // Each javascript source file is called a resource. When a resource // is loaded by the browser, dojo.provide() registers that it has been // loaded. - // + // // For backwards compatibility reasons, in addition to registering the // resource, dojo.provide() also ensures that the javascript object // for the module exists. For example, @@ -619,11 +619,11 @@ if(typeof dojo == "undefined"){ // hostenv.name_ item. The items in the "common" array will _always_ // be loaded, regardless of which list is chosen. Here's how it's // normally called: - // + // // | dojo.platformRequire({ // | // an example that passes multiple args to _loadModule() // | browser: [ - // | ["foo.bar.baz", true, true], + // | ["foo.bar.baz", true, true], // | "foo.sample", // | "foo.test, // | ], @@ -654,7 +654,7 @@ if(typeof dojo == "undefined"){ if(condition === true){ // FIXME: why do we support chained require()'s here? does the build system? var args = []; - for(var i = 1; i < arguments.length; i++){ + for(var i = 1; i < arguments.length; i++){ args.push(arguments[i]); } d.require.apply(d, args); @@ -664,13 +664,13 @@ if(typeof dojo == "undefined"){ dojo.requireAfterIf = d.requireIf; dojo.registerModulePath = function(/*String*/module, /*String*/prefix){ - // summary: + // summary: // maps a module name to a path - // description: + // description: // An unregistered module is given the default path of ../<module>, // relative to Dojo root. For example, module acme is mapped to // ../acme. If you want to use a different module name, use - // dojo.registerModulePath. + // dojo.registerModulePath. d._modulePrefixes[module] = { name: module, value: prefix }; } @@ -680,15 +680,15 @@ if(typeof dojo == "undefined"){ // same style as dojo.require. Contents of the resource bundle are // typically strings, but may be any name/value pair, represented in // JSON format. See also dojo.i18n.getLocalization. - // moduleName: + // moduleName: // name of the package containing the "nls" directory in which the // bundle is found - // bundleName: + // bundleName: // bundle name, i.e. the filename without the '.js' suffix - // locale: + // locale: // the locale to load (optional) By default, the browser's user // locale as defined by dojo.locale - // availableFlatLocales: + // availableFlatLocales: // A comma-separated list of the available, flattened locales for this // bundle. This argument should only be set by the build process. // description: @@ -745,11 +745,11 @@ if(typeof dojo == "undefined"){ var ire = new RegExp("^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$"); dojo._Url = function(/*dojo._Url||String...*/){ - // summary: + // summary: // Constructor to create an object representing a URL. // It is marked as private, since we might consider removing // or simplifying it. - // description: + // description: // Each argument is evaluated in order relative to the next until // a canonical uri is produced. To get an absolute Uri relative to // the current document use: @@ -817,7 +817,7 @@ if(typeof dojo == "undefined"){ } uri = ""; - if(relobj.scheme){ + if(relobj.scheme){ uri += relobj.scheme + ":"; } if(relobj.authority){ @@ -857,10 +857,10 @@ if(typeof dojo == "undefined"){ dojo._Url.prototype.toString = function(){ return this.uri; }; dojo.moduleUrl = function(/*String*/module, /*dojo._Url||String*/url){ - // summary: + // summary: // Returns a Url object relative to a module - // - // example: + // + // example: // | dojo.moduleUrl("dojo.widget","templates/template.html"); // example: // | dojo.moduleUrl("acme","images/small.png") @@ -870,7 +870,7 @@ if(typeof dojo == "undefined"){ if(loc.lastIndexOf("/") != loc.length-1){ loc += "/"; } - + //If the path is an absolute path (starts with a / or is on another //domain/xdomain) then don't add the baseUrl. var colonIndex = loc.indexOf(":"); @@ -962,7 +962,7 @@ if(typeof window != 'undefined'){ d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; d._xhrObj= function(){ - // summary: + // summary: // does the work of portably generating a new XMLHTTPRequest // object. var http = null; @@ -1080,7 +1080,7 @@ if(typeof window != 'undefined'){ // START DOMContentLoaded // Mozilla and Opera 9 expose the event we could use if(document.addEventListener){ - // NOTE: + // NOTE: // due to a threading issue in Firefox 2.0, we can't enable // DOMContentLoaded on that platform. For more information, see: // http://trac.dojotoolkit.org/ticket/1704 @@ -1225,7 +1225,7 @@ dojo.isFunction = (function(){ })(); dojo.isObject = function(/*anything*/ it){ - // summary: + // summary: // Returns true if it is a JavaScript object (or an Array, a Function or null) return it !== undefined && (it === null || typeof it == "object" || dojo.isArray(it) || dojo.isFunction(it)); // Boolean @@ -1252,7 +1252,7 @@ dojo.isArrayLike = function(/*anything*/ it){ } dojo.isAlien = function(/*anything*/ it){ - // summary: + // summary: // Returns true if it is a built-in function or some other kind of // oddball that *should* report as a function but doesn't return it && !dojo.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean @@ -1283,23 +1283,23 @@ dojo._hitchArgs = function(scope, method /*,...*/){ } dojo.hitch = function(/*Object*/scope, /*Function|String*/method /*,...*/){ - // summary: - // Returns a function that will only ever execute in the a given scope. + // summary: + // Returns a function that will only ever execute in the a given scope. // This allows for easy use of object member functions // in callbacks and other places in which the "this" keyword may - // otherwise not reference the expected scope. - // Any number of default positional arguments may be passed as parameters + // otherwise not reference the expected scope. + // Any number of default positional arguments may be passed as parameters // beyond "method". // Each of these values will be used to "placehold" (similar to curry) - // for the hitched function. - // scope: - // The scope to use when method executes. If method is a string, + // for the hitched function. + // scope: + // The scope to use when method executes. If method is a string, // scope is also the object containing method. // method: // A function to be hitched to scope, or the name of the method in // scope to be hitched. // example: - // | dojo.hitch(foo, "bar")(); + // | dojo.hitch(foo, "bar")(); // runs foo.bar() in the scope of foo // example: // | dojo.hitch(foo, myFunction); @@ -1324,7 +1324,7 @@ dojo.delegate = function(obj, props){ // summary: // returns a new object which "looks" to obj for properties which it // does not have a value for. Optionally takes a bag of properties to - // seed the returned object with initially. + // seed the returned object with initially. // description: // This is a small implementaton of the Boodman/Crockford delegation // pattern in JavaScript. An intermediate object constructor mediates @@ -1427,7 +1427,7 @@ dojo.clone = function(/*anything*/ o){ } dojo.trim = function(/*String*/ str){ - // summary: + // summary: // trims whitespaces from both sides of the string // description: // This version of trim() was selected for inclusion into the base due @@ -1449,27 +1449,27 @@ dojo.provide("dojo._base.declare"); // this file courtesy of the TurboAjax group, licensed under a Dojo CLA dojo.declare = function(/*String*/ className, /*Function|Function[]*/ superclass, /*Object*/ props){ - // summary: + // summary: // Create a feature-rich constructor from compact notation // className: // The name of the constructor (loosely, a "class") // stored in the "declaredClass" property in the created prototype // superclass: - // May be null, a Function, or an Array of Functions. If an array, + // May be null, a Function, or an Array of Functions. If an array, // the first element is used as the prototypical ancestor and // any following Functions become mixin ancestors. // props: // An object whose properties are copied to the // created prototype. - // Add an instance-initialization function by making it a property + // Add an instance-initialization function by making it a property // named "constructor". // description: // Create a constructor using a compact notation for inheritance and - // prototype extension. + // prototype extension. // // All superclasses (including mixins) must be Functions (not simple Objects). // - // Mixin ancestors provide a type of multiple inheritance. Prototypes of mixin + // Mixin ancestors provide a type of multiple inheritance. Prototypes of mixin // ancestors are copied to the new class: changes to mixin prototypes will // not affect classes to which they have been mixed in. // @@ -1481,16 +1481,16 @@ dojo.declare = function(/*String*/ className, /*Function|Function[]*/ superclass // | someValue: 2, // | // initialization function // | constructor: function(){ - // | this.myComplicatedObject = new ReallyComplicatedObject(); + // | this.myComplicatedObject = new ReallyComplicatedObject(); // | }, // | // other functions - // | someMethod: function(){ - // | doStuff(); + // | someMethod: function(){ + // | doStuff(); // | } // | ); // argument juggling (deprecated) - if(dojo.isFunction(props)||(arguments.length>3)){ + if(dojo.isFunction(props)||(arguments.length>3)){ dojo.deprecated("dojo.declare: for class '" + className + "' pass initializer function as 'constructor' property instead of as a separate argument.", "", "1.0"); var c = props; props = arguments[3] || {}; @@ -1516,7 +1516,7 @@ dojo.declare = function(/*String*/ className, /*Function|Function[]*/ superclass // name methods (experimental) for(var i in props){if(dojo.isFunction(fn=props[i])&&(!0[i])){fn.nom=i;}} // decorate prototype - dojo.extend(ctor, {declaredClass: className, _constructor: init, preamble: null}, props||0); + dojo.extend(ctor, {declaredClass: className, _constructor: init, preamble: null}, props||0); // special help for IE ctor.prototype.constructor = ctor; // create named reference @@ -1548,13 +1548,13 @@ dojo.mixin(dojo.declare, { // we have to make a function, but don't want to close over anything return function(){ this._construct(arguments); } }, - _core: { + _core: { _construct: function(args){ var c=args.callee, s=c.superclass, ct=s&&s.constructor, m=c.mixin, mct=m&&m.constructor, a=args, ii, fn; // side-effect of = used on purpose here, lint may complain, don't try this at home - if(a[0]){ + if(a[0]){ // FIXME: preambles for each mixin should be allowed - // FIXME: + // FIXME: // should we allow the preamble here NOT to modify the // default args, but instead to act on each mixin // independently of the class instance being constructed @@ -1562,13 +1562,13 @@ dojo.mixin(dojo.declare, { // allow any first argument w/ a "preamble" property to act as a // class preamble (not exclusive of the prototype preamble) - if(/*dojo.isFunction*/(fn = a[0]["preamble"])){ - a = fn.apply(this, a) || a; + if(/*dojo.isFunction*/(fn = a[0]["preamble"])){ + a = fn.apply(this, a) || a; } - } + } // prototype preamble if(fn=c.prototype.preamble){a = fn.apply(this, a) || a;} - // FIXME: + // FIXME: // need to provide an optional prototype-settable // "_explicitSuper" property which disables this // initialize superclass @@ -1611,14 +1611,14 @@ dojo.mixin(dojo.declare, { var a = arguments; if(!dojo.isString(a[0])){newArgs=args; args=name; name=args.callee.nom;} var c=args.callee, p=this.constructor.prototype, a=newArgs||args, fn, mp; - // if not an instance override + // if not an instance override if(this[name]!=c || p[name]==c){ mp = this._findMethod(name, c, p, true); if(!mp){throw(this.declaredClass + ': name argument ("' + name + '") to inherited must match callee (declare.js)');} p = this._findMethod(name, c, mp, false); } fn = p && p[name]; - // FIXME: perhaps we should throw here? + // FIXME: perhaps we should throw here? if(!fn){console.debug(mp.declaredClass + ': no inherited "' + name + '" was found (declare.js)'); return;} // if the function exists, invoke it in our scope return fn.apply(this, a); @@ -1639,11 +1639,11 @@ dojo.provide("dojo._base.connect"); dojo._listener = { // create a dispatcher function getDispatcher: function(){ - // following comments pulled out-of-line to prevent cloning them + // following comments pulled out-of-line to prevent cloning them // in the returned function. - // - indices (i) that are really in the array of listeners (ls) will + // - indices (i) that are really in the array of listeners (ls) will // not be in Array.prototype. This is the 'sparse array' trick - // that keeps us safe from libs that take liberties with built-in + // that keeps us safe from libs that take liberties with built-in // objects // - listener is invoked with current scope (this) return function(){ @@ -1663,12 +1663,12 @@ dojo._listener = { // add a listener to an object add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){ // Whenever 'method' is invoked, 'listener' will have the same scope. - // Trying to supporting a context object for the listener led to - // complexity. + // Trying to supporting a context object for the listener led to + // complexity. // Non trivial to provide 'once' functionality here // because listener could be the result of a dojo.hitch call, // in which case two references to the same hitch target would not - // be equivalent. + // be equivalent. source = source || dojo.global; // The source method is either null, a dispatcher, or some other function var f = source[method]; @@ -1678,15 +1678,15 @@ dojo._listener = { // original target function is special d.target = f; // dispatcher holds a list of listeners - d._listeners = []; + d._listeners = []; // redirect source to dispatcher f = source[method] = d; } - // The contract is that a handle is returned that can - // identify this listener for disconnect. + // The contract is that a handle is returned that can + // identify this listener for disconnect. // - // The type of the handle is private. Here is it implemented as Integer. - // DOM event code has this same contract but handle is Function + // The type of the handle is private. Here is it implemented as Integer. + // DOM event code has this same contract but handle is Function // in non-IE browsers. // // We could have separate lists of before and after listeners. @@ -1697,26 +1697,26 @@ dojo._listener = { var f = (source||dojo.global)[method]; // remember that handle is the index+1 (0 is not a valid handle) if(f && f._listeners && handle--){ - delete f._listeners[handle]; + delete f._listeners[handle]; } } }; // Multiple delegation for arbitrary methods. -// This unit knows nothing about DOM, -// but we include DOM aware +// This unit knows nothing about DOM, +// but we include DOM aware // documentation and dontFix // argument here to help the autodocs. // Actual DOM aware code is in event.js. -dojo.connect = function(/*Object|null*/ obj, - /*String*/ event, - /*Object|null*/ context, +dojo.connect = function(/*Object|null*/ obj, + /*String*/ event, + /*Object|null*/ context, /*String|Function*/ method, /*Boolean*/ dontFix){ // summary: - // Create a link that calls one function when another executes. + // Create a link that calls one function when another executes. // // description: // Connects method to event, so that after event fires, method @@ -1728,41 +1728,41 @@ dojo.connect = function(/*Object|null*/ obj, // // null arguments may simply be omitted. // - // obj[event] can resolve to a function or undefined (null). + // obj[event] can resolve to a function or undefined (null). // If obj[event] is null, it is assigned a function. // - // The return value is a handle that is needed to + // The return value is a handle that is needed to // remove this connection with dojo.disconnect. // - // obj: - // The source object for the event function. + // obj: + // The source object for the event function. // Defaults to dojo.global if null. - // If obj is a DOM node, the connection is delegated + // If obj is a DOM node, the connection is delegated // to the DOM event manager (unless dontFix is true). // // event: - // String name of the event function in obj. + // String name of the event function in obj. // I.e. identifies a property obj[event]. // - // context: + // context: // The object that method will receive as "this". // // If context is null and method is a function, then method // inherits the context of event. - // - // If method is a string then context must be the source + // + // If method is a string then context must be the source // object object for method (context[method]). If context is null, // dojo.global is used. // // method: - // A function reference, or name of a function in context. - // The function identified by method fires after event does. + // A function reference, or name of a function in context. + // The function identified by method fires after event does. // method receives the same arguments as the event. // See context argument comments for information on method's scope. // // dontFix: - // If obj is a DOM node, set dontFix to true to prevent delegation - // of this connection to the DOM event manager. + // If obj is a DOM node, set dontFix to true to prevent delegation + // of this connection to the DOM event manager. // // example: // When obj.onchange(), do ui.update(): @@ -1811,7 +1811,7 @@ dojo.connect = function(/*Object|null*/ obj, // used by non-browser hostenvs. always overriden by event.js dojo._connect = function(obj, event, context, method){ - var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method)); + var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method)); return [obj, event, h, l]; // Handle } @@ -1849,7 +1849,7 @@ dojo.subscribe = function(/*String*/ topic, /*Object|null*/ context, /*String|Fu // is invoked when topic is published. // example: // | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }; - // | dojo.publish("alerts", [ "read this", "hello world" ]); + // | dojo.publish("alerts", [ "read this", "hello world" ]); // support for 2 argument invocation (omitting context) depends on hitch return [topic, dojo._listener.add(dojo._topics, topic, dojo.hitch(context, method))]; /*Handle*/ @@ -1857,7 +1857,7 @@ dojo.subscribe = function(/*String*/ topic, /*Object|null*/ context, /*String|Fu dojo.unsubscribe = function(/*Handle*/ handle){ // summary: - // Remove a topic listener. + // Remove a topic listener. // handle: // The handle returned from a call to subscribe. // example: @@ -1875,11 +1875,11 @@ dojo.publish = function(/*String*/ topic, /*Array*/ args){ // topic: // The name of the topic to publish. // args: - // An array of arguments. The arguments will be applied + // An array of arguments. The arguments will be applied // to each topic subscriber (as first class parameters, via apply). // example: // | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }; - // | dojo.publish("alerts", [ "read this", "hello world" ]); + // | dojo.publish("alerts", [ "read this", "hello world" ]); // Note that args is an array, which is more efficient vs variable length // argument list. Ideally, var args would be implemented via Array @@ -1890,8 +1890,8 @@ dojo.publish = function(/*String*/ topic, /*Array*/ args){ } } -dojo.connectPublisher = function( /*String*/ topic, - /*Object|null*/ obj, +dojo.connectPublisher = function( /*String*/ topic, + /*Object|null*/ obj, /*String*/ event){ // summary: // Ensure that everytime obj.event() is called, a message is published @@ -1900,11 +1900,11 @@ dojo.connectPublisher = function( /*String*/ topic, // the topic. // topic: // The name of the topic to publish. - // obj: + // obj: // The source object for the event function. Defaults to dojo.global // if null. // event: - // The name of the event function in obj. + // The name of the event function in obj. // I.e. identifies a property obj[event]. // example: // | dojo.connectPublisher("/ajax/start", dojo, "xhrGet"}; @@ -1965,7 +1965,7 @@ dojo.Deferred = function(/*Function?*/ canceller){ // The sequence of callbacks is internally represented as a list of // 2-tuples containing the callback/errback pair. For example, the // following call sequence: - // + // // | var d = new dojo.Deferred(); // | d.addCallback(myCallback); // | d.addErrback(myErrback); @@ -1988,7 +1988,7 @@ dojo.Deferred = function(/*Function?*/ canceller){ // * -1: no value yet (initial condition) // * 0: success // * 1: error - // + // // A Deferred will be in the error state if one of the following three // conditions are met: // @@ -2087,7 +2087,7 @@ dojo.Deferred = function(/*Function?*/ canceller){ // | renderDataitem(data[x]); // | } // | d.callback(true); - // | }catch(e){ + // | }catch(e){ // | d.errback(new Error("rendering failed")); // | } // | return d; @@ -2114,7 +2114,7 @@ dojo.Deferred = function(/*Function?*/ canceller){ // | renderDataitem(data[x]); // | } // | d.callback(true); - // | }catch(e){ + // | }catch(e){ // | d.errback(new Error("rendering failed")); // | } // | }, 100); @@ -2168,7 +2168,7 @@ dojo.extend(dojo.Deferred, { })(), cancel: function(){ - // summary: + // summary: // Cancels a Deferred that has not yet received a value, or is // waiting on another Deferred as its value. // description: @@ -2197,7 +2197,7 @@ dojo.extend(dojo.Deferred, { this.results[0].cancel(); } }, - + _resback: function(res){ // summary: @@ -2219,7 +2219,7 @@ dojo.extend(dojo.Deferred, { callback: function(res){ // summary: Begin the callback sequence with a non-error value. - + /* callback or errback should only be called once on a given Deferred. @@ -2229,7 +2229,7 @@ dojo.extend(dojo.Deferred, { }, errback: function(/*Error*/res){ - // summary: + // summary: // Begin the callback sequence with an error result. this._check(); if(!(res instanceof Error)){ @@ -2251,7 +2251,7 @@ dojo.extend(dojo.Deferred, { }, addCallback: function(cb, cbfn){ - // summary: + // summary: // Add a single callback to the end of the callback sequence. var enclosed = dojo.hitch(cb, cbfn); if(arguments.length > 2){ @@ -2261,7 +2261,7 @@ dojo.extend(dojo.Deferred, { }, addErrback: function(cb, cbfn){ - // summary: + // summary: // Add a single callback to the end of the callback sequence. var enclosed = dojo.hitch(cb, cbfn); if(arguments.length > 2){ @@ -2271,7 +2271,7 @@ dojo.extend(dojo.Deferred, { }, addCallbacks: function(cb, eb){ - // summary: + // summary: // Add separate callback and errback to the end of the callback // sequence. this.chain.push([cb, eb]) @@ -2282,7 +2282,7 @@ dojo.extend(dojo.Deferred, { }, _fire: function(){ - // summary: + // summary: // Used internally to exhaust the callback sequence when a result // is available. var chain = this.chain; @@ -2306,7 +2306,7 @@ dojo.extend(dojo.Deferred, { // inlined from _pause() self.paused--; if( - (self.paused == 0) && + (self.paused == 0) && (self.fired >= 0) ){ self._fire(); @@ -2340,7 +2340,7 @@ dojo.provide("dojo._base.json"); dojo.fromJson = function(/*String*/ json){ // summary: // evaluates the passed string-form of a JSON object - // json: + // json: // a string literal of a JSON item, for instance: // '{ "foo": [ "bar", 1, { "baz": "thud" } ] }' // return: @@ -2371,7 +2371,7 @@ dojo._escapeString = function(/*String*/str){ dojo.toJsonIndentStr = "\t"; dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _indentStr){ // summary: - // Create a JSON serialization of an object. + // Create a JSON serialization of an object. // Note that this doesn't check for infinite recursion, so don't do that! // // it: @@ -2382,13 +2382,13 @@ dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _ind // // prettyPrint: // if true, we indent objects and arrays to make the output prettier. - // The variable dojo.toJsonIndentStr is used as the indent string - // -- to use something other than the default (tab), + // The variable dojo.toJsonIndentStr is used as the indent string + // -- to use something other than the default (tab), // change that variable before calling dojo.toJson(). // // _indentStr: // private variable for recursive calls when pretty printing, do not use. - // + // // return: // a String representing the serialized version of the passed object. @@ -2403,8 +2403,8 @@ dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _ind }else if(it === null){ return "null"; } - if(dojo.isString(it)){ - return dojo._escapeString(it); + if(dojo.isString(it)){ + return dojo._escapeString(it); } if(it.nodeType && it.cloneNode){ // isNode return ""; // FIXME: would something like outerHTML be better here? @@ -2485,8 +2485,8 @@ dojo.provide("dojo._base.array"); (function(){ var _getParts = function(arr, obj, cb){ - return [ - (dojo.isString(arr) ? arr.split("") : arr), + return [ + (dojo.isString(arr) ? arr.split("") : arr), (obj||dojo.global), // FIXME: cache the anonymous functions we create here? (dojo.isString(cb) ? (new Function("item", "index", "array", cb)) : cb) @@ -2494,7 +2494,7 @@ dojo.provide("dojo._base.array"); } dojo.mixin(dojo, { - indexOf: function( /*Array*/ array, + indexOf: function( /*Array*/ array, /*Object*/ value, /*Integer?*/ fromIndex, /*Boolean?*/ findLast){ @@ -2518,7 +2518,7 @@ dojo.provide("dojo._base.array"); lastIndexOf: function(/*Array*/array, /*Object*/value, /*Integer?*/fromIndex){ // summary: - // locates the last index of the provided value in the passed array. + // locates the last index of the provided value in the passed array. // If the value is not found, -1 is returned. // description: // For details on this method, see: @@ -2542,7 +2542,7 @@ dojo.provide("dojo._base.array"); // FIXME: there are several ways of handilng thisObject. Is // dojo.global always the default context? var _p = _getParts(arr, obj, callback); arr = _p[0]; - for(var i=0,l=_p[0].length; i<l; i++){ + for(var i=0,l=_p[0].length; i<l; i++){ _p[2].call(_p[1], arr[i], i, arr); } }, @@ -2573,7 +2573,7 @@ dojo.provide("dojo._base.array"); // returns false // example: // | dojo.every([1, 2, 3, 4], function(item){ return item>0; }); - // returns true + // returns true return this._everyOrSome(true, arr, callback, thisObject); // Boolean }, @@ -2703,7 +2703,7 @@ dojo.extend(dojo.Color, { sanitize: function(){ // summary: // makes sure that the object has correct attributes - // description: + // description: // the default implementation does nothing, include dojo.colors to // augment it to real checks return this; // dojo.Color @@ -2738,12 +2738,12 @@ dojo.extend(dojo.Color, { }); dojo.blendColors = function( - /*dojo.Color*/ start, - /*dojo.Color*/ end, + /*dojo.Color*/ start, + /*dojo.Color*/ end, /*Number*/ weight, /*dojo.Color?*/ obj ){ - // summary: + // summary: // blend colors end and start with weight from 0 to 1, 0.5 being a 50/50 blend, // can reuse a previously allocated dojo.Color object for the result var d = dojo, t = obj || new dojo.Color(); @@ -2836,15 +2836,15 @@ dojo._hasResource["dojo._base.window"] = true; dojo.provide("dojo._base.window"); dojo._gearsObject = function(){ - // summary: + // summary: // factory method to get a Google Gears plugin instance to // expose in the browser runtime environment, if present var factory; var results; - + var gearsObj = dojo.getObject("google.gears"); if(gearsObj){ return gearsObj; } // already defined elsewhere - + if(typeof GearsFactory != "undefined"){ // Firefox factory = new GearsFactory(); }else{ @@ -2868,7 +2868,7 @@ dojo._gearsObject = function(){ // still nothing? if(!factory){ return null; } - + // define the global objects now; don't overwrite them though if they // were somehow set internally by the Gears plugin, which is on their // dev roadmap for the future @@ -2919,9 +2919,9 @@ dojo._fireCallback = function(callback, context, cbArguments){ return (context ? callback.apply(context, cbArguments || [ ]) : callback()); } -dojo.withGlobal = function( /*Object*/globalObject, - /*Function*/callback, - /*Object?*/thisObject, +dojo.withGlobal = function( /*Object*/globalObject, + /*Function*/callback, + /*Object?*/thisObject, /*Array?*/cbArguments){ // summary: // Call callback with globalObject as dojo.global and @@ -2942,9 +2942,9 @@ dojo.withGlobal = function( /*Object*/globalObject, return rval; } -dojo.withDoc = function( /*Object*/documentObject, - /*Function*/callback, - /*Object?*/thisObject, +dojo.withDoc = function( /*Object*/documentObject, + /*Function*/callback, + /*Object?*/thisObject, /*Array?*/cbArguments){ // summary: // Call callback with documentObject as dojo.doc. If provided, @@ -2988,7 +2988,7 @@ dojo.provide("dojo._base.event"); // DOM event listener machinery var del = dojo._event_listener = { add: function(/*DOMNode*/node, /*String*/name, /*Function*/fp){ - if(!node){return;} + if(!node){return;} name = del._normalizeEventName(name); fp = del._fixCallback(name, fp); @@ -3034,11 +3034,11 @@ dojo.provide("dojo._base.event"); // to revisit this optimization. // This also applies to _fixEvent overrides for Safari and Opera // below. - return (name!="keypress" ? fp : function(e){ return fp.call(this, del._fixEvent(e, this)); }); + return (name!="keypress" ? fp : function(e){ return fp.call(this, del._fixEvent(e, this)); }); }, _fixEvent: function(evt, sender){ // _fixCallback only attaches us to keypress. - // Switch on evt.type anyway because we might + // Switch on evt.type anyway because we might // be called directly from dojo.fixEvent. switch(evt.type){ case "keypress": @@ -3053,7 +3053,7 @@ dojo.provide("dojo._base.event"); }; // DOM events - + dojo.fixEvent = function(/*Event*/evt, /*DOMNode*/sender){ // summary: // normalizes properties on the event object including event @@ -3078,7 +3078,7 @@ dojo.provide("dojo._base.event"); // the default listener to use on dontFix nodes, overriden for IE var node_listener = dojo._listener; - + // Unify connect and event listeners dojo._connect = function(obj, event, context, method, dontFix){ // FIXME: need a more strict test @@ -3089,7 +3089,7 @@ dojo.provide("dojo._base.event"); // create a listener var h = l.add(obj, event, dojo.hitch(context, method)); // formerly, the disconnect package contained "l" directly, but if client code - // leaks the disconnect package (by connecting it to a node), referencing "l" + // leaks the disconnect package (by connecting it to a node), referencing "l" // compounds the problem. // instead we return a listener id, which requires custom _disconnect below. // return disconnect package @@ -3165,9 +3165,9 @@ dojo.provide("dojo._base.event"); NUM_LOCK: 144, SCROLL_LOCK: 145 }; - + // IE event normalization - if(dojo.isIE){ + if(dojo.isIE){ var _trySetKeyCode = function(e, code){ try{ // squelch errors when keyCode is read-only @@ -3184,7 +3184,7 @@ dojo.provide("dojo._base.event"); if(!djConfig._allow_leaks){ // custom listener that handles leak protection for DOM events node_listener = iel = dojo._ie_listener = { - // support handler indirection: event handler functions are + // support handler indirection: event handler functions are // referenced here. Event dispatchers hold only indices. handlers: [], // add a listener to an object @@ -3207,7 +3207,7 @@ dojo.provide("dojo._base.event"); var f = (source||dojo.global)[method], l = f&&f._listeners; if(f && l && handle--){ delete ieh[l[handle]]; - delete l[handle]; + delete l[handle]; } } }; @@ -3220,22 +3220,22 @@ dojo.provide("dojo._base.event"); if(!node){return;} // undefined event = del._normalizeEventName(event); if(event=="onkeypress"){ - // we need to listen to onkeydown to synthesize + // we need to listen to onkeydown to synthesize // keypress events that otherwise won't fire // on IE var kd = node.onkeydown; if(!kd||!kd._listeners||!kd._stealthKeydown){ // we simply ignore this connection when disconnecting - // because it's side-effects are harmless + // because it's side-effects are harmless del.add(node, "onkeydown", del._stealthKeyDown); // we only want one stealth listener per node node.onkeydown._stealthKeydown = true; - } + } } return iel.add(node, event, del._fixCallback(fp)); }, remove: function(/*DOMNode*/node, /*String*/event, /*Handle*/handle){ - iel.remove(node, del._normalizeEventName(event), handle); + iel.remove(node, del._normalizeEventName(event), handle); }, _normalizeEventName: function(/*String*/eventName){ // Generally, eventName should be lower case, unless it is @@ -3252,11 +3252,11 @@ dojo.provide("dojo._base.event"); // sender: node to treat as "currentTarget" if(!evt){ var w = (sender)&&((sender.ownerDocument || sender.document || sender).parentWindow)||window; - evt = w.event; + evt = w.event; } if(!evt){return(evt);} - evt.target = evt.srcElement; - evt.currentTarget = (sender || evt.srcElement); + evt.target = evt.srcElement; + evt.currentTarget = (sender || evt.srcElement); evt.layerX = evt.offsetX; evt.layerY = evt.offsetY; // FIXME: scroll position query is duped from dojo.html to @@ -3269,10 +3269,10 @@ dojo.provide("dojo._base.event"); var offset = dojo._getIeDocumentElementOffset(); evt.pageX = evt.clientX + dojo._fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x; evt.pageY = evt.clientY + (docBody.scrollTop || 0) - offset.y; - if(evt.type == "mouseover"){ + if(evt.type == "mouseover"){ evt.relatedTarget = evt.fromElement; } - if(evt.type == "mouseout"){ + if(evt.type == "mouseout"){ evt.relatedTarget = evt.toElement; } evt.stopPropagation = del._stopPropagation; @@ -3303,20 +3303,20 @@ dojo.provide("dojo._base.event"); // some ctrl-key combinations (mostly w/punctuation) do not emit a char code in IE // we map those virtual key codes to ascii here // not valid for all (non-US) keyboards, so maybe we shouldn't bother - _punctMap: { - 106:42, - 111:47, - 186:59, - 187:43, - 188:44, - 189:45, - 190:46, - 191:47, - 192:96, - 219:91, - 220:92, - 221:93, - 222:39 + _punctMap: { + 106:42, + 111:47, + 186:59, + 187:43, + 188:44, + 189:45, + 190:46, + 191:47, + 192:96, + 219:91, + 220:92, + 221:93, + 222:39 }, _stealthKeyDown: function(evt){ // IE doesn't fire keypress for most non-printable characters. @@ -3334,12 +3334,12 @@ dojo.provide("dojo._base.event"); var c = (unprintable ? 0 : k); if(evt.ctrlKey){ if(k==3 || k==13){ - return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively - }else if(c>95 && c<106){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ c -= 48; // map CTRL-[numpad 0-9] to ASCII - }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ + }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ c += 32; // map CTRL-[A-Z] to lowercase - }else{ + }else{ c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII } } @@ -3353,13 +3353,13 @@ dojo.provide("dojo._base.event"); }, // Called in Event scope _stopPropagation: function(){ - this.cancelBubble = true; + this.cancelBubble = true; }, _preventDefault: function(){ // Setting keyCode to 0 is the only way to prevent certain keypresses (namely // ctrl-combinations that correspond to menu accelerator keys). // Otoh, it prevents upstream listeners from getting this information - // Try to split the difference here by clobbering keyCode only for ctrl + // Try to split the difference here by clobbering keyCode only for ctrl // combinations. If you still need to access the key upstream, bubbledKeyCode is // provided as a workaround. this.bubbledKeyCode = this.keyCode; @@ -3367,7 +3367,7 @@ dojo.provide("dojo._base.event"); this.returnValue = false; } }); - + // override stopEvent for IE dojo.stopEvent = function(evt){ evt = evt || window.event; @@ -3379,14 +3379,14 @@ dojo.provide("dojo._base.event"); del._synthesizeEvent = function(evt, props){ var faux = dojo.mixin({}, evt, props); del._setKeyChar(faux); - // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); + // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); // but it throws an error when preventDefault is invoked on Safari // does Event.preventDefault not support "apply" on Safari? - faux.preventDefault = function(){ evt.preventDefault(); }; - faux.stopPropagation = function(){ evt.stopPropagation(); }; + faux.preventDefault = function(){ evt.preventDefault(); }; + faux.stopPropagation = function(){ evt.stopPropagation(); }; return faux; } - + // Opera event normalization if(dojo.isOpera){ dojo.mixin(del, { @@ -3436,7 +3436,7 @@ dojo.provide("dojo._base.event"); return evt; } }); - + dojo.mixin(dojo.keys, { SHIFT_TAB: 25, UP_ARROW: 63232, @@ -3466,7 +3466,7 @@ dojo.provide("dojo._base.event"); SCROLL_LOCK: 63249, NUM_LOCK: 63289 }); - var dk = dojo.keys, identifierMap = { "Up": dk.UP_ARROW, "Down": dk.DOWN_ARROW, "Left": dk.LEFT_ARROW, "Right": dk.RIGHT_ARROW, "PageUp": dk.PAGE_UP, "PageDown": dk.PAGE_DOWN }; + var dk = dojo.keys, identifierMap = { "Up": dk.UP_ARROW, "Down": dk.DOWN_ARROW, "Left": dk.LEFT_ARROW, "Right": dk.RIGHT_ARROW, "PageUp": dk.PAGE_UP, "PageDown": dk.PAGE_DOWN }; } })(); @@ -3535,7 +3535,7 @@ if(dojo.isIE || dojo.isOpera){ if(dojo.isString(id)){ var _d = doc || dojo.doc; var te = _d.getElementById(id); - // attributes.id.value is better than just id in case the + // attributes.id.value is better than just id in case the // user has a name=id inside a form if(te && te.attributes.id.value == id){ return te; @@ -3588,7 +3588,7 @@ if(dojo.isIE || dojo.isOpera){ } _destroyContainer.appendChild(node.parentNode ? node.parentNode.removeChild(node) : node); // NOTE: see http://trac.dojotoolkit.org/ticket/2931. This may be a bug and not a feature - _destroyContainer.innerHTML = ""; + _destroyContainer.innerHTML = ""; }catch(e){ /* squelch */ } @@ -3651,9 +3651,9 @@ if(dojo.isIE || dojo.isOpera){ dojo.place = function(/*String|DomNode*/node, /*String|DomNode*/refNode, /*String|Number*/position){ // summary: // attempt to insert node in relation to ref based on position - // node: + // node: // id or reference to node to place relative to refNode - // refNode: + // refNode: // id or reference of node to use as basis for placement // position: // string noting the position of node relative to refNode or a @@ -3666,8 +3666,8 @@ if(dojo.isIE || dojo.isOpera){ // "first" and "last" indicate positions as children of refNode. // FIXME: need to write tests for this!!!! - if(!node || !refNode || position === undefined){ - return false; // boolean + if(!node || !refNode || position === undefined){ + return false; // boolean } node = dojo.byId(node); refNode = dojo.byId(refNode); @@ -3704,14 +3704,14 @@ if(dojo.isIE || dojo.isOpera){ // Box functions will assume this model. // On IE/Opera, BORDER_BOX will be set if the primary document is in quirks mode. // Can be set to change behavior of box setters. - + // can be either: // "border-box" // "content-box" (default) dojo.boxModel = "content-box"; - + // We punt per-node box mode testing completely. - // If anybody cares, we can provide an additional (optional) unit + // If anybody cares, we can provide an additional (optional) unit // that overrides existing code to include per-node box sensitivity. // Opera documentation claims that Opera 9 uses border-box in BackCompat mode. @@ -3728,17 +3728,17 @@ if(dojo.isIE || dojo.isOpera){ // ============================= // Style Functions // ============================= - + // getComputedStyle drives most of the style code. // Wherever possible, reuse the returned object. // - // API functions below that need to access computed styles accept an + // API functions below that need to access computed styles accept an // optional computedStyle parameter. // // If this parameter is omitted, the functions will call getComputedStyle themselves. // - // This way, calling code can access computedStyle once, and then pass the reference to - // multiple API functions. + // This way, calling code can access computedStyle once, and then pass the reference to + // multiple API functions. // // This is a faux declaration to take pity on the doc tool @@ -3748,11 +3748,11 @@ if(dojo.isIE || dojo.isOpera){ // Returns a "computed style" object. // description: // get "computed style" object which can be used to gather - // information about the current state of the rendered node. + // information about the current state of the rendered node. // // Note that this may behave differently on different browsers. // Values may have different formats and value encodings across - // browsers. + // browsers. // // Use the dojo.style() method for more consistent (pixelized) // return values. @@ -3769,12 +3769,12 @@ if(dojo.isIE || dojo.isOpera){ if(dojo.isSafari){ gcs = function(/*DomNode*/node){ var s = dv.getComputedStyle(node, null); - if(!s && node.style){ - node.style.display = ""; + if(!s && node.style){ + node.style.display = ""; s = dv.getComputedStyle(node, null); } return s || {}; - }; + }; }else if(dojo.isIE){ gcs = function(node){ return node.currentStyle; @@ -3790,7 +3790,7 @@ if(dojo.isIE || dojo.isOpera){ dojo._toPixelValue = function(element, value){ // style values can be floats, client code may want // to round for integer pixels. - return parseFloat(value) || 0; + return parseFloat(value) || 0; } }else{ dojo._toPixelValue = function(element, avalue){ @@ -3916,7 +3916,7 @@ if(dojo.isIE || dojo.isOpera){ } // public API - + dojo.style = function(/*DomNode|String*/ node, /*String*/style, /*String?*/value){ // summary: // gets or sets a style property on node. If 2 arguments are @@ -3950,18 +3950,18 @@ if(dojo.isIE || dojo.isOpera){ // Returns object with special values specifically useful for node // fitting. // l/t = left/top padding (respectively) - // w = the total of the left and right padding + // w = the total of the left and right padding // h = the total of the top and bottom padding - // If 'node' has position, l/t forms the origin for child nodes. + // If 'node' has position, l/t forms the origin for child nodes. // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var - s=computedStyle||gcs(n), + var + s=computedStyle||gcs(n), px=dojo._toPixelValue, - l=px(n, s.paddingLeft), + l=px(n, s.paddingLeft), t=px(n, s.paddingTop); - return { + return { l: l, t: t, w: l+px(n, s.paddingRight), @@ -3979,13 +3979,13 @@ if(dojo.isIE || dojo.isOpera){ // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var + var ne='none', - px=dojo._toPixelValue, - s=computedStyle||gcs(n), + px=dojo._toPixelValue, + s=computedStyle||gcs(n), bl=(s.borderLeftStyle!=ne ? px(n, s.borderLeftWidth) : 0), bt=(s.borderTopStyle!=ne ? px(n, s.borderTopWidth) : 0); - return { + return { l: bl, t: bt, w: bl + (s.borderRightStyle!=ne ? px(n, s.borderRightWidth) : 0), @@ -4003,11 +4003,11 @@ if(dojo.isIE || dojo.isOpera){ // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var - s=computedStyle||gcs(n), + var + s=computedStyle||gcs(n), p=dojo._getPadExtents(n, s), b=dojo._getBorderExtents(n, s); - return { + return { l: p.l + b.l, t: p.t + b.t, w: p.w + b.w, @@ -4025,8 +4025,8 @@ if(dojo.isIE || dojo.isOpera){ // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var - s=computedStyle||gcs(n), + var + s=computedStyle||gcs(n), px=dojo._toPixelValue, l=px(n, s.marginLeft), t=px(n, s.marginTop), @@ -4034,14 +4034,14 @@ if(dojo.isIE || dojo.isOpera){ b=px(n, s.marginBottom); if (dojo.isSafari && (s.position != "absolute")){ // FIXME: Safari's version of the computed right margin - // is the space between our right edge and the right edge - // of our offsetParent. - // What we are looking for is the actual margin value as + // is the space between our right edge and the right edge + // of our offsetParent. + // What we are looking for is the actual margin value as // determined by CSS. // Hack solution is to assume left/right margins are the same. r = l; } - return { + return { l: l, t: t, w: l+r, @@ -4055,15 +4055,15 @@ if(dojo.isIE || dojo.isOpera){ // They do *not* work for display: inline objects that have padding styles // because the user agent ignores padding (it's bogus styling in any case) // - // Be careful with IMGs because they are inline or block depending on + // Be careful with IMGs because they are inline or block depending on // browser and browser mode. - // Although it would be easier to read, there are not separate versions of + // Although it would be easier to read, there are not separate versions of // _getMarginBox for each browser because: // 1. the branching is not expensive // 2. factoring the shared code wastes cycles (function call overhead) // 3. duplicating the shared code wastes bytes - + dojo._getMarginBox = function(/*DomNode*/node, /*Object*/computedStyle){ // summary: // returns an object that encodes the width, height, left and top @@ -4099,14 +4099,14 @@ if(dojo.isIE || dojo.isOpera){ l -= be.l, t -= be.t; } } - return { - l: l, - t: t, - w: node.offsetWidth + me.w, - h: node.offsetHeight + me.h + return { + l: l, + t: t, + w: node.offsetWidth + me.w, + h: node.offsetHeight + me.h }; } - + dojo._getContentBox = function(node, computedStyle){ // summary: // Returns an object that encodes the width, height, left and top @@ -4119,24 +4119,24 @@ if(dojo.isIE || dojo.isOpera){ if(!w){ w=node.offsetWidth, h=node.offsetHeight; }else{ - h=node.clientHeight, be.w = be.h = 0; + h=node.clientHeight, be.w = be.h = 0; } // On Opera, offsetLeft includes the parent's border if(dojo.isOpera){ pe.l += be.l; pe.t += be.t; }; - return { - l: pe.l, - t: pe.t, - w: w - pe.w - be.w, + return { + l: pe.l, + t: pe.t, + w: w - pe.w - be.w, h: h - pe.h - be.h }; } dojo._getBorderBox = function(node, computedStyle){ var s=computedStyle||gcs(node), pe=dojo._getPadExtents(node, s), cb=dojo._getContentBox(node, s); - return { - l: cb.l - pe.l, - t: cb.t - pe.t, - w: cb.w + pe.w, + return { + l: cb.l - pe.l, + t: cb.t - pe.t, + w: cb.w + pe.w, h: cb.h + pe.h }; } @@ -4150,14 +4150,14 @@ if(dojo.isIE || dojo.isOpera){ // Beware of display: inline objects that have padding styles // because the user agent ignores padding (it's a bogus setup anyway) // - // Be careful with IMGs because they are inline or block depending on + // Be careful with IMGs because they are inline or block depending on // browser and browser mode. - // + // // Elements other than DIV may have special quirks, like built-in // margins or padding, or values not detectable via computedStyle. - // In particular, margins on TABLE do not seems to appear + // In particular, margins on TABLE do not seems to appear // at all in computedStyle on Mozilla. - + dojo._setBox = function(/*DomNode*/node, /*Number?*/l, /*Number?*/t, /*Number?*/w, /*Number?*/h, /*String?*/u){ // summary: // sets width/height/left/top in the current (native) box-model @@ -4178,7 +4178,7 @@ if(dojo.isIE || dojo.isOpera){ } dojo._usesBorderBox = function(/*DomNode*/node){ - // summary: + // summary: // True if the node uses border-box layout. // We could test the computed style of node to see if a particular box @@ -4203,8 +4203,8 @@ if(dojo.isIE || dojo.isOpera){ dojo._setBox(node, NaN, NaN, widthPx, heightPx); } - dojo._setMarginBox = function(/*DomNode*/node, /*Number?*/leftPx, /*Number?*/topPx, - /*Number?*/widthPx, /*Number?*/heightPx, + dojo._setMarginBox = function(/*DomNode*/node, /*Number?*/leftPx, /*Number?*/topPx, + /*Number?*/widthPx, /*Number?*/heightPx, /*Object*/computedStyle){ // summary: // sets the size of the node's margin box and palcement @@ -4213,7 +4213,7 @@ if(dojo.isIE || dojo.isOpera){ // you. var s = computedStyle || dojo.getComputedStyle(node); - // Some elements have special padding, margin, and box-model settings. + // Some elements have special padding, margin, and box-model settings. // To use box functions you may need to set padding, margin explicitly. // Controlling box-model is harder, in a pinch you might set dojo.boxModel. var bb=dojo._usesBorderBox(node), @@ -4223,15 +4223,15 @@ if(dojo.isIE || dojo.isOpera){ if(heightPx>=0){ heightPx = Math.max(heightPx - pb.h - mb.h, 0); } dojo._setBox(node, leftPx, topPx, widthPx, heightPx); } - + var _nilExtents = { l:0, t:0, w:0, h:0 }; // public API - + dojo.marginBox = function(/*DomNode|String*/node, /*Object?*/box){ // summary: // getter/setter for the margin-box of node. - // description: + // description: // Returns an object in the expected format of box (regardless // if box is passed). The object might look like: // { l: 50, t: 200, w: 300: h: 150 } @@ -4269,11 +4269,11 @@ if(dojo.isIE || dojo.isOpera){ var n=dojo.byId(node), s=gcs(n), b=box; return !b ? dojo._getContentBox(n, s) : dojo._setContentSize(n, b.w, b.h, s); // Object } - + // ============================= - // Positioning + // Positioning // ============================= - + var _sumAncestorProperties = function(node, prop){ if(!(node = (node||0).parentNode)){return 0}; var val, retVal = 0, _b = dojo.body(); @@ -4302,19 +4302,19 @@ if(dojo.isIE || dojo.isOpera){ x: (_w.pageXOffset || dojo._fixIeBiDiScrollLeft(de.scrollLeft) || _b.scrollLeft || 0) }; }; - + dojo._isBodyLtr = function(){ //FIXME: could check html and body tags directly instead of computed style? need to ignore case, accept empty values - return !("_bodyLtr" in dojo) ? + return !("_bodyLtr" in dojo) ? dojo._bodyLtr = dojo.getComputedStyle(dojo.body()).direction == "ltr" : - dojo._bodyLtr; // Boolean + dojo._bodyLtr; // Boolean } - + dojo._getIeDocumentElementOffset = function(){ // summary // The following values in IE contain an offset: - // event.clientX - // event.clientY + // event.clientX + // event.clientY // node.getBoundingClientRect().left // node.getBoundingClientRect().top // But other position related values do not contain this offset, such as @@ -4331,13 +4331,13 @@ if(dojo.isIE || dojo.isOpera){ }else{ // IE 6.0 return {x: dojo._isBodyLtr() || window.parent == window ? - de.clientLeft : de.offsetWidth - de.clientWidth - de.clientLeft, + de.clientLeft : de.offsetWidth - de.clientWidth - de.clientLeft, y: de.clientTop}; // Object } }; - + dojo._fixIeBiDiScrollLeft = function(/*Integer*/ scrollLeft){ - // In RTL direction, scrollLeft should be a negative value, but IE + // In RTL direction, scrollLeft should be a negative value, but IE // returns a positive one. All codes using documentElement.scrollLeft // must call this function to fix this error, otherwise the position // will offset to right when there is a horizonal scrollbar. @@ -4347,7 +4347,7 @@ if(dojo.isIE || dojo.isOpera){ } return scrollLeft; // Integer } - + dojo._abs = function(/*DomNode*/node, /*Boolean?*/includeScroll){ // summary: // Gets the absolute position of the passed element based on the @@ -4404,8 +4404,8 @@ if(dojo.isIE || dojo.isOpera){ var curnode = node; do{ var n = curnode["offsetLeft"]; - //FIXME: ugly hack to workaround the submenu in - //popupmenu2 does not shown up correctly in opera. + //FIXME: ugly hack to workaround the submenu in + //popupmenu2 does not shown up correctly in opera. //Someone have a better workaround? if(!dojo.isOpera || n>0){ ret.x += isNaN(n) ? 0 : n; @@ -4456,7 +4456,7 @@ if(dojo.isIE || dojo.isOpera){ dojo.hasClass = function(/*DomNode|String*/node, /*String*/classStr){ // summary: // Returns whether or not the specified classes are a portion of the - // class list currently applied to the node. + // class list currently applied to the node. return ((" "+dojo.byId(node).className+" ").indexOf(" "+classStr+" ") >= 0); // Boolean }; @@ -4479,7 +4479,7 @@ dojo.removeClass = function(/*DomNode|String*/node, /*String*/classStr){ }; dojo.toggleClass = function(/*DomNode|String*/node, /*String*/classStr, /*Boolean?*/condition){ - // summary: + // summary: // Adds a class to node if not present, or removes if present. // Pass a boolean condition if you want to explicitly add or remove. // condition: @@ -4510,8 +4510,8 @@ dojo.provide("dojo._base.NodeList"); dojo.NodeList = function(){ // summary: - // dojo.NodeList is as subclass of Array which adds syntactic - // sugar for chaining, common iteration operations, animation, + // dojo.NodeList is as subclass of Array which adds syntactic + // sugar for chaining, common iteration operations, animation, // and node manipulation. NodeLists are most often returned as // the result of dojo.query() calls. // example: @@ -4528,7 +4528,7 @@ dojo.provide("dojo._base.NodeList"); // FIXME: handle return values for #3244 // http://trac.dojotoolkit.org/ticket/3244 - + // FIXME: // need to wrap or implement: // join (perhaps w/ innerHTML/outerHTML overload for toString() of items?) @@ -4601,10 +4601,10 @@ dojo.provide("dojo._base.NodeList"); var a = dojo._toArray(arguments, 0, [this]); return tnl(a.concat.apply([], a)); }, - + indexOf: function(/*Object*/ value, /*Integer?*/ fromIndex){ // summary: - // see dojo.indexOf(). The primary difference is that the acted-on + // see dojo.indexOf(). The primary difference is that the acted-on // array is implicitly this NodeList // value: // The value to search for. @@ -4665,7 +4665,7 @@ dojo.provide("dojo._base.NodeList"); forEach: function(callback, thisObj){ // summary: - // see dojo.forEach(). The primary difference is that the acted-on + // see dojo.forEach(). The primary difference is that the acted-on // array is implicitly this NodeList d.forEach(this, callback, thisObj); @@ -4673,12 +4673,12 @@ dojo.provide("dojo._base.NodeList"); }, // custom methods - + coords: function(){ // summary: // Returns the box objects all elements in a node list as // an Array (*not* a NodeList) - + return d.map(this, d.coords); }, @@ -4687,7 +4687,7 @@ dojo.provide("dojo._base.NodeList"); // gets or sets the CSS property for every element in the NodeList // property: String // the CSS property to get/set, in JavaScript notation - // ("lineHieght" instead of "line-height") + // ("lineHieght" instead of "line-height") // value: String? // optional. The value to set the property to // return: @@ -4708,7 +4708,7 @@ dojo.provide("dojo._base.NodeList"); // in the NodeList // property: String // the CSS property to get/set, in JavaScript notation - // ("lineHieght" instead of "line-height") + // ("lineHieght" instead of "line-height") // value: String? // optional. The value to set the property to // return: @@ -4739,7 +4739,7 @@ dojo.provide("dojo._base.NodeList"); // by queryOrNode. Returns the original NodeList. // queryOrNode: // may be a string representing any valid CSS3 selector or a DOM node. - // In the selector case, only the first matching element will be used + // In the selector case, only the first matching element will be used // for relative positioning. // position: // can be one of: @@ -4768,7 +4768,7 @@ dojo.provide("dojo._base.NodeList"); // if 2 arguments are passed (methodName, objOrFunc), objOrFunc should // reference a function or be the name of the function in the global // namespace to attach. If 3 arguments are provided - // (methodName, objOrFunc, funcName), objOrFunc must be the scope to + // (methodName, objOrFunc, funcName), objOrFunc must be the scope to // locate the bound function in // funcName: // optional. A string naming the function in objOrFunc to bind to the @@ -4862,9 +4862,9 @@ dojo.provide("dojo._base.NodeList"); var items = this; var _a = arguments; var r = d.NodeList(); - var rp = function(t){ + var rp = function(t){ if(typeof t != "undefined"){ - r.push(t); + r.push(t); } } if(d.isString(simpleQuery)){ @@ -4882,7 +4882,7 @@ dojo.provide("dojo._base.NodeList"); return r; // dojo.NodeList }, - + /* // FIXME: should this be "copyTo" and include parenting info? clone: function(){ @@ -4894,7 +4894,7 @@ dojo.provide("dojo._base.NodeList"); addContent: function(/*String*/ content, /*String||Integer?*/ position){ // summary: - // add a node or some HTML as a string to every item in the list. + // add a node or some HTML as a string to every item in the list. // Returns the original list. // content: // the HTML in string format to add at position to every item @@ -4933,8 +4933,8 @@ dojo.provide("dojo._base.NodeList"); } // FIXME: should these events trigger publishes? /* - return (a ? this.connect(_oe, a, b) : - this.forEach(function(n){ + return (a ? this.connect(_oe, a, b) : + this.forEach(function(n){ // FIXME: // listeners get buried by // addEventListener and can't be dug back @@ -4972,7 +4972,7 @@ dojo.provide("dojo._base.query"); designed to take any valid CSS3 selector and return the nodes matching the selector. To do this quickly, it processes queries in several steps, applying caching where profitable. - + The steps (roughly in reverse order of the way they appear in the code): 1.) check to see if we already have a "query dispatcher" - if so, use that with the given parameterization. Skip to step 4. @@ -5024,7 +5024,7 @@ dojo.provide("dojo._base.query"); } // the overall data graph of the full query, as represented by queryPart objects - var qparts = []; + var qparts = []; // state keeping vars var inBrackets = -1; var inParens = -1; @@ -5135,8 +5135,8 @@ dojo.provide("dojo._base.query"); }; }else if(cc == "("){ if(inPseudo >= 0){ - _cp = { - name: ts(inPseudo+1, x), + _cp = { + name: ts(inPseudo+1, x), value: null } currentPart.pseudos.push(_cp); @@ -5148,9 +5148,9 @@ dojo.provide("dojo._base.query"); if(inPseudo >= 0){ currentPart.pseudos.push({ name: ts(inPseudo+1, x) }); } - currentPart.hasLoops = ( - currentPart.pseudos.length || - currentPart.attrs.length || + currentPart.hasLoops = ( + currentPart.pseudos.length || + currentPart.attrs.length || currentPart.classes.length ); currentPart.query = ts(pStart, x); currentPart.tag = (currentPart["oper"]) ? null : (currentPart.tag || "*"); @@ -5160,7 +5160,7 @@ dojo.provide("dojo._base.query"); } return qparts; }; - + //////////////////////////////////////////////////////////////////////// // XPath query code @@ -5195,9 +5195,9 @@ dojo.provide("dojo._base.query"); // matching function that generates whatever type of yes/no distinguisher // the query method needs. The method is a bit tortured and hard to read // because it needs to be used in both the XPath and DOM branches. - var handleAttrs = function( attrList, - query, - getDefault, + var handleAttrs = function( attrList, + query, + getDefault, handleMatch){ d.forEach(query.attrs, function(attr){ var matcher; @@ -5230,7 +5230,7 @@ dojo.provide("dojo._base.query"); // get the tag name (if any) xpath += prefix + tqp.tag; - + // check to see if it's got an id. Needs to come first in xpath. if(tqp.id){ xpath += "[@id='"+tqp.id+"'][1]"; @@ -5242,12 +5242,12 @@ dojo.provide("dojo._base.query"); if(cn.charAt(cnl-1) == "*"){ padding = ""; cn = cn.substr(0, cnl-1); } - xpath += + xpath += "[contains(concat(' ',@class,' '), ' "+ cn + padding + "')]"; }); - handleAttrs(xPathAttrs, tqp, + handleAttrs(xPathAttrs, tqp, function(condition){ return "[@"+condition+"]"; }, @@ -5277,7 +5277,7 @@ dojo.provide("dojo._base.query"); var ret = []; var xpathResult; try{ - xpathResult = doc.evaluate(xpath, parent, null, + xpathResult = doc.evaluate(xpath, parent, null, // XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null); XPathResult.ANY_TYPE, null); }catch(e){ @@ -5298,7 +5298,7 @@ dojo.provide("dojo._base.query"); d.xPathMatch = function(query){ // XPath based DOM query system. Handles a small subset of CSS // selectors, subset is identical to the non-XPath version of this - // function. + // function. // FIXME: need to add support for alternate roots return getXPathFunc(query)(); @@ -5396,14 +5396,14 @@ dojo.provide("dojo._base.query"); // does it have a tagName component? if(q.tag){ if(q.tag == "*"){ - ff = agree(ff, + ff = agree(ff, function(elem){ return (elem.nodeType == 1); } ); }else{ // tag name match - ff = agree(ff, + ff = agree(ff, function(elem){ return ( (elem.nodeType == 1) && @@ -5417,7 +5417,7 @@ dojo.provide("dojo._base.query"); // does the node have an ID? if(q.id){ - ff = agree(ff, + ff = agree(ff, function(elem){ return ( (elem.nodeType == 1) && @@ -5437,7 +5437,7 @@ dojo.provide("dojo._base.query"); } var getNodeIndex = function(node){ - // NOTE: + // NOTE: // we could have a more accurate caching mechanism by invalidating // caches after the query has finished, but I think that'd lead to // significantly more cache churn than the cache would provide @@ -5482,7 +5482,7 @@ dojo.provide("dojo._base.query"); child = child.nextSibling; }while(child); }else{ - // NOTE: + // NOTE: // could be incorrect in some cases (node swaps involving the // passed node, etc.), but we ignore those due to the relative // unlikelihood of that occuring @@ -5522,7 +5522,7 @@ dojo.provide("dojo._base.query"); } }, "$=": function(attr, value){ - // E[foo$="bar"] + // E[foo$="bar"] // an E element whose "foo" attribute value ends exactly // with the string "bar" var tval = " "+value; @@ -5532,7 +5532,7 @@ dojo.provide("dojo._base.query"); } }, "~=": function(attr, value){ - // E[foo~="bar"] + // E[foo~="bar"] // an E element whose "foo" attribute value is a list of // space-separated values, one of which is exactly equal // to "bar" @@ -5782,10 +5782,10 @@ dojo.provide("dojo._base.query"); // "div.foo .bar") into simple query expressions (e.g., ["div.foo", // ".bar"]) var _queryFuncCache = { - "*": d.isIE ? - function(root){ + "*": d.isIE ? + function(root){ return root.all; - } : + } : function(root){ return root.getElementsByTagName("*"); }, @@ -5827,15 +5827,15 @@ dojo.provide("dojo._base.query"); // a specialized method that implements our primoridal "query optimizer". // This allows us to dispatch queries to the fastest subsystem we can get. var _getQueryFunc = ( - // NOTE: + // NOTE: // XPath on the Webkit nighlies is slower than it's DOM iteration // for most test cases - // FIXME: + // FIXME: // we should try to capture some runtime speed data for each query // function to determine on the fly if we should stick w/ the // potentially optimized variant or if we should try something // new. - (document["evaluate"] && !d.isSafari) ? + (document["evaluate"] && !d.isSafari) ? function(query){ // has xpath support that's faster than DOM var qparts = query.split(" "); @@ -5852,7 +5852,7 @@ dojo.provide("dojo._base.query"); // should we handle it? // kind of a lame heuristic, but it works - if( + if( // a "div div div" style query ((qparts.length > 2)&&(query.indexOf(">") == -1))|| // or something else with moderate complexity. kinda janky @@ -5908,7 +5908,7 @@ dojo.provide("dojo._base.query"); } } - // FIXME: + // FIXME: // Dean's new Base2 uses a system whereby queries themselves note if // they'll need duplicate filtering. We need to get on that plan!! @@ -5926,7 +5926,7 @@ dojo.provide("dojo._base.query"); _zipIdx++; arr[0]["_zipIdx"] = _zipIdx; for(var x=1, te; te = arr[x]; x++){ - if(arr[x]["_zipIdx"] != _zipIdx){ + if(arr[x]["_zipIdx"] != _zipIdx){ ret.push(te); } te["_zipIdx"] = _zipIdx; @@ -5956,7 +5956,7 @@ dojo.provide("dojo._base.query"); // * class selectors (e.g., ".foo") // * node type selectors like "span" // * " " descendant selectors - // * ">" child element selectors + // * ">" child element selectors // * "#foo" style ID selectors // * "*" universal selector // * attribute queries: @@ -5977,14 +5977,14 @@ dojo.provide("dojo._base.query"); // with this palette of selectors and when combined with functions for // maniplation presented by dojo.NodeList, many types of DOM // manipulation operations become very straightforward. - // + // // Unsupported Selectors: // -------------------- // // While dojo.query handles many CSS3 selectors, some fall outside of // what's resaonable for a programmatic node querying engine to // handle. Currently unsupported selectors include: - // + // // * namespace-differentiated selectors of any form // * "~", the immediately preceeded-by sibling selector // * "+", the preceeded-by sibling selector @@ -5994,11 +5994,11 @@ dojo.provide("dojo._base.query"); // * all visual and state selectors: // * :root, :active, :hover, :visisted, :link, :enabled, :disabled, :checked // * :*-of-type pseudo selectors - // + // // dojo.query and XML Documents: // ----------------------------- // FIXME - // + // // query: String // The CSS3 expression to match against. For details on the syntax of // CSS3 selectors, see: @@ -6094,14 +6094,14 @@ dojo.provide("dojo._base.xhr"); // yields this object structure as the result of a call to // formToObject(): // - // { + // { // blah: "blah", // multi: [ // "thud", // "thonk" // ] // }; - + var ret = {}; var iq = "input:not([type=file]):not([type=submit]):not([type=image]):not([type=reset]):not([type=button]), select, textarea"; _d.query(iq, formNode).filter(function(node){ @@ -6118,7 +6118,7 @@ dojo.provide("dojo._base.xhr"); setValue(ret, _in, opt.value); } }); - }else{ + }else{ setValue(ret, _in, item.value); if(type == "image"){ ret[_in+".x"] = ret[_in+".y"] = ret[_in].x = ret[_in].y = 0; @@ -6135,7 +6135,7 @@ dojo.provide("dojo._base.xhr"); // example: // this object: // - // | { + // | { // | blah: "blah", // | multi: [ // | "thud", @@ -6144,7 +6144,7 @@ dojo.provide("dojo._base.xhr"); // | }; // // yeilds the following query string: - // + // // | "blah=blah&multi=thud&multi=thonk" @@ -6191,7 +6191,7 @@ dojo.provide("dojo._base.xhr"); // This string: // // "foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&" - // + // // returns this object structure: // // { @@ -6199,7 +6199,7 @@ dojo.provide("dojo._base.xhr"); // thinger: " spaces =blah", // zonk: "blarg" // } - // + // // Note that spaces and other urlencoded entities are correctly // handled. @@ -6237,13 +6237,13 @@ dojo.provide("dojo._base.xhr"); // every IO API timeout: 1000, // milliseconds handleAs: "text", // replaces the always-wrong "mimetype" - content: { + content: { key: "value" }, // browser-specific, MAY be unsupported sync: true, // defaults to false - form: dojo.byId("someForm") + form: dojo.byId("someForm") } */ @@ -6263,7 +6263,7 @@ dojo.provide("dojo._base.xhr"); } return _d.fromJson(xhr.responseText); }, - "json-comment-filtered": function(xhr){ + "json-comment-filtered": function(xhr){ // NOTE: we provide the json-comment-filtered option as one solution to // the "JavaScript Hijacking" issue noted by Fortify and others. It is // not appropriate for all circumstances. @@ -6276,11 +6276,11 @@ dojo.provide("dojo._base.xhr"); } return _d.fromJson(value.substring(cStartIdx+2, cEndIdx)); }, - "javascript": function(xhr){ + "javascript": function(xhr){ // FIXME: try Moz and IE specific eval variants? return _d.eval(xhr.responseText); }, - "xml": function(xhr){ + "xml": function(xhr){ if(_d.isIE && !xhr.responseXML){ _d.forEach(["MSXML2", "Microsoft", "MSXML", "MSXML3"], function(i){ try{ @@ -6334,13 +6334,13 @@ dojo.provide("dojo._base.xhr"); // error: Function? // function(response, ioArgs){}. response is an Object, ioArgs // is of type dojo.__ioCallbackArgs. The error function will - // be called in an error case. + // be called in an error case. // handle: Function // function(response, ioArgs){}. response is an Object, ioArgs // is of type dojo.__ioCallbackArgs. The handle function will // be called in either the successful or error case. For // the load, error and handle functions, the ioArgs object - // will contain the following properties: + // will contain the following properties: } =====*/ @@ -6388,7 +6388,7 @@ dojo.provide("dojo._base.xhr"); /*Function*/canceller, /*Function*/okHandler, /*Function*/errHandler){ - // summary: + // summary: // sets up the Deferred and ioArgs property on the Deferred so it // can be used in an io call. // args: @@ -6404,25 +6404,25 @@ dojo.provide("dojo._base.xhr"); // object returned from this function. // errHandler: // The first error callback to be registered with Deferred. It has the opportunity - // to do cleanup on an error. It will receive two arguments: error (the + // to do cleanup on an error. It will receive two arguments: error (the // Error object) and dfd, the Deferred object returned from this function. var ioArgs = {args: args, url: args.url}; //Get values from form if requestd. var formObject = null; - if(args.form){ + if(args.form){ var form = _d.byId(args.form); - //IE requires going through getAttributeNode instead of just getAttribute in some form cases, + //IE requires going through getAttributeNode instead of just getAttribute in some form cases, //so use it for all. See #2844 var actnNode = form.getAttributeNode("action"); - ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); + ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); formObject = _d.formToObject(form); } // set up the query params var miArgs = [{}]; - + if(formObject){ // potentially over-ride url-provided params w/ form values miArgs.push(formObject); @@ -6435,7 +6435,7 @@ dojo.provide("dojo._base.xhr"); miArgs.push({"dojo.preventCache": new Date().valueOf()}); } ioArgs.query = _d.objectToQuery(_d.mixin.apply(null, miArgs)); - + // .. and the real work of getting the deferred in order, etc. ioArgs.handleAs = args.handleAs || "text"; var d = new _d.Deferred(canceller); @@ -6465,9 +6465,9 @@ dojo.provide("dojo._base.xhr"); return handle.call(args, value, ioArgs); }); } - + d.ioArgs = ioArgs; - + // FIXME: need to wire up the xhr object's abort method to something // analagous in the Deferred return d; @@ -6475,7 +6475,7 @@ dojo.provide("dojo._base.xhr"); var _deferredCancel = function(/*Deferred*/dfd){ //summary: canceller function for dojo._ioSetArgs call. - + dfd.canceled = true; var xhr = dfd.ioArgs.xhr; var _at = (typeof xhr.abort); @@ -6493,7 +6493,7 @@ dojo.provide("dojo._base.xhr"); } var _deferError = function(/*Error*/error, /*Deferred*/dfd){ //summary: errHandler function for dojo._ioSetArgs call. - + // console.debug("xhr error in:", dfd.ioArgs.xhr); console.debug(error); return error; @@ -6512,10 +6512,10 @@ dojo.provide("dojo._base.xhr"); var _inFlightIntvl = null; var _inFlight = []; var _watchInFlight = function(){ - //summary: + //summary: // internal method that checks each inflight XMLHttpRequest to see // if it has completed or if the timeout situation applies. - + var now = (new Date()).getTime(); // make sure sync calls stay thread safe, if this callback is called // during a sync call and this results in another sync call before the @@ -6527,7 +6527,7 @@ dojo.provide("dojo._base.xhr"); var dfd = tif.dfd; try{ if(!dfd || dfd.canceled || !tif.validCheck(dfd)){ - _inFlight.splice(i--, 1); + _inFlight.splice(i--, 1); }else if(tif.ioCheck(dfd)){ _inFlight.splice(i--, 1); tif.resHandle(dfd); @@ -6649,7 +6649,7 @@ dojo.provide("dojo._base.xhr"); if(ioArgs.query.length){ ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query; ioArgs.query = null; - } + } } /*===== @@ -6657,7 +6657,7 @@ dojo.provide("dojo._base.xhr"); // summary: // In addition to the properties listed for the dojo.__ioArgs type, // the following properties are allowed for dojo.xhr* methods. - // handleAs: + // handleAs: // String. Acceptable values are: // "text" (default) // "json" @@ -6674,7 +6674,7 @@ dojo.provide("dojo._base.xhr"); =====*/ dojo.xhrGet = function(/*dojo.__xhrArgs*/ args){ - // summary: + // summary: // Sends an HTTP GET request to the server. var dfd = _makeXhrDeferred(args); _d._ioAddQueryToUrl(dfd.ioArgs); @@ -6682,7 +6682,7 @@ dojo.provide("dojo._base.xhr"); } dojo.xhrPost = function(/*dojo.__xhrArgs*/ args){ - //summary: + //summary: // Sends an HTTP POST request to the server. return _doIt("POST", _makeXhrDeferred(args)); // dojo.Deferred } @@ -6752,7 +6752,7 @@ dojo.provide("dojo._base.fx"); /* - Animation losely package based on Dan Pupius' work, contributed under CLA: + Animation losely package based on Dan Pupius' work, contributed under CLA: http://pupius.co.uk/js/Toolkit.Drawing.js */ @@ -6786,7 +6786,7 @@ dojo.declare("dojo._Animation", null, { this.curve = new dojo._Line(this.curve[0], this.curve[1]); } }, - + // duration: Integer // The time in milliseonds the animation will take to run duration: 1000, @@ -6794,11 +6794,11 @@ dojo.declare("dojo._Animation", null, { /*===== // curve: dojo._Line||Array // A two element array of start and end values, or a dojo._Line instance to be - // used in the Animation. + // used in the Animation. curve: null, // easing: Function - // A Function to adjust the acceleration (or deceleration) of the progress + // A Function to adjust the acceleration (or deceleration) of the progress // across a dojo._Line easing: null, =====*/ @@ -6808,11 +6808,11 @@ dojo.declare("dojo._Animation", null, { repeat: 0, // rate: Integer - // the time in milliseconds to wait before advancing to next frame + // the time in milliseconds to wait before advancing to next frame // (used as a fps timer: rate/1000 = fps) rate: 10 /* 100 fps */, -/*===== +/*===== // delay: Integer // The time in milliseconds to wait before starting animation after it has been .play()'ed delay: null, @@ -7054,7 +7054,7 @@ dojo.declare("dojo._Animation", null, { } : function(){}; dojo._fade = function(/*Object*/ args){ - // summary: + // summary: // Returns an animation that will fade the node defined by // args.node from the start to end values passed (args.start // args.end) (end is mandatory, start is optional) @@ -7082,14 +7082,14 @@ dojo.declare("dojo._Animation", null, { =====*/ dojo.fadeIn = function(/*dojo.__fadeArgs*/ args){ - // summary: + // summary: // Returns an animation that will fade node defined in 'args' from // its current opacity to fully opaque. return d._fade(d.mixin({ end: 1 }, args)); // dojo._Animation } dojo.fadeOut = function(/*dojo.__fadeArgs*/ args){ - // summary: + // summary: // Returns an animation that will fade node defined in 'args' // from its current opacity to fully transparent. return d._fade(d.mixin({ end: 0 }, args)); // dojo._Animation @@ -7125,7 +7125,7 @@ dojo.declare("dojo._Animation", null, { } dojo.animateProperty = function(/*Object*/ args){ - // summary: + // summary: // Returns an animation that will transition the properties of // node defined in 'args' depending how they are defined in // 'args.properties' @@ -7134,15 +7134,15 @@ dojo.declare("dojo._Animation", null, { // The foundation of most dojo.fx animations, dojo.AnimateProperty // will take an object of "properties" corresponding to style // properties, and animate them in parallel over a set duration. - // + // // args.node can be a String or a DomNode reference - // + // // example: // | dojo.animateProperty({ node: node, duration:2000, // | properties: { // | width: { start: '200', end: '400', unit:"px" }, // | height: { start:'200', end: '400', unit:"px" }, - // | paddingTop: { start:'5', end:'50', unit:"px" } + // | paddingTop: { start:'5', end:'50', unit:"px" } // | } // | }).play(); // diff --git a/tests/javascript/frameworks/dojo/dojo-1.1.2.js b/tests/javascript/frameworks/dojo/dojo-1.1.2.js index b2a110c017957dbf5fcc9837d25c89710bc9996d..a0749918f6d0935438a9eb37494593fd6aa0d725 100644 --- a/tests/javascript/frameworks/dojo/dojo-1.1.2.js +++ b/tests/javascript/frameworks/dojo/dojo-1.1.2.js @@ -25,7 +25,7 @@ ["dojo", "fojo"], ["dijit", "fijit"], ["dojox", "fojox"] - + ] */ @@ -145,14 +145,14 @@ djConfig = { var cn = [ "assert", "count", "debug", "dir", "dirxml", "error", "group", "groupEnd", "info", "profile", "profileEnd", "time", "timeEnd", - "trace", "warn", "log" + "trace", "warn", "log" ]; var i=0, tn; while((tn=cn[i++])){ if(!console[tn]){ (function(){ var tcn = tn+""; - console[tcn] = function(){ + console[tcn] = function(){ var a = Array.apply({}, arguments); a.unshift(tcn+":"); console.log(a.join(" ")); @@ -183,7 +183,7 @@ djConfig = { if(typeof dojox == "undefined"){ this.dojox = {_scopeName: "dojox"}; } - + if(!d._scopeArgs){ d._scopeArgs = [dojo, dijit, dojox]; } @@ -224,11 +224,11 @@ dojo.global = { }; =====*/ dojo.locale = d.config.locale; - + var rev = "$Rev: 21532 $".match(/\d+/); dojo.version = { - // summary: + // summary: // version number of dojo // major: Integer // Major version. If total version is "1.2.0beta1", will be 1 @@ -281,7 +281,7 @@ dojo.global = { } dojo.mixin = function(/*Object*/obj, /*Object...*/props){ - // summary: + // summary: // Adds all properties and methods of props to obj and returns the // (now modified) obj. // description: @@ -307,7 +307,7 @@ dojo.global = { // | constructor: function(properties){ // | // property configuration: // | dojo.mixin(this, properties); - // | + // | // | console.debug(this.quip); // | // ... // | }, @@ -328,7 +328,7 @@ dojo.global = { // | name: "Carl Brutanananadilewski" // | } // | ); - // | + // | // | // will print "Carl Brutanananadilewski" // | console.debug(flattened.name); // | // will print "true" @@ -351,14 +351,14 @@ dojo.global = { } dojo.setObject = function(/*String*/name, /*Object*/value, /*Object?*/context){ - // summary: + // summary: // Set a property from a dot-separated string, such as "A.B.C" - // description: + // description: // Useful for longer api chains where you have to test each object in // the chain, or when you have an object reference in string format. // Objects are created as needed along `path`. Returns the passed // value if setting is successful or `undefined` if not. - // name: + // name: // Path to a property, in the form "A.B.C". // context: // Optional. Object to use as root of path. Defaults to @@ -381,29 +381,29 @@ dojo.global = { } dojo.getObject = function(/*String*/name, /*Boolean*/create, /*Object*/context){ - // summary: + // summary: // Get a property from a dot-separated string, such as "A.B.C" - // description: + // description: // Useful for longer api chains where you have to test each object in // the chain, or when you have an object reference in string format. - // name: + // name: // Path to an property, in the form "A.B.C". // context: // Optional. Object to use as root of path. Defaults to // 'dojo.global'. Null may be passed. - // create: + // create: // Optional. Defaults to `false`. If `true`, Objects will be // created at any point along the 'path' that is undefined. return d._getProp(name.split("."), create, context); // Object } dojo.exists = function(/*String*/name, /*Object?*/obj){ - // summary: + // summary: // determine if an object supports a given method - // description: + // description: // useful for longer api chains where you have to test each object in // the chain - // name: + // name: // Path to an object, in the form "A.B.C". // obj: // Object to use as root of path. Defaults to @@ -426,10 +426,10 @@ dojo.global = { dojo["eval"] = function(/*String*/ scriptFragment){ - // summary: + // summary: // Perform an evaluation in the global scope. Use this rather than // calling 'eval()' directly. - // description: + // description: // Placed in a separate function to minimize size of trapped // exceptions. Calling eval() directly from some other scope may // complicate tracebacks on some platforms. @@ -451,7 +451,7 @@ dojo.global = { /*===== dojo.deprecated = function(behaviour, extra, removal){ - // summary: + // summary: // Log a debug message to indicate that a behavior has been // deprecated. // behaviour: String @@ -470,7 +470,7 @@ dojo.global = { dojo.experimental = function(moduleName, extra){ // summary: Marks code as experimental. - // description: + // description: // This can be used to mark a function, file, or module as // experimental. Experimental code is not ready to be used, and the // APIs are subject to change without notice. Experimental code may be @@ -532,11 +532,11 @@ dojo.global = { _loadedUrls: [], - //WARNING: + //WARNING: // This variable is referenced by packages outside of bootstrap: // FloatingPane.js and undo/browser.js _postLoad: false, - + //Egad! Lots of test files push on this directly instead of using dojo.addOnLoad. _loaders: [], _unloaders: [], @@ -555,13 +555,13 @@ dojo.global = { // not caught by us, so the caller will see it. We return a true // value if and only if the script is found. // - // relpath: + // relpath: // A relative path to a script (no leading '/', and typically ending // in '.js'). - // module: + // module: // A module whose existance to check for after loading a path. Can be // used to determine success or failure of the load. - // cb: + // cb: // a callback function to pass the result of evaluating the script var uri = ((relpath.charAt(0) == '/' || relpath.match(/^\w+:/)) ? "" : this.baseUrl) + relpath; @@ -582,7 +582,7 @@ dojo.global = { // it succeeded. Returns false if the URI reading failed. Throws if // the evaluation throws. // uri: a uri which points at the script to be loaded - // cb: + // cb: // a callback function to process the result of evaluating the script // as an expression, typically used by the resource bundle loader to // load JSON-style resources @@ -606,7 +606,7 @@ dojo.global = { if(cb){ cb(value); } return true; // Boolean } - + // FIXME: probably need to add logging to this method dojo._loadUriAndCheck = function(/*String*/uri, /*String*/moduleName, /*Function?*/cb){ // summary: calls loadUri then findModule and returns true if both succeed @@ -630,7 +630,7 @@ dojo.global = { this._loadNotifying = true; this._postLoad = true; var mll = d._loaders; - + //Clear listeners so new ones can be added //For other xdomain package loads after the initial load. this._loaders = []; @@ -645,7 +645,7 @@ dojo.global = { } this._loadNotifying = false; - + //Make sure nothing else got added to the onload queue //after this first run. If something did, and we are not waiting for any //more inflight resources, run again. @@ -711,7 +711,7 @@ dojo.global = { dojo._modulesLoaded = function(){ if(d._postLoad){ return; } - if(d._inFlightCount > 0){ + if(d._inFlightCount > 0){ console.warn("files still in flight!"); return; } @@ -745,8 +745,8 @@ dojo.global = { var syms = modulename.split("."); for(var i = syms.length; i>0; i--){ var parentModule = syms.slice(0, i).join("."); - if((i==1) && !this._moduleHasPrefix(parentModule)){ - // Support default module directory (sibling of dojo) for top-level modules + if((i==1) && !this._moduleHasPrefix(parentModule)){ + // Support default module directory (sibling of dojo) for top-level modules syms[0] = "../" + syms[0]; }else{ var parentModulePath = this._getModulePrefix(parentModule); @@ -780,26 +780,26 @@ dojo.global = { // description: // `dojo._loadModule("A.B")` first checks to see if symbol A.B is // defined. If it is, it is simply returned (nothing to do). - // + // // If it is not defined, it will look for `A/B.js` in the script root // directory. - // + // // `dojo._loadModule` throws an excpetion if it cannot find a file // to load, or if the symbol `A.B` is not defined after loading. - // + // // It returns the object `A.B`. - // + // // `dojo._loadModule()` does nothing about importing symbols into // the current namespace. It is presumed that the caller will // take care of that. For example, to import all symbols into a // local block, you might write: - // + // // | with (dojo._loadModule("A.B")) { // | ... // | } - // + // // And to import just the leaf symbol to a local variable: - // + // // | var B = dojo._loadModule("A.B"); // | ... // returns: the required namespace object @@ -827,7 +827,7 @@ dojo.global = { // pass in false so we can give better error module = this._loadedModules[moduleName]; if(!module){ - throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); + throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); } } @@ -845,14 +845,14 @@ dojo.global = { // Each javascript source file is called a resource. When a // resource is loaded by the browser, `dojo.provide()` registers // that it has been loaded. - // + // // For backwards compatibility reasons, in addition to registering // the resource, `dojo.provide()` also ensures that the javascript // object for the module exists. For example, // `dojo.provide("dojox.data.FlickrStore")`, in addition to // registering that `FlickrStore.js` is a resource for the // `dojox.data` module, will ensure that the `dojox.data` - // javascript object exists, so that calls like + // javascript object exists, so that calls like // `dojo.data.foo = function(){ ... }` don't fail. // // In the case of a build where multiple javascript source files @@ -911,7 +911,7 @@ dojo.global = { if(condition === true){ // FIXME: why do we support chained require()'s here? does the build system? var args = []; - for(var i = 1; i < arguments.length; i++){ + for(var i = 1; i < arguments.length; i++){ args.push(arguments[i]); } d.require.apply(d, args); @@ -921,13 +921,13 @@ dojo.global = { dojo.requireAfterIf = d.requireIf; dojo.registerModulePath = function(/*String*/module, /*String*/prefix){ - // summary: + // summary: // maps a module name to a path - // description: + // description: // An unregistered module is given the default path of ../[module], // relative to Dojo root. For example, module acme is mapped to // ../acme. If you want to use a different module name, use - // dojo.registerModulePath. + // dojo.registerModulePath. // example: // If your dojo.js is located at this location in the web root: // | /myapp/js/dojo/dojo/dojo.js @@ -940,7 +940,7 @@ dojo.global = { // At which point you can then use dojo.require() to load the // modules (assuming they provide() the same things which are // required). The full code might be: - // | <script type="text/javascript" + // | <script type="text/javascript" // | src="/myapp/js/dojo/dojo/dojo.js"></script> // | <script type="text/javascript"> // | dojo.registerModulePath("foo", "../../foo"); @@ -957,15 +957,15 @@ dojo.global = { // same style as dojo.require. Contents of the resource bundle are // typically strings, but may be any name/value pair, represented in // JSON format. See also dojo.i18n.getLocalization. - // moduleName: + // moduleName: // name of the package containing the "nls" directory in which the // bundle is found - // bundleName: + // bundleName: // bundle name, i.e. the filename without the '.js' suffix - // locale: + // locale: // the locale to load (optional) By default, the browser's user // locale as defined by dojo.locale - // availableFlatLocales: + // availableFlatLocales: // A comma-separated list of the available, flattened locales for this // bundle. This argument should only be set by the build process. // description: @@ -1022,11 +1022,11 @@ dojo.global = { var ire = new RegExp("^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$"); dojo._Url = function(/*dojo._Url||String...*/){ - // summary: + // summary: // Constructor to create an object representing a URL. // It is marked as private, since we might consider removing // or simplifying it. - // description: + // description: // Each argument is evaluated in order relative to the next until // a canonical uri is produced. To get an absolute Uri relative to // the current document use: @@ -1095,7 +1095,7 @@ dojo.global = { } uri = []; - if(relobj.scheme){ + if(relobj.scheme){ uri.push(relobj.scheme, ":"); } if(relobj.authority){ @@ -1135,7 +1135,7 @@ dojo.global = { dojo._Url.prototype.toString = function(){ return this.uri; }; dojo.moduleUrl = function(/*String*/module, /*dojo._Url||String*/url){ - // summary: + // summary: // Returns a `dojo._Url` object relative to a module. // example: // | var pngPath = dojo.moduleUrl("acme","images/small.png"); @@ -1143,10 +1143,10 @@ dojo.global = { // | // create an image and set it's source to pngPath's value: // | var img = document.createElement("img"); // | // NOTE: we assign the string representation of the url object - // | img.src = pngPath.toString(); + // | img.src = pngPath.toString(); // | // add our image to the document // | dojo.body().appendChild(img); - // example: + // example: // you may de-reference as far as you like down the package // hierarchy. This is sometimes handy to avoid lenghty relative // urls or for building portable sub-packages. In this example, @@ -1157,9 +1157,9 @@ dojo.global = { // | // somewhere in a configuration block // | dojo.registerModulePath("acme.widget", "../../acme/widget"); // | dojo.registerModulePath("acme.util", "../../util"); - // | + // | // | // ... - // | + // | // | // code in a module using acme resources // | var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html"); // | var dataPath = dojo.moduleUrl("acme.util","resources/data.json"); @@ -1169,7 +1169,7 @@ dojo.global = { if(loc.lastIndexOf("/") != loc.length-1){ loc += "/"; } - + //If the path is an absolute path (starts with a / or is on another //domain/xdomain) then don't add the baseUrl. var colonIndex = loc.indexOf(":"); @@ -1202,9 +1202,9 @@ dojo.isIE = { dojo.isSafari = { // example: // | if(dojo.isSafari){ ... } - // example: + // example: // Detect iPhone: - // | if(dojo.isSafari && (navigator.userAgent.indexOf("iPhone") < 0)){ + // | if(dojo.isSafari && (navigator.userAgent.indexOf("iPhone") < 0)){ // | // we are iPhone. iPod touch reports "iPod" above // | } }; @@ -1321,7 +1321,7 @@ if(typeof window != 'undefined'){ d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; d._xhrObj = function(){ - // summary: + // summary: // does the work of portably generating a new XMLHTTPRequest // object. var http = null; @@ -1448,19 +1448,19 @@ if(typeof window != 'undefined'){ // START DOMContentLoaded // Mozilla and Opera 9 expose the event we could use if(document.addEventListener){ - // NOTE: + // NOTE: // due to a threading issue in Firefox 2.0, we can't enable // DOMContentLoaded on that platform. For more information, see: // http://trac.dojotoolkit.org/ticket/1704 if(dojo.isOpera || dojo.isFF >= 3 || (dojo.isMoz && dojo.config.enableMozDomContentLoaded === true)){ document.addEventListener("DOMContentLoaded", dojo._loadInit, null); } - + // mainly for Opera 8.5, won't be fired if DOMContentLoaded fired already. // also used for Mozilla because of trac #1640 window.addEventListener("load", dojo._loadInit, null); } - + if(dojo.isAIR){ window.addEventListener("load", dojo._loadInit, null); }else if(/(WebKit|khtml)/i.test(navigator.userAgent)){ // sniff @@ -1601,7 +1601,7 @@ dojo.isFunction = (function(){ })(); dojo.isObject = function(/*anything*/ it){ - // summary: + // summary: // Returns true if it is a JavaScript object (or an Array, a Function // or null) return it !== undefined && @@ -1629,7 +1629,7 @@ dojo.isArrayLike = function(/*anything*/ it){ } dojo.isAlien = function(/*anything*/ it){ - // summary: + // summary: // Returns true if it is a built-in function or some other kind of // oddball that *should* report as a function but doesn't return it && !dojo.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean @@ -1660,23 +1660,23 @@ dojo._hitchArgs = function(scope, method /*,...*/){ } dojo.hitch = function(/*Object*/scope, /*Function|String*/method /*,...*/){ - // summary: - // Returns a function that will only ever execute in the a given scope. + // summary: + // Returns a function that will only ever execute in the a given scope. // This allows for easy use of object member functions // in callbacks and other places in which the "this" keyword may - // otherwise not reference the expected scope. - // Any number of default positional arguments may be passed as parameters + // otherwise not reference the expected scope. + // Any number of default positional arguments may be passed as parameters // beyond "method". // Each of these values will be used to "placehold" (similar to curry) - // for the hitched function. - // scope: - // The scope to use when method executes. If method is a string, + // for the hitched function. + // scope: + // The scope to use when method executes. If method is a string, // scope is also the object containing method. // method: // A function to be hitched to scope, or the name of the method in // scope to be hitched. // example: - // | dojo.hitch(foo, "bar")(); + // | dojo.hitch(foo, "bar")(); // runs foo.bar() in the scope of foo // example: // | dojo.hitch(foo, myFunction); @@ -1701,7 +1701,7 @@ dojo.delegate = function(obj, props){ // summary: // returns a new object which "looks" to obj for properties which it // does not have a value for. Optionally takes a bag of properties to - // seed the returned object with initially. + // seed the returned object with initially. // description: // This is a small implementaton of the Boodman/Crockford delegation // pattern in JavaScript. An intermediate object constructor mediates @@ -1805,7 +1805,7 @@ dojo.clone = function(/*anything*/ o){ } dojo.trim = function(/*String*/ str){ - // summary: + // summary: // trims whitespaces from both sides of the string // description: // This version of trim() was selected for inclusion into the base due @@ -1827,27 +1827,27 @@ dojo.provide("dojo._base.declare"); // this file courtesy of the TurboAjax group, licensed under a Dojo CLA dojo.declare = function(/*String*/ className, /*Function|Function[]*/ superclass, /*Object*/ props){ - // summary: + // summary: // Create a feature-rich constructor from compact notation // className: // The name of the constructor (loosely, a "class") // stored in the "declaredClass" property in the created prototype // superclass: - // May be null, a Function, or an Array of Functions. If an array, + // May be null, a Function, or an Array of Functions. If an array, // the first element is used as the prototypical ancestor and // any following Functions become mixin ancestors. // props: // An object whose properties are copied to the // created prototype. - // Add an instance-initialization function by making it a property + // Add an instance-initialization function by making it a property // named "constructor". // description: // Create a constructor using a compact notation for inheritance and - // prototype extension. + // prototype extension. // // All superclasses (including mixins) must be Functions (not simple Objects). // - // Mixin ancestors provide a type of multiple inheritance. Prototypes of mixin + // Mixin ancestors provide a type of multiple inheritance. Prototypes of mixin // ancestors are copied to the new class: changes to mixin prototypes will // not affect classes to which they have been mixed in. // @@ -1859,11 +1859,11 @@ dojo.declare = function(/*String*/ className, /*Function|Function[]*/ superclass // | someValue: 2, // | // initialization function // | constructor: function(){ - // | this.myComplicatedObject = new ReallyComplicatedObject(); + // | this.myComplicatedObject = new ReallyComplicatedObject(); // | }, // | // other functions - // | someMethod: function(){ - // | doStuff(); + // | someMethod: function(){ + // | doStuff(); // | } // | ); @@ -1886,7 +1886,7 @@ dojo.declare = function(/*String*/ className, /*Function|Function[]*/ superclass // name methods (experimental) for(var i in props){ if(dojo.isFunction(fn = props[i]) && !0[i]){fn.nom = i;} } // 0[i] checks Object.prototype // decorate prototype - dojo.extend(ctor, {declaredClass: className, _constructor: init, preamble: null}, props || 0); + dojo.extend(ctor, {declaredClass: className, _constructor: init, preamble: null}, props || 0); // special help for IE ctor.prototype.constructor = ctor; // create named reference @@ -1918,13 +1918,13 @@ dojo.mixin(dojo.declare, { // we have to make a function, but don't want to close over anything return function(){ this._construct(arguments); }; }, - _core: { + _core: { _construct: function(args){ var c=args.callee, s=c.superclass, ct=s&&s.constructor, m=c.mixin, mct=m&&m.constructor, a=args, ii, fn; // side-effect of = used on purpose here, lint may complain, don't try this at home - if(a[0]){ + if(a[0]){ // FIXME: preambles for each mixin should be allowed - // FIXME: + // FIXME: // should we allow the preamble here NOT to modify the // default args, but instead to act on each mixin // independently of the class instance being constructed @@ -1932,13 +1932,13 @@ dojo.mixin(dojo.declare, { // allow any first argument w/ a "preamble" property to act as a // class preamble (not exclusive of the prototype preamble) - if(/*dojo.isFunction*/((fn = a[0].preamble))){ - a = fn.apply(this, a) || a; + if(/*dojo.isFunction*/((fn = a[0].preamble))){ + a = fn.apply(this, a) || a; } - } + } // prototype preamble if((fn = c.prototype.preamble)){a = fn.apply(this, a) || a;} - // FIXME: + // FIXME: // need to provide an optional prototype-settable // "_explicitSuper" property which disables this // initialize superclass @@ -1982,7 +1982,7 @@ dojo.mixin(dojo.declare, { if(!dojo.isString(a[0])){newArgs=args; args=name; name=args.callee.nom;} a = newArgs||args; var c = args.callee, p = this.constructor.prototype, fn, mp; - // if not an instance override + // if not an instance override if(this[name] != c || p[name] == c){ mp = this._findMethod(name, c, p, true); if(!mp){throw(this.declaredClass + ': inherited method "' + name + '" mismatch');} @@ -2009,11 +2009,11 @@ dojo.provide("dojo._base.connect"); dojo._listener = { // create a dispatcher function getDispatcher: function(){ - // following comments pulled out-of-line to prevent cloning them + // following comments pulled out-of-line to prevent cloning them // in the returned function. - // - indices (i) that are really in the array of listeners (ls) will + // - indices (i) that are really in the array of listeners (ls) will // not be in Array.prototype. This is the 'sparse array' trick - // that keeps us safe from libs that take liberties with built-in + // that keeps us safe from libs that take liberties with built-in // objects // - listener is invoked with current scope (this) return function(){ @@ -2033,12 +2033,12 @@ dojo._listener = { // add a listener to an object add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){ // Whenever 'method' is invoked, 'listener' will have the same scope. - // Trying to supporting a context object for the listener led to - // complexity. + // Trying to supporting a context object for the listener led to + // complexity. // Non trivial to provide 'once' functionality here // because listener could be the result of a dojo.hitch call, // in which case two references to the same hitch target would not - // be equivalent. + // be equivalent. source = source || dojo.global; // The source method is either null, a dispatcher, or some other function var f = source[method]; @@ -2048,15 +2048,15 @@ dojo._listener = { // original target function is special d.target = f; // dispatcher holds a list of listeners - d._listeners = []; + d._listeners = []; // redirect source to dispatcher f = source[method] = d; } - // The contract is that a handle is returned that can - // identify this listener for disconnect. + // The contract is that a handle is returned that can + // identify this listener for disconnect. // - // The type of the handle is private. Here is it implemented as Integer. - // DOM event code has this same contract but handle is Function + // The type of the handle is private. Here is it implemented as Integer. + // DOM event code has this same contract but handle is Function // in non-IE browsers. // // We could have separate lists of before and after listeners. @@ -2067,26 +2067,26 @@ dojo._listener = { var f = (source||dojo.global)[method]; // remember that handle is the index+1 (0 is not a valid handle) if(f && f._listeners && handle--){ - delete f._listeners[handle]; + delete f._listeners[handle]; } } }; // Multiple delegation for arbitrary methods. -// This unit knows nothing about DOM, -// but we include DOM aware +// This unit knows nothing about DOM, +// but we include DOM aware // documentation and dontFix // argument here to help the autodocs. // Actual DOM aware code is in event.js. -dojo.connect = function(/*Object|null*/ obj, - /*String*/ event, - /*Object|null*/ context, +dojo.connect = function(/*Object|null*/ obj, + /*String*/ event, + /*Object|null*/ context, /*String|Function*/ method, /*Boolean*/ dontFix){ // summary: - // Create a link that calls one function when another executes. + // Create a link that calls one function when another executes. // // description: // Connects method to event, so that after event fires, method @@ -2098,41 +2098,41 @@ dojo.connect = function(/*Object|null*/ obj, // // null arguments may simply be omitted. // - // obj[event] can resolve to a function or undefined (null). + // obj[event] can resolve to a function or undefined (null). // If obj[event] is null, it is assigned a function. // - // The return value is a handle that is needed to + // The return value is a handle that is needed to // remove this connection with dojo.disconnect. // - // obj: - // The source object for the event function. + // obj: + // The source object for the event function. // Defaults to dojo.global if null. - // If obj is a DOM node, the connection is delegated + // If obj is a DOM node, the connection is delegated // to the DOM event manager (unless dontFix is true). // // event: - // String name of the event function in obj. + // String name of the event function in obj. // I.e. identifies a property obj[event]. // - // context: + // context: // The object that method will receive as "this". // // If context is null and method is a function, then method // inherits the context of event. - // - // If method is a string then context must be the source + // + // If method is a string then context must be the source // object object for method (context[method]). If context is null, // dojo.global is used. // // method: - // A function reference, or name of a function in context. - // The function identified by method fires after event does. + // A function reference, or name of a function in context. + // The function identified by method fires after event does. // method receives the same arguments as the event. // See context argument comments for information on method's scope. // // dontFix: - // If obj is a DOM node, set dontFix to true to prevent delegation - // of this connection to the DOM event manager. + // If obj is a DOM node, set dontFix to true to prevent delegation + // of this connection to the DOM event manager. // // example: // When obj.onchange(), do ui.update(): @@ -2181,7 +2181,7 @@ dojo.connect = function(/*Object|null*/ obj, // used by non-browser hostenvs. always overriden by event.js dojo._connect = function(obj, event, context, method){ - var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method)); + var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method)); return [obj, event, h, l]; // Handle } @@ -2219,7 +2219,7 @@ dojo.subscribe = function(/*String*/ topic, /*Object|null*/ context, /*String|Fu // is invoked when topic is published. // example: // | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }; - // | dojo.publish("alerts", [ "read this", "hello world" ]); + // | dojo.publish("alerts", [ "read this", "hello world" ]); // support for 2 argument invocation (omitting context) depends on hitch return [topic, dojo._listener.add(dojo._topics, topic, dojo.hitch(context, method))]; /*Handle*/ @@ -2227,7 +2227,7 @@ dojo.subscribe = function(/*String*/ topic, /*Object|null*/ context, /*String|Fu dojo.unsubscribe = function(/*Handle*/ handle){ // summary: - // Remove a topic listener. + // Remove a topic listener. // handle: // The handle returned from a call to subscribe. // example: @@ -2245,11 +2245,11 @@ dojo.publish = function(/*String*/ topic, /*Array*/ args){ // topic: // The name of the topic to publish. // args: - // An array of arguments. The arguments will be applied + // An array of arguments. The arguments will be applied // to each topic subscriber (as first class parameters, via apply). // example: // | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }; - // | dojo.publish("alerts", [ "read this", "hello world" ]); + // | dojo.publish("alerts", [ "read this", "hello world" ]); // Note that args is an array, which is more efficient vs variable length // argument list. Ideally, var args would be implemented via Array @@ -2260,8 +2260,8 @@ dojo.publish = function(/*String*/ topic, /*Array*/ args){ } } -dojo.connectPublisher = function( /*String*/ topic, - /*Object|null*/ obj, +dojo.connectPublisher = function( /*String*/ topic, + /*Object|null*/ obj, /*String*/ event){ // summary: // Ensure that everytime obj.event() is called, a message is published @@ -2270,11 +2270,11 @@ dojo.connectPublisher = function( /*String*/ topic, // the topic. // topic: // The name of the topic to publish. - // obj: + // obj: // The source object for the event function. Defaults to dojo.global // if null. // event: - // The name of the event function in obj. + // The name of the event function in obj. // I.e. identifies a property obj[event]. // example: // | dojo.connectPublisher("/ajax/start", dojo, "xhrGet"}; @@ -2335,7 +2335,7 @@ dojo.Deferred = function(/*Function?*/ canceller){ // The sequence of callbacks is internally represented as a list of // 2-tuples containing the callback/errback pair. For example, the // following call sequence: - // + // // | var d = new dojo.Deferred(); // | d.addCallback(myCallback); // | d.addErrback(myErrback); @@ -2358,7 +2358,7 @@ dojo.Deferred = function(/*Function?*/ canceller){ // * -1: no value yet (initial condition) // * 0: success // * 1: error - // + // // A Deferred will be in the error state if one of the following three // conditions are met: // @@ -2457,7 +2457,7 @@ dojo.Deferred = function(/*Function?*/ canceller){ // | renderDataitem(data[x]); // | } // | d.callback(true); - // | }catch(e){ + // | }catch(e){ // | d.errback(new Error("rendering failed")); // | } // | return d; @@ -2484,7 +2484,7 @@ dojo.Deferred = function(/*Function?*/ canceller){ // | renderDataitem(data[x]); // | } // | d.callback(true); - // | }catch(e){ + // | }catch(e){ // | d.errback(new Error("rendering failed")); // | } // | }, 100); @@ -2538,7 +2538,7 @@ dojo.extend(dojo.Deferred, { })(), cancel: function(){ - // summary: + // summary: // Cancels a Deferred that has not yet received a value, or is // waiting on another Deferred as its value. // description: @@ -2567,7 +2567,7 @@ dojo.extend(dojo.Deferred, { this.results[0].cancel(); } }, - + _resback: function(res){ // summary: @@ -2588,9 +2588,9 @@ dojo.extend(dojo.Deferred, { }, callback: function(res){ - // summary: + // summary: // Begin the callback sequence with a non-error value. - + /* callback or errback should only be called once on a given Deferred. @@ -2600,7 +2600,7 @@ dojo.extend(dojo.Deferred, { }, errback: function(/*Error*/res){ - // summary: + // summary: // Begin the callback sequence with an error result. this._check(); if(!(res instanceof Error)){ @@ -2619,19 +2619,19 @@ dojo.extend(dojo.Deferred, { }, addCallback: function(/*Function|Object*/cb, /*String?*/cbfn /*...*/){ - // summary: + // summary: // Add a single callback to the end of the callback sequence. return this.addCallbacks(dojo.hitch.apply(dojo, arguments)); }, addErrback: function(cb, cbfn){ - // summary: + // summary: // Add a single callback to the end of the callback sequence. return this.addCallbacks(null, dojo.hitch.apply(dojo, arguments)); }, addCallbacks: function(cb, eb){ - // summary: + // summary: // Add separate callback and errback to the end of the callback // sequence. this.chain.push([cb, eb]) @@ -2642,7 +2642,7 @@ dojo.extend(dojo.Deferred, { }, _fire: function(){ - // summary: + // summary: // Used internally to exhaust the callback sequence when a result // is available. var chain = this.chain; @@ -2666,7 +2666,7 @@ dojo.extend(dojo.Deferred, { // inlined from _pause() self.paused--; if( - (self.paused == 0) && + (self.paused == 0) && (self.fired >= 0) ){ self._fire(); @@ -2700,7 +2700,7 @@ dojo.provide("dojo._base.json"); dojo.fromJson = function(/*String*/ json){ // summary: // Parses a [JSON](http://json.org) string to return a JavaScript object. - // json: + // json: // a string literal of a JSON item, for instance: // `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'` @@ -2734,8 +2734,8 @@ dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _ind // // prettyPrint: // if true, we indent objects and arrays to make the output prettier. - // The variable dojo.toJsonIndentStr is used as the indent string - // -- to use something other than the default (tab), + // The variable dojo.toJsonIndentStr is used as the indent string + // -- to use something other than the default (tab), // change that variable before calling dojo.toJson(). // // _indentStr: @@ -2751,8 +2751,8 @@ dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _ind if(it === null){ return "null"; } - if(dojo.isString(it)){ - return dojo._escapeString(it); + if(dojo.isString(it)){ + return dojo._escapeString(it); } if(it.nodeType && it.cloneNode){ // isNode return ""; // FIXME: would something like outerHTML be better here? @@ -2838,8 +2838,8 @@ dojo.provide("dojo._base.array"); (function(){ var _getParts = function(arr, obj, cb){ - return [ - dojo.isString(arr) ? arr.split("") : arr, + return [ + dojo.isString(arr) ? arr.split("") : arr, obj || dojo.global, // FIXME: cache the anonymous functions we create here? dojo.isString(cb) ? new Function("item", "index", "array", cb) : cb @@ -2847,7 +2847,7 @@ dojo.provide("dojo._base.array"); }; dojo.mixin(dojo, { - indexOf: function( /*Array*/ array, + indexOf: function( /*Array*/ array, /*Object*/ value, /*Integer?*/ fromIndex, /*Boolean?*/ findLast){ @@ -2874,7 +2874,7 @@ dojo.provide("dojo._base.array"); lastIndexOf: function(/*Array*/array, /*Object*/value, /*Integer?*/fromIndex){ // summary: - // locates the last index of the provided value in the passed array. + // locates the last index of the provided value in the passed array. // If the value is not found, -1 is returned. // description: // For details on this method, see: @@ -2900,7 +2900,7 @@ dojo.provide("dojo._base.array"); // FIXME: there are several ways of handilng thisObject. Is // dojo.global always the default context? var _p = _getParts(arr, thisObject, callback); arr = _p[0]; - for(var i=0,l=_p[0].length; i<l; i++){ + for(var i=0,l=_p[0].length; i<l; i++){ _p[2].call(_p[1], arr[i], i, arr); } }, @@ -2934,7 +2934,7 @@ dojo.provide("dojo._base.array"); // returns false // example: // | dojo.every([1, 2, 3, 4], function(item){ return item>0; }); - // returns true + // returns true return this._everyOrSome(true, arr, callback, thisObject); // Boolean }, @@ -3071,7 +3071,7 @@ dojo.extend(dojo.Color, { sanitize: function(){ // summary: // makes sure that the object has correct attributes - // description: + // description: // the default implementation does nothing, include dojo.colors to // augment it to real checks return this; // dojo.Color @@ -3106,12 +3106,12 @@ dojo.extend(dojo.Color, { }); dojo.blendColors = function( - /*dojo.Color*/ start, - /*dojo.Color*/ end, + /*dojo.Color*/ start, + /*dojo.Color*/ end, /*Number*/ weight, /*dojo.Color?*/ obj ){ - // summary: + // summary: // blend colors end and start with weight from 0 to 1, 0.5 being a 50/50 blend, // can reuse a previously allocated dojo.Color object for the result var d = dojo, t = obj || new dojo.Color(); @@ -3190,15 +3190,15 @@ dojo._hasResource["dojo._base.window"] = true; dojo.provide("dojo._base.window"); dojo._gearsObject = function(){ - // summary: + // summary: // factory method to get a Google Gears plugin instance to // expose in the browser runtime environment, if present var factory; var results; - + var gearsObj = dojo.getObject("google.gears"); if(gearsObj){ return gearsObj; } // already defined elsewhere - + if(typeof GearsFactory != "undefined"){ // Firefox factory = new GearsFactory(); }else{ @@ -3222,7 +3222,7 @@ dojo._gearsObject = function(){ // still nothing? if(!factory){ return null; } - + // define the global objects now; don't overwrite them though if they // were somehow set internally by the Gears plugin, which is on their // dev roadmap for the future @@ -3285,9 +3285,9 @@ dojo._fireCallback = function(callback, context, cbArguments){ return callback.apply(context, cbArguments || [ ]); } -dojo.withGlobal = function( /*Object*/globalObject, - /*Function*/callback, - /*Object?*/thisObject, +dojo.withGlobal = function( /*Object*/globalObject, + /*Function*/callback, + /*Object?*/thisObject, /*Array?*/cbArguments){ // summary: // Call callback with globalObject as dojo.global and @@ -3308,9 +3308,9 @@ dojo.withGlobal = function( /*Object*/globalObject, return rval; } -dojo.withDoc = function( /*Object*/documentObject, - /*Function*/callback, - /*Object?*/thisObject, +dojo.withDoc = function( /*Object*/documentObject, + /*Function*/callback, + /*Object?*/thisObject, /*Array?*/cbArguments){ // summary: // Call callback with documentObject as dojo.doc. If provided, @@ -3342,7 +3342,7 @@ dojo.provide("dojo._base.event"); // DOM event listener machinery var del = (dojo._event_listener = { add: function(/*DOMNode*/node, /*String*/name, /*Function*/fp){ - if(!node){return;} + if(!node){return;} name = del._normalizeEventName(name); fp = del._fixCallback(name, fp); var oname = name; @@ -3354,7 +3354,7 @@ dojo.provide("dojo._base.event"); // thanks ben! if(!dojo.isDescendant(e.relatedTarget, node)){ // e.type = oname; // FIXME: doesn't take? SJM: event.type is generally immutable. - return ofp.call(this, e); + return ofp.call(this, e); } } } @@ -3390,7 +3390,7 @@ dojo.provide("dojo._base.event"); }, _fixEvent: function(evt, sender){ // _fixCallback only attaches us to keypress. - // Switch on evt.type anyway because we might + // Switch on evt.type anyway because we might // be called directly from dojo.fixEvent. switch(evt.type){ case "keypress": @@ -3405,7 +3405,7 @@ dojo.provide("dojo._base.event"); }); // DOM events - + dojo.fixEvent = function(/*Event*/evt, /*DOMNode*/sender){ // summary: // normalizes properties on the event object including event @@ -3430,7 +3430,7 @@ dojo.provide("dojo._base.event"); // the default listener to use on dontFix nodes, overriden for IE var node_listener = dojo._listener; - + // Unify connect and event listeners dojo._connect = function(obj, event, context, method, dontFix){ // FIXME: need a more strict test @@ -3441,7 +3441,7 @@ dojo.provide("dojo._base.event"); // create a listener var h = l.add(obj, event, dojo.hitch(context, method)); // formerly, the disconnect package contained "l" directly, but if client code - // leaks the disconnect package (by connecting it to a node), referencing "l" + // leaks the disconnect package (by connecting it to a node), referencing "l" // compounds the problem. // instead we return a listener id, which requires custom _disconnect below. // return disconnect package @@ -3518,9 +3518,9 @@ dojo.provide("dojo._base.event"); NUM_LOCK: 144, SCROLL_LOCK: 145 }; - + // IE event normalization - if(dojo.isIE){ + if(dojo.isIE){ var _trySetKeyCode = function(e, code){ try{ // squelch errors when keyCode is read-only @@ -3537,7 +3537,7 @@ dojo.provide("dojo._base.event"); if(!dojo.config._allow_leaks){ // custom listener that handles leak protection for DOM events node_listener = iel = dojo._ie_listener = { - // support handler indirection: event handler functions are + // support handler indirection: event handler functions are // referenced here. Event dispatchers hold only indices. handlers: [], // add a listener to an object @@ -3590,7 +3590,7 @@ dojo.provide("dojo._base.event"); }, remove: function(/*DOMNode*/node, /*String*/event, /*Handle*/handle){ event = del._normalizeEventName(event); - iel.remove(node, event, handle); + iel.remove(node, event, handle); if(event=="onkeypress"){ var kd = node.onkeydown; if(--kd._stealthKeydownRefs <= 0){ @@ -3614,11 +3614,11 @@ dojo.provide("dojo._base.event"); // sender: node to treat as "currentTarget" if(!evt){ var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window; - evt = w.event; + evt = w.event; } if(!evt){return(evt);} - evt.target = evt.srcElement; - evt.currentTarget = (sender || evt.srcElement); + evt.target = evt.srcElement; + evt.currentTarget = (sender || evt.srcElement); evt.layerX = evt.offsetX; evt.layerY = evt.offsetY; // FIXME: scroll position query is duped from dojo.html to @@ -3631,10 +3631,10 @@ dojo.provide("dojo._base.event"); var offset = dojo._getIeDocumentElementOffset(); evt.pageX = evt.clientX + dojo._fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x; evt.pageY = evt.clientY + (docBody.scrollTop || 0) - offset.y; - if(evt.type == "mouseover"){ + if(evt.type == "mouseover"){ evt.relatedTarget = evt.fromElement; } - if(evt.type == "mouseout"){ + if(evt.type == "mouseout"){ evt.relatedTarget = evt.toElement; } evt.stopPropagation = del._stopPropagation; @@ -3665,20 +3665,20 @@ dojo.provide("dojo._base.event"); // some ctrl-key combinations (mostly w/punctuation) do not emit a char code in IE // we map those virtual key codes to ascii here // not valid for all (non-US) keyboards, so maybe we shouldn't bother - _punctMap: { - 106:42, - 111:47, - 186:59, - 187:43, - 188:44, - 189:45, - 190:46, - 191:47, - 192:96, - 219:91, - 220:92, - 221:93, - 222:39 + _punctMap: { + 106:42, + 111:47, + 186:59, + 187:43, + 188:44, + 189:45, + 190:46, + 191:47, + 192:96, + 219:91, + 220:92, + 221:93, + 222:39 }, _stealthKeyDown: function(evt){ // IE doesn't fire keypress for most non-printable characters. @@ -3696,12 +3696,12 @@ dojo.provide("dojo._base.event"); var c = unprintable ? 0 : k; if(evt.ctrlKey){ if(k==3 || k==13){ - return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively - }else if(c>95 && c<106){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ c -= 48; // map CTRL-[numpad 0-9] to ASCII - }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ + }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ c += 32; // map CTRL-[A-Z] to lowercase - }else{ + }else{ c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII } } @@ -3715,13 +3715,13 @@ dojo.provide("dojo._base.event"); }, // Called in Event scope _stopPropagation: function(){ - this.cancelBubble = true; + this.cancelBubble = true; }, _preventDefault: function(){ // Setting keyCode to 0 is the only way to prevent certain keypresses (namely // ctrl-combinations that correspond to menu accelerator keys). // Otoh, it prevents upstream listeners from getting this information - // Try to split the difference here by clobbering keyCode only for ctrl + // Try to split the difference here by clobbering keyCode only for ctrl // combinations. If you still need to access the key upstream, bubbledKeyCode is // provided as a workaround. this.bubbledKeyCode = this.keyCode; @@ -3729,7 +3729,7 @@ dojo.provide("dojo._base.event"); this.returnValue = false; } }); - + // override stopEvent for IE dojo.stopEvent = function(evt){ evt = evt || window.event; @@ -3741,14 +3741,14 @@ dojo.provide("dojo._base.event"); del._synthesizeEvent = function(evt, props){ var faux = dojo.mixin({}, evt, props); del._setKeyChar(faux); - // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); + // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); // but it throws an error when preventDefault is invoked on Safari // does Event.preventDefault not support "apply" on Safari? - faux.preventDefault = function(){ evt.preventDefault(); }; - faux.stopPropagation = function(){ evt.stopPropagation(); }; + faux.preventDefault = function(){ evt.preventDefault(); }; + faux.stopPropagation = function(){ evt.stopPropagation(); }; return faux; } - + // Opera event normalization if(dojo.isOpera){ dojo.mixin(del, { @@ -3798,7 +3798,7 @@ dojo.provide("dojo._base.event"); return evt; } }); - + dojo.mixin(dojo.keys, { SHIFT_TAB: 25, UP_ARROW: 63232, @@ -3828,7 +3828,7 @@ dojo.provide("dojo._base.event"); SCROLL_LOCK: 63249, NUM_LOCK: 63289 }); - var dk = dojo.keys, identifierMap = { "Up": dk.UP_ARROW, "Down": dk.DOWN_ARROW, "Left": dk.LEFT_ARROW, "Right": dk.RIGHT_ARROW, "PageUp": dk.PAGE_UP, "PageDown": dk.PAGE_DOWN }; + var dk = dojo.keys, identifierMap = { "Up": dk.UP_ARROW, "Down": dk.DOWN_ARROW, "Left": dk.LEFT_ARROW, "Right": dk.RIGHT_ARROW, "PageUp": dk.PAGE_UP, "PageDown": dk.PAGE_DOWN }; } })(); @@ -3881,7 +3881,7 @@ try{ /*===== dojo.byId = function(id, doc){ // summary: - // Returns DOM node with matching `id` attribute or `null` + // Returns DOM node with matching `id` attribute or `null` // if not found, similar to "$" function in another library. // If `id` is a DomNode, this function is a no-op. // @@ -3898,7 +3898,7 @@ if(dojo.isIE || dojo.isOpera){ if(dojo.isString(id)){ var _d = doc || dojo.doc; var te = _d.getElementById(id); - // attributes.id.value is better than just id in case the + // attributes.id.value is better than just id in case the // user has a name=id inside a form if(te && te.attributes.id.value == id){ return te; @@ -3951,7 +3951,7 @@ if(dojo.isIE || dojo.isOpera){ } _destroyContainer.appendChild(node.parentNode ? node.parentNode.removeChild(node) : node); // NOTE: see http://trac.dojotoolkit.org/ticket/2931. This may be a bug and not a feature - _destroyContainer.innerHTML = ""; + _destroyContainer.innerHTML = ""; }catch(e){ /* squelch */ } @@ -4015,9 +4015,9 @@ if(dojo.isIE || dojo.isOpera){ // summary: // Attempt to insert node into the DOM, choosing from various positioning options. // Returns true if successful, false otherwise. - // node: + // node: // id or node reference to place relative to refNode - // refNode: + // refNode: // id or node reference to use as basis for placement // position: // string noting the position of node relative to refNode or a @@ -4032,8 +4032,8 @@ if(dojo.isIE || dojo.isOpera){ // "first" and "last" indicate positions as children of refNode. // FIXME: need to write tests for this!!!! - if(!node || !refNode || position === undefined){ - return false; // boolean + if(!node || !refNode || position === undefined){ + return false; // boolean } node = d.byId(node); refNode = d.byId(refNode); @@ -4067,14 +4067,14 @@ if(dojo.isIE || dojo.isOpera){ // Box functions will assume this model. // On IE/Opera, BORDER_BOX will be set if the primary document is in quirks mode. // Can be set to change behavior of box setters. - + // can be either: // "border-box" // "content-box" (default) dojo.boxModel = "content-box"; - + // We punt per-node box mode testing completely. - // If anybody cares, we can provide an additional (optional) unit + // If anybody cares, we can provide an additional (optional) unit // that overrides existing code to include per-node box sensitivity. // Opera documentation claims that Opera 9 uses border-box in BackCompat mode. @@ -4091,15 +4091,15 @@ if(dojo.isIE || dojo.isOpera){ // ============================= // Style Functions // ============================= - + // getComputedStyle drives most of the style code. // Wherever possible, reuse the returned object. // - // API functions below that need to access computed styles accept an + // API functions below that need to access computed styles accept an // optional computedStyle parameter. // If this parameter is omitted, the functions will call getComputedStyle themselves. - // This way, calling code can access computedStyle once, and then pass the reference to - // multiple API functions. + // This way, calling code can access computedStyle once, and then pass the reference to + // multiple API functions. /*===== dojo.getComputedStyle = function(node){ @@ -4108,7 +4108,7 @@ if(dojo.isIE || dojo.isOpera){ // // description: // Gets a "computed style" object which can be used to gather - // information about the current state of the rendered node. + // information about the current state of the rendered node. // // Note that this may behave differently on different browsers. // Values may have different formats and value encodings across @@ -4133,12 +4133,12 @@ if(dojo.isIE || dojo.isOpera){ if(d.isSafari){ gcs = function(/*DomNode*/node){ var s = dv.getComputedStyle(node, null); - if(!s && node.style){ - node.style.display = ""; + if(!s && node.style){ + node.style.display = ""; s = dv.getComputedStyle(node, null); } return s || {}; - }; + }; }else if(d.isIE){ gcs = function(node){ return node.currentStyle; @@ -4154,7 +4154,7 @@ if(dojo.isIE || dojo.isOpera){ dojo._toPixelValue = function(element, value){ // style values can be floats, client code may want // to round for integer pixels. - return parseFloat(value) || 0; + return parseFloat(value) || 0; } }else{ dojo._toPixelValue = function(element, avalue){ @@ -4268,11 +4268,11 @@ if(dojo.isIE || dojo.isOpera){ var _floatStyle = d.isIE ? "styleFloat" : "cssFloat"; var _floatAliases = { "cssFloat": _floatStyle, "styleFloat": _floatStyle, "float": _floatStyle }; - + // public API - - dojo.style = function( /*DomNode|String*/ node, - /*String?|Object?*/ style, + + dojo.style = function( /*DomNode|String*/ node, + /*String?|Object?*/ style, /*String?*/ value){ // summary: // Accesses styles on a node. If 2 arguments are @@ -4355,18 +4355,18 @@ if(dojo.isIE || dojo.isOpera){ // fitting. // // * l/t = left/top padding (respectively) - // * w = the total of the left and right padding + // * w = the total of the left and right padding // * h = the total of the top and bottom padding // - // If 'node' has position, l/t forms the origin for child nodes. + // If 'node' has position, l/t forms the origin for child nodes. // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var - s = computedStyle||gcs(n), - l = px(n, s.paddingLeft), + var + s = computedStyle||gcs(n), + l = px(n, s.paddingLeft), t = px(n, s.paddingTop); - return { + return { l: l, t: t, w: l+px(n, s.paddingRight), @@ -4386,12 +4386,12 @@ if(dojo.isIE || dojo.isOpera){ // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var + var ne = "none", - s = computedStyle||gcs(n), + s = computedStyle||gcs(n), bl = (s.borderLeftStyle != ne ? px(n, s.borderLeftWidth) : 0), bt = (s.borderTopStyle != ne ? px(n, s.borderTopWidth) : 0); - return { + return { l: bl, t: bt, w: bl + (s.borderRightStyle!=ne ? px(n, s.borderRightWidth) : 0), @@ -4411,11 +4411,11 @@ if(dojo.isIE || dojo.isOpera){ // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var - s = computedStyle||gcs(n), + var + s = computedStyle||gcs(n), p = d._getPadExtents(n, s), b = d._getBorderExtents(n, s); - return { + return { l: p.l + b.l, t: p.t + b.t, w: p.w + b.w, @@ -4435,22 +4435,22 @@ if(dojo.isIE || dojo.isOpera){ // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var - s = computedStyle||gcs(n), + var + s = computedStyle||gcs(n), l = px(n, s.marginLeft), t = px(n, s.marginTop), r = px(n, s.marginRight), b = px(n, s.marginBottom); if(d.isSafari && (s.position != "absolute")){ // FIXME: Safari's version of the computed right margin - // is the space between our right edge and the right edge - // of our offsetParent. - // What we are looking for is the actual margin value as + // is the space between our right edge and the right edge + // of our offsetParent. + // What we are looking for is the actual margin value as // determined by CSS. // Hack solution is to assume left/right margins are the same. r = l; } - return { + return { l: l, t: t, w: l+r, @@ -4464,15 +4464,15 @@ if(dojo.isIE || dojo.isOpera){ // They do *not* work for display: inline objects that have padding styles // because the user agent ignores padding (it's bogus styling in any case) // - // Be careful with IMGs because they are inline or block depending on + // Be careful with IMGs because they are inline or block depending on // browser and browser mode. - // Although it would be easier to read, there are not separate versions of + // Although it would be easier to read, there are not separate versions of // _getMarginBox for each browser because: // 1. the branching is not expensive // 2. factoring the shared code wastes cycles (function call overhead) // 3. duplicating the shared code wastes bytes - + dojo._getMarginBox = function(/*DomNode*/node, /*Object*/computedStyle){ // summary: // returns an object that encodes the width, height, left and top @@ -4508,14 +4508,14 @@ if(dojo.isIE || dojo.isOpera){ l -= be.l, t -= be.t; } } - return { - l: l, - t: t, - w: node.offsetWidth + me.w, - h: node.offsetHeight + me.h + return { + l: l, + t: t, + w: node.offsetWidth + me.w, + h: node.offsetHeight + me.h }; } - + dojo._getContentBox = function(node, computedStyle){ // summary: // Returns an object that encodes the width, height, left and top @@ -4528,24 +4528,24 @@ if(dojo.isIE || dojo.isOpera){ if(!w){ w=node.offsetWidth, h=node.offsetHeight; }else{ - h=node.clientHeight, be.w = be.h = 0; + h=node.clientHeight, be.w = be.h = 0; } // On Opera, offsetLeft includes the parent's border if(d.isOpera){ pe.l += be.l; pe.t += be.t; }; - return { - l: pe.l, - t: pe.t, - w: w - pe.w - be.w, + return { + l: pe.l, + t: pe.t, + w: w - pe.w - be.w, h: h - pe.h - be.h }; } dojo._getBorderBox = function(node, computedStyle){ var s=computedStyle||gcs(node), pe=d._getPadExtents(node, s), cb=d._getContentBox(node, s); - return { - l: cb.l - pe.l, - t: cb.t - pe.t, - w: cb.w + pe.w, + return { + l: cb.l - pe.l, + t: cb.t - pe.t, + w: cb.w + pe.w, h: cb.h + pe.h }; } @@ -4559,14 +4559,14 @@ if(dojo.isIE || dojo.isOpera){ // Beware of display: inline objects that have padding styles // because the user agent ignores padding (it's a bogus setup anyway) // - // Be careful with IMGs because they are inline or block depending on + // Be careful with IMGs because they are inline or block depending on // browser and browser mode. - // + // // Elements other than DIV may have special quirks, like built-in // margins or padding, or values not detectable via computedStyle. - // In particular, margins on TABLE do not seems to appear + // In particular, margins on TABLE do not seems to appear // at all in computedStyle on Mozilla. - + dojo._setBox = function(/*DomNode*/node, /*Number?*/l, /*Number?*/t, /*Number?*/w, /*Number?*/h, /*String?*/u){ // summary: // sets width/height/left/top in the current (native) box-model @@ -4586,7 +4586,7 @@ if(dojo.isIE || dojo.isOpera){ } dojo._usesBorderBox = function(/*DomNode*/node){ - // summary: + // summary: // True if the node uses border-box layout. // We could test the computed style of node to see if a particular box @@ -4610,8 +4610,8 @@ if(dojo.isIE || dojo.isOpera){ d._setBox(node, NaN, NaN, widthPx, heightPx); } - dojo._setMarginBox = function(/*DomNode*/node, /*Number?*/leftPx, /*Number?*/topPx, - /*Number?*/widthPx, /*Number?*/heightPx, + dojo._setMarginBox = function(/*DomNode*/node, /*Number?*/leftPx, /*Number?*/topPx, + /*Number?*/widthPx, /*Number?*/heightPx, /*Object*/computedStyle){ // summary: // sets the size of the node's margin box and placement @@ -4620,7 +4620,7 @@ if(dojo.isIE || dojo.isOpera){ // you. var s = computedStyle||gcs(node); - // Some elements have special padding, margin, and box-model settings. + // Some elements have special padding, margin, and box-model settings. // To use box functions you may need to set padding, margin explicitly. // Controlling box-model is harder, in a pinch you might set dojo.boxModel. var bb=d._usesBorderBox(node), @@ -4630,15 +4630,15 @@ if(dojo.isIE || dojo.isOpera){ if(heightPx>=0){ heightPx = Math.max(heightPx - pb.h - mb.h, 0); } d._setBox(node, leftPx, topPx, widthPx, heightPx); } - + var _nilExtents = { l:0, t:0, w:0, h:0 }; // public API - + dojo.marginBox = function(/*DomNode|String*/node, /*Object?*/box){ // summary: // Getter/setter for the margin-box of node. - // description: + // description: // Returns an object in the expected format of box (regardless // if box is passed). The object might look like: // `{ l: 50, t: 200, w: 300: h: 150 }` @@ -4676,11 +4676,11 @@ if(dojo.isIE || dojo.isOpera){ var n=dojo.byId(node), s=gcs(n), b=box; return !b ? d._getContentBox(n, s) : d._setContentSize(n, b.w, b.h, s); // Object } - + // ============================= - // Positioning + // Positioning // ============================= - + var _sumAncestorProperties = function(node, prop){ if(!(node = (node||0).parentNode)){return 0}; var val, retVal = 0, _b = d.body(); @@ -4701,7 +4701,7 @@ if(dojo.isIE || dojo.isOpera){ } dojo._docScroll = function(){ - var + var _b = d.body(), _w = d.global, de = d.doc.documentElement; @@ -4710,19 +4710,19 @@ if(dojo.isIE || dojo.isOpera){ x: (_w.pageXOffset || d._fixIeBiDiScrollLeft(de.scrollLeft) || _b.scrollLeft || 0) }; }; - + dojo._isBodyLtr = function(){ //FIXME: could check html and body tags directly instead of computed style? need to ignore case, accept empty values - return !("_bodyLtr" in d) ? + return !("_bodyLtr" in d) ? d._bodyLtr = gcs(d.body()).direction == "ltr" : - d._bodyLtr; // Boolean + d._bodyLtr; // Boolean } - + dojo._getIeDocumentElementOffset = function(){ // summary // The following values in IE contain an offset: - // event.clientX - // event.clientY + // event.clientX + // event.clientY // node.getBoundingClientRect().left // node.getBoundingClientRect().top // But other position related values do not contain this offset, such as @@ -4741,12 +4741,12 @@ if(dojo.isIE || dojo.isOpera){ : // IE 6.0 {x: d._isBodyLtr() || window.parent == window ? - de.clientLeft : de.offsetWidth - de.clientWidth - de.clientLeft, + de.clientLeft : de.offsetWidth - de.clientWidth - de.clientLeft, y: de.clientTop}; // Object }; - + dojo._fixIeBiDiScrollLeft = function(/*Integer*/ scrollLeft){ - // In RTL direction, scrollLeft should be a negative value, but IE + // In RTL direction, scrollLeft should be a negative value, but IE // returns a positive one. All codes using documentElement.scrollLeft // must call this function to fix this error, otherwise the position // will offset to right when there is a horizontal scrollbar. @@ -4816,8 +4816,8 @@ if(dojo.isIE || dojo.isOpera){ var curnode = node; do{ var n = curnode.offsetLeft; - //FIXME: ugly hack to workaround the submenu in - //popupmenu2 does not shown up correctly in opera. + //FIXME: ugly hack to workaround the submenu in + //popupmenu2 does not shown up correctly in opera. //Someone have a better workaround? if(!d.isOpera || n > 0){ ret.x += isNaN(n) ? 0 : n; @@ -4918,7 +4918,7 @@ if(dojo.isIE || dojo.isOpera){ } var _evtHdlrMap = { - + } var _ctr = 0; @@ -4931,7 +4931,7 @@ if(dojo.isIE || dojo.isOpera){ // Handles normalized getting and setting of attributes on DOM // Nodes. If 2 arguments are passed, and a the second argumnt is a // string, acts as a getter. - // + // // If a third argument is passed, or if the second argumnt is a // map of attributes, acts as a setter. // @@ -4959,7 +4959,7 @@ if(dojo.isIE || dojo.isOpera){ // example: // | // get the current value of the "foo" attribute on a node // | dojo.attr(dojo.byId("nodeId"), "foo"); - // | + // | // | // we can just pass the id: // | dojo.attr("nodeId", "foo"); // | @@ -5053,7 +5053,7 @@ if(dojo.isIE || dojo.isOpera){ dojo.hasClass = function(/*DomNode|String*/node, /*String*/classStr){ // summary: // Returns whether or not the specified classes are a portion of the - // class list currently applied to the node. + // class list currently applied to the node. return ((" "+dojo.byId(node).className+" ").indexOf(" "+classStr+" ") >= 0); // Boolean }; @@ -5076,7 +5076,7 @@ dojo.removeClass = function(/*DomNode|String*/node, /*String*/classStr){ }; dojo.toggleClass = function(/*DomNode|String*/node, /*String*/classStr, /*Boolean?*/condition){ - // summary: + // summary: // Adds a class to node if not present, or removes if present. // Pass a boolean condition if you want to explicitly add or remove. // condition: @@ -5125,8 +5125,8 @@ dojo.provide("dojo._base.NodeList"); dojo.NodeList = function(){ // summary: - // dojo.NodeList is as subclass of Array which adds syntactic - // sugar for chaining, common iteration operations, animation, + // dojo.NodeList is as subclass of Array which adds syntactic + // sugar for chaining, common iteration operations, animation, // and node manipulation. NodeLists are most often returned as // the result of dojo.query() calls. // example: @@ -5143,7 +5143,7 @@ dojo.provide("dojo._base.NodeList"); // FIXME: handle return values for #3244 // http://trac.dojotoolkit.org/ticket/3244 - + // FIXME: // need to wrap or implement: // join (perhaps w/ innerHTML/outerHTML overload for toString() of items?) @@ -5216,10 +5216,10 @@ dojo.provide("dojo._base.NodeList"); var a = dojo._toArray(arguments, 0, [this]); return tnl(a.concat.apply([], a)); }, - + indexOf: function(/*Object*/ value, /*Integer?*/ fromIndex){ // summary: - // see dojo.indexOf(). The primary difference is that the acted-on + // see dojo.indexOf(). The primary difference is that the acted-on // array is implicitly this NodeList // value: // The value to search for. @@ -5280,21 +5280,21 @@ dojo.provide("dojo._base.NodeList"); forEach: function(callback, thisObj){ // summary: - // see dojo.forEach(). The primary difference is that the acted-on + // see dojo.forEach(). The primary difference is that the acted-on // array is implicitly this NodeList d.forEach(this, callback, thisObj); // non-standard return to allow easier chaining - return this; // dojo.NodeList + return this; // dojo.NodeList }, // custom methods - + coords: function(){ // summary: // Returns the box objects all elements in a node list as // an Array (*not* a NodeList) - + return d.map(this, d.coords); // Array }, @@ -5317,7 +5317,7 @@ dojo.provide("dojo._base.NodeList"); // gets or sets the CSS property for every element in the NodeList // property: String // the CSS property to get/set, in JavaScript notation - // ("lineHieght" instead of "line-height") + // ("lineHieght" instead of "line-height") // value: String? // optional. The value to set the property to // return: @@ -5366,7 +5366,7 @@ dojo.provide("dojo._base.NodeList"); // if 2 arguments are passed (methodName, objOrFunc), objOrFunc should // reference a function or be the name of the function in the global // namespace to attach. If 3 arguments are provided - // (methodName, objOrFunc, funcName), objOrFunc must be the scope to + // (methodName, objOrFunc, funcName), objOrFunc must be the scope to // locate the bound function in // funcName: String? // optional. A string naming the function in objOrFunc to bind to the @@ -5396,7 +5396,7 @@ dojo.provide("dojo._base.NodeList"); // by queryOrNode. Returns the original NodeList. // queryOrNode: // may be a string representing any valid CSS3 selector or a DOM node. - // In the selector case, only the first matching element will be used + // In the selector case, only the first matching element will be used // for relative positioning. // position: // can be one of: @@ -5417,7 +5417,7 @@ dojo.provide("dojo._base.NodeList"); // simpleFilter: // single-expression CSS filter // return: - // `dojo.NodeList` the orpahned elements + // `dojo.NodeList` the orpahned elements var orphans = simpleFilter ? d._filterQueryResult(this, simpleFilter) : this; orphans.forEach(function(item){ if(item.parentNode){ @@ -5487,9 +5487,9 @@ dojo.provide("dojo._base.NodeList"); var items = this; var _a = arguments; var r = d.NodeList(); - var rp = function(t){ + var rp = function(t){ if(t !== undefined){ - r.push(t); + r.push(t); } } if(d.isString(simpleQuery)){ @@ -5505,7 +5505,7 @@ dojo.provide("dojo._base.NodeList"); d.forEach(d.filter(items, _a[0], _a[1]), rp); return r; // dojo.NodeList }, - + /* // FIXME: should this be "copyTo" and include parenting info? clone: function(){ @@ -5517,7 +5517,7 @@ dojo.provide("dojo._base.NodeList"); addContent: function(/*String*/ content, /*String||Integer?*/ position){ // summary: - // add a node or some HTML as a string to every item in the list. + // add a node or some HTML as a string to every item in the list. // Returns the original list. // description: // a copy of the HTML content is added to each item in the @@ -5568,7 +5568,7 @@ dojo.provide("dojo._base.NodeList"); // FIXME: should we be checking for and/or disposing of widgets below these nodes? }, - + instantiate: function(/*String|Object*/ declaredClass, /*Object?*/ properties){ // summary: // Create a new instance of a specified class, using the @@ -5595,8 +5595,8 @@ dojo.provide("dojo._base.NodeList"); } // FIXME: should these events trigger publishes? /* - return (a ? this.connect(_oe, a, b) : - this.forEach(function(n){ + return (a ? this.connect(_oe, a, b) : + this.forEach(function(n){ // FIXME: // listeners get buried by // addEventListener and can't be dug back @@ -5634,7 +5634,7 @@ dojo.provide("dojo._base.query"); designed to take any valid CSS3 selector and return the nodes matching the selector. To do this quickly, it processes queries in several steps, applying caching where profitable. - + The steps (roughly in reverse order of the way they appear in the code): 1.) check to see if we already have a "query dispatcher" - if so, use that with the given parameterization. Skip to step 4. @@ -5687,7 +5687,7 @@ dojo.provide("dojo._base.query"); } // the overall data graph of the full query, as represented by queryPart objects - var qparts = []; + var qparts = []; // state keeping vars var inBrackets = -1; var inParens = -1; @@ -5798,8 +5798,8 @@ dojo.provide("dojo._base.query"); }; }else if(cc == "("){ if(inPseudo >= 0){ - _cp = { - name: ts(inPseudo+1, x), + _cp = { + name: ts(inPseudo+1, x), value: null } currentPart.pseudos.push(_cp); @@ -5811,9 +5811,9 @@ dojo.provide("dojo._base.query"); if(inPseudo >= 0){ currentPart.pseudos.push({ name: ts(inPseudo+1, x) }); } - currentPart.hasLoops = ( - currentPart.pseudos.length || - currentPart.attrs.length || + currentPart.hasLoops = ( + currentPart.pseudos.length || + currentPart.attrs.length || currentPart.classes.length ); currentPart.query = ts(pStart, x); currentPart.tag = (currentPart["oper"]) ? null : (currentPart.tag || "*"); @@ -5823,7 +5823,7 @@ dojo.provide("dojo._base.query"); } return qparts; }; - + //////////////////////////////////////////////////////////////////////// // XPath query code @@ -5858,9 +5858,9 @@ dojo.provide("dojo._base.query"); // matching function that generates whatever type of yes/no distinguisher // the query method needs. The method is a bit tortured and hard to read // because it needs to be used in both the XPath and DOM branches. - var handleAttrs = function( attrList, - query, - getDefault, + var handleAttrs = function( attrList, + query, + getDefault, handleMatch){ d.forEach(query.attrs, function(attr){ var matcher; @@ -5889,7 +5889,7 @@ dojo.provide("dojo._base.query"); prefix = "/following-sibling::"; // get element following siblings tqp = qparts.shift(); }else if(tqp.oper == "+"){ - // FIXME: + // FIXME: // fails when selecting subsequent siblings by node type // because the position() checks the position in the list // of matching elements and not the localized siblings @@ -5904,7 +5904,7 @@ dojo.provide("dojo._base.query"); // get the tag name (if any) xpath += prefix + tqp.tag + postfix; - + // check to see if it's got an id. Needs to come first in xpath. if(tqp.id){ xpath += "[@id='"+tqp.id+"'][1]"; @@ -5916,12 +5916,12 @@ dojo.provide("dojo._base.query"); if(cn.charAt(cnl-1) == "*"){ padding = ""; cn = cn.substr(0, cnl-1); } - xpath += + xpath += "[contains(concat(' ',@class,' '), ' "+ cn + padding + "')]"; }); - handleAttrs(xPathAttrs, tqp, + handleAttrs(xPathAttrs, tqp, function(condition){ return "[@"+condition+"]"; }, @@ -5950,7 +5950,7 @@ dojo.provide("dojo._base.query"); var ret = []; var xpathResult; try{ - xpathResult = doc.evaluate(xpath, parent, null, + xpathResult = doc.evaluate(xpath, parent, null, // XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null); XPathResult.ANY_TYPE, null); }catch(e){ @@ -5971,7 +5971,7 @@ dojo.provide("dojo._base.query"); d.xPathMatch = function(query){ // XPath based DOM query system. Handles a small subset of CSS // selectors, subset is identical to the non-XPath version of this - // function. + // function. return getXPathFunc(query)(); } @@ -6027,7 +6027,7 @@ dojo.provide("dojo._base.query"); // see if we can constrain our next level to direct children if(tqp.oper){ - var ecn = (tqp.oper == ">") ? + var ecn = (tqp.oper == ">") ? _childElements(element) : _nextSiblings(element, (tqp.oper == "+")); @@ -6095,14 +6095,14 @@ dojo.provide("dojo._base.query"); // does it have a tagName component? if(q.tag){ if(q.tag == "*"){ - ff = agree(ff, + ff = agree(ff, function(elem){ return (elem.nodeType == 1); } ); }else{ // tag name match - ff = agree(ff, + ff = agree(ff, function(elem){ return ( (elem.nodeType == 1) && @@ -6116,7 +6116,7 @@ dojo.provide("dojo._base.query"); // does the node have an ID? if(q.id){ - ff = agree(ff, + ff = agree(ff, function(elem){ return ( (elem.nodeType == 1) && @@ -6136,7 +6136,7 @@ dojo.provide("dojo._base.query"); } var getNodeIndex = function(node){ - // NOTE: + // NOTE: // we could have a more accurate caching mechanism by invalidating // caches after the query has finished, but I think that'd lead to // significantly more cache churn than the cache would provide @@ -6181,7 +6181,7 @@ dojo.provide("dojo._base.query"); child = child.nextSibling; }while(child); }else{ - // NOTE: + // NOTE: // could be incorrect in some cases (node swaps involving the // passed node, etc.), but we ignore those due to the relative // unlikelihood of that occuring @@ -6221,7 +6221,7 @@ dojo.provide("dojo._base.query"); } }, "$=": function(attr, value){ - // E[foo$="bar"] + // E[foo$="bar"] // an E element whose "foo" attribute value ends exactly // with the string "bar" var tval = " "+value; @@ -6231,7 +6231,7 @@ dojo.provide("dojo._base.query"); } }, "~=": function(attr, value){ - // E[foo~="bar"] + // E[foo~="bar"] // an E element whose "foo" attribute value is a list of // space-separated values, one of which is exactly equal // to "bar" @@ -6479,10 +6479,10 @@ dojo.provide("dojo._base.query"); // "div.foo .bar") into simple query expressions (e.g., ["div.foo", // ".bar"]) var _queryFuncCache = { - "*": d.isIE ? - function(root){ + "*": d.isIE ? + function(root){ return root.all; - } : + } : function(root){ return root.getElementsByTagName("*"); }, @@ -6519,15 +6519,15 @@ dojo.provide("dojo._base.query"); // a specialized method that implements our primoridal "query optimizer". // This allows us to dispatch queries to the fastest subsystem we can get. var _getQueryFunc = ( - // NOTE: + // NOTE: // XPath on the Webkit nighlies is slower than it's DOM iteration // for most test cases - // FIXME: + // FIXME: // we should try to capture some runtime speed data for each query // function to determine on the fly if we should stick w/ the // potentially optimized variant or if we should try something // new. - (document["evaluate"] && !d.isSafari) ? + (document["evaluate"] && !d.isSafari) ? function(query){ // has xpath support that's faster than DOM var qparts = query.split(" "); @@ -6540,7 +6540,7 @@ dojo.provide("dojo._base.query"); // should we handle it? // kind of a lame heuristic, but it works - if( + if( // a "div div div" style query ((qparts.length > 2)&&(query.indexOf(">") == -1))|| // or something else with moderate complexity. kinda janky @@ -6596,7 +6596,7 @@ dojo.provide("dojo._base.query"); } } - // FIXME: + // FIXME: // Dean's Base2 uses a system whereby queries themselves note if // they'll need duplicate filtering. We need to get on that plan!! @@ -6614,7 +6614,7 @@ dojo.provide("dojo._base.query"); _zipIdx++; arr[0]["_zipIdx"] = _zipIdx; for(var x=1, te; te = arr[x]; x++){ - if(arr[x]["_zipIdx"] != _zipIdx){ + if(arr[x]["_zipIdx"] != _zipIdx){ ret.push(te); } te["_zipIdx"] = _zipIdx; @@ -6644,7 +6644,7 @@ dojo.provide("dojo._base.query"); // * class selectors (e.g., `.foo`) // * node type selectors like `span` // * ` ` descendant selectors - // * `>` child element selectors + // * `>` child element selectors // * `#foo` style ID selectors // * `*` universal selector // * `~`, the immediately preceeded-by sibling selector @@ -6669,14 +6669,14 @@ dojo.provide("dojo._base.query"); // palette of selectors and when combined with functions for // maniplation presented by dojo.NodeList, many types of DOM // manipulation operations become very straightforward. - // + // // Unsupported Selectors: // ---------------------- // // While dojo.query handles many CSS3 selectors, some fall outside of // what's resaonable for a programmatic node querying engine to // handle. Currently unsupported selectors include: - // + // // * namespace-differentiated selectors of any form // * all `::` pseduo-element selectors // * certain pseduo-selectors which don't get a lot of day-to-day use: @@ -6685,10 +6685,10 @@ dojo.provide("dojo._base.query"); // | * `:root`, `:active`, `:hover`, `:visisted`, `:link`, // `:enabled`, `:disabled`, `:checked` // * `:*-of-type` pseudo selectors - // + // // dojo.query and XML Documents: // ----------------------------- - // + // // `dojo.query` currently only supports searching XML documents // whose tags and attributes are 100% lower-case. This is a known // limitation and will [be addressed soon](http://trac.dojotoolkit.org/ticket/3866) @@ -6849,14 +6849,14 @@ dojo.provide("dojo._base.xhr"); // yields this object structure as the result of a call to // formToObject(): // - // | { + // | { // | blah: "blah", // | multi: [ // | "thud", // | "thonk" // | ] // | }; - + var ret = {}; var iq = "input:not([type=file]):not([type=submit]):not([type=image]):not([type=reset]):not([type=button]), select, textarea"; _d.query(iq, formNode).filter(function(node){ @@ -6873,7 +6873,7 @@ dojo.provide("dojo._base.xhr"); setValue(ret, _in, opt.value); } }); - }else{ + }else{ setValue(ret, _in, item.value); if(type == "image"){ ret[_in+".x"] = ret[_in+".y"] = ret[_in].x = ret[_in].y = 0; @@ -6890,7 +6890,7 @@ dojo.provide("dojo._base.xhr"); // example: // this object: // - // | { + // | { // | blah: "blah", // | multi: [ // | "thud", @@ -6899,7 +6899,7 @@ dojo.provide("dojo._base.xhr"); // | }; // // yields the following query string: - // + // // | "blah=blah&multi=thud&multi=thonk" // FIXME: need to implement encodeAscii!! @@ -6944,7 +6944,7 @@ dojo.provide("dojo._base.xhr"); // This string: // // | "foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&" - // + // // results in this object structure: // // | { @@ -6952,7 +6952,7 @@ dojo.provide("dojo._base.xhr"); // | thinger: " spaces =blah", // | zonk: "blarg" // | } - // + // // Note that spaces and other urlencoded entities are correctly // handled. @@ -6990,13 +6990,13 @@ dojo.provide("dojo._base.xhr"); // every IO API timeout: 1000, // milliseconds handleAs: "text", // replaces the always-wrong "mimetype" - content: { + content: { key: "value" }, // browser-specific, MAY be unsupported sync: true, // defaults to false - form: dojo.byId("someForm") + form: dojo.byId("someForm") } */ @@ -7016,7 +7016,7 @@ dojo.provide("dojo._base.xhr"); } return (xhr.status == 204) ? undefined : _d.fromJson(xhr.responseText); }, - "json-comment-filtered": function(xhr){ + "json-comment-filtered": function(xhr){ // NOTE: we provide the json-comment-filtered option as one solution to // the "JavaScript Hijacking" issue noted by Fortify and others. It is // not appropriate for all circumstances. @@ -7030,11 +7030,11 @@ dojo.provide("dojo._base.xhr"); return (xhr.status == 204) ? undefined : _d.fromJson(value.substring(cStartIdx+2, cEndIdx)); }, - "javascript": function(xhr){ + "javascript": function(xhr){ // FIXME: try Moz and IE specific eval variants? return _d.eval(xhr.responseText); }, - "xml": function(xhr){ + "xml": function(xhr){ var result = xhr.responseXML; if(_d.isIE && (!result || window.location.protocol == "file:")){ _d.forEach(["MSXML2", "Microsoft", "MSXML", "MSXML3"], function(prefix){ @@ -7088,13 +7088,13 @@ dojo.provide("dojo._base.xhr"); // error: Function? // function(response, ioArgs){}. response is an Object, ioArgs // is of type dojo.__IoCallbackArgs. The error function will - // be called in an error case. + // be called in an error case. // handle: Function? // function(response, ioArgs){}. response is an Object, ioArgs // is of type dojo.__IoCallbackArgs. The handle function will // be called in either the successful or error case. For // the load, error and handle functions, the ioArgs object - // will contain the following properties: + // will contain the following properties: this.url = url; this.content = content; this.timeout = timeout; @@ -7159,7 +7159,7 @@ dojo.provide("dojo._base.xhr"); /*Function*/canceller, /*Function*/okHandler, /*Function*/errHandler){ - // summary: + // summary: // sets up the Deferred and ioArgs property on the Deferred so it // can be used in an io call. // args: @@ -7175,25 +7175,25 @@ dojo.provide("dojo._base.xhr"); // object returned from this function. // errHandler: // The first error callback to be registered with Deferred. It has the opportunity - // to do cleanup on an error. It will receive two arguments: error (the + // to do cleanup on an error. It will receive two arguments: error (the // Error object) and dfd, the Deferred object returned from this function. var ioArgs = {args: args, url: args.url}; //Get values from form if requestd. var formObject = null; - if(args.form){ + if(args.form){ var form = _d.byId(args.form); - //IE requires going through getAttributeNode instead of just getAttribute in some form cases, + //IE requires going through getAttributeNode instead of just getAttribute in some form cases, //so use it for all. See #2844 var actnNode = form.getAttributeNode("action"); - ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); + ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); formObject = _d.formToObject(form); } // set up the query params var miArgs = [{}]; - + if(formObject){ // potentially over-ride url-provided params w/ form values miArgs.push(formObject); @@ -7206,7 +7206,7 @@ dojo.provide("dojo._base.xhr"); miArgs.push({"dojo.preventCache": new Date().valueOf()}); } ioArgs.query = _d.objectToQuery(_d.mixin.apply(null, miArgs)); - + // .. and the real work of getting the deferred in order, etc. ioArgs.handleAs = args.handleAs || "text"; var d = new _d.Deferred(canceller); @@ -7236,9 +7236,9 @@ dojo.provide("dojo._base.xhr"); return handle.call(args, value, ioArgs); }); } - + d.ioArgs = ioArgs; - + // FIXME: need to wire up the xhr object's abort method to something // analagous in the Deferred return d; @@ -7246,7 +7246,7 @@ dojo.provide("dojo._base.xhr"); var _deferredCancel = function(/*Deferred*/dfd){ //summary: canceller function for dojo._ioSetArgs call. - + dfd.canceled = true; var xhr = dfd.ioArgs.xhr; var _at = typeof xhr.abort; @@ -7264,7 +7264,7 @@ dojo.provide("dojo._base.xhr"); } var _deferError = function(/*Error*/error, /*Deferred*/dfd){ //summary: errHandler function for dojo._ioSetArgs call. - + // console.debug("xhr error in:", dfd.ioArgs.xhr); console.debug(error); return error; @@ -7283,10 +7283,10 @@ dojo.provide("dojo._base.xhr"); var _inFlightIntvl = null; var _inFlight = []; var _watchInFlight = function(){ - //summary: + //summary: // internal method that checks each inflight XMLHttpRequest to see // if it has completed or if the timeout situation applies. - + var now = (new Date()).getTime(); // make sure sync calls stay thread safe, if this callback is called // during a sync call and this results in another sync call before the @@ -7298,7 +7298,7 @@ dojo.provide("dojo._base.xhr"); var dfd = tif.dfd; try{ if(!dfd || dfd.canceled || !tif.validCheck(dfd)){ - _inFlight.splice(i--, 1); + _inFlight.splice(i--, 1); }else if(tif.ioCheck(dfd)){ _inFlight.splice(i--, 1); tif.resHandle(dfd); @@ -7429,7 +7429,7 @@ dojo.provide("dojo._base.xhr"); if(ioArgs.query.length){ ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query; ioArgs.query = null; - } + } } /*===== @@ -7454,8 +7454,8 @@ dojo.provide("dojo._base.xhr"); =====*/ dojo.xhr = function(/*String*/ method, /*dojo.__XhrArgs*/ args, /*Boolean?*/ hasBody){ - // summary: - // Sends an HTTP request with the given method. If the request has an + // summary: + // Sends an HTTP request with the given method. If the request has an // HTTP body, then pass true for hasBody. The method argument should be uppercase. // Also look at dojo.xhrGet(), xhrPost(), xhrPut() and dojo.xhrDelete() for shortcuts // for those HTTP methods. There are also methods for "raw" PUT and POST methods @@ -7468,13 +7468,13 @@ dojo.provide("dojo._base.xhr"); } dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){ - // summary: + // summary: // Sends an HTTP GET request to the server. return _d.xhr("GET", args); //dojo.Deferred } dojo.xhrPost = function(/*dojo.__XhrArgs*/ args){ - //summary: + //summary: // Sends an HTTP POST request to the server. return _d.xhr("POST", args, true); // dojo.Deferred } @@ -7542,13 +7542,13 @@ dojo.provide("dojo._base.fx"); /* - Animation losely package based on Dan Pupius' work, contributed under CLA: + Animation losely package based on Dan Pupius' work, contributed under CLA: http://pupius.co.uk/js/Toolkit.Drawing.js */ -(function(){ +(function(){ var d = dojo; - + dojo._Line = function(/*int*/ start, /*int*/ end){ // summary: // dojo._Line is the object used to generate values from a start value @@ -7565,7 +7565,7 @@ dojo.provide("dojo._base.fx"); return ((this.end - this.start) * n) + this.start; // Decimal } } - + d.declare("dojo._Animation", null, { // summary // A generic animation class that fires callbacks into its handlers @@ -7582,72 +7582,72 @@ dojo.provide("dojo._base.fx"); this.curve = new d._Line(this.curve[0], this.curve[1]); } }, - + // duration: Integer // The time in milliseonds the animation will take to run duration: 350, - + /*===== // curve: dojo._Line||Array // A two element array of start and end values, or a dojo._Line instance to be - // used in the Animation. + // used in the Animation. curve: null, - + // easing: Function - // A Function to adjust the acceleration (or deceleration) of the progress + // A Function to adjust the acceleration (or deceleration) of the progress // across a dojo._Line easing: null, =====*/ - + // repeat: Integer // The number of times to loop the animation repeat: 0, - + // rate: Integer - // the time in milliseconds to wait before advancing to next frame + // the time in milliseconds to wait before advancing to next frame // (used as a fps timer: rate/1000 = fps) rate: 10 /* 100 fps */, - - /*===== + + /*===== // delay: Integer // The time in milliseconds to wait before starting animation after it has been .play()'ed delay: null, - + // events // // beforeBegin: Event // Synthetic event fired before a dojo._Animation begins playing (synchronous) beforeBegin: null, - + // onBegin: Event // Synthetic event fired as a dojo._Animation begins playing (useful?) onBegin: null, - + // onAnimate: Event // Synthetic event fired at each interval of a dojo._Animation onAnimate: null, - + // onEnd: Event // Synthetic event fired after the final frame of a dojo._Animation onEnd: null, - + // onPlay: Event // Synthetic event fired any time a dojo._Animation is play()'ed onPlay: null, - + // onPause: Event // Synthetic event fired when a dojo._Animation is paused onPause: null, - + // onStop: Event // Synthetic event fires when a dojo._Animation is stopped onStop: null, - + =====*/ - + _percent: 0, _startRepeatCount: 0, - + _fire: function(/*Event*/ evt, /*Array?*/ args){ // summary: // Convenience function. Fire event "evt" and pass it the @@ -7671,7 +7671,7 @@ dojo.provide("dojo._base.fx"); } return this; // dojo._Animation }, - + play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){ // summary: // Start the animation. @@ -7688,9 +7688,9 @@ dojo.provide("dojo._base.fx"); }else if(_t._active && !_t._paused){ return _t; // dojo._Animation } - + _t._fire("beforeBegin"); - + var de = delay||_t.delay; var _p = dojo.hitch(_t, "_play", gotoStart); if(de > 0){ @@ -7700,7 +7700,7 @@ dojo.provide("dojo._base.fx"); _p(); return _t; }, - + _play: function(gotoStart){ var _t = this; _t._startTime = new Date().valueOf(); @@ -7708,10 +7708,10 @@ dojo.provide("dojo._base.fx"); _t._startTime -= _t.duration * _t._percent; } _t._endTime = _t._startTime + _t.duration; - + _t._active = true; _t._paused = false; - + var value = _t.curve.getValue(_t._percent); if(!_t._percent){ if(!_t._startRepeatCount){ @@ -7719,13 +7719,13 @@ dojo.provide("dojo._base.fx"); } _t._fire("onBegin", [value]); } - + _t._fire("onPlay", [value]); - + _t._cycle(); return _t; // dojo._Animation }, - + pause: function(){ // summary: Pauses a running animation. this._stopTimer(); @@ -7734,7 +7734,7 @@ dojo.provide("dojo._base.fx"); this._fire("onPause", [this.curve.getValue(this._percent)]); return this; // dojo._Animation }, - + gotoPercent: function(/*Decimal*/ percent, /*Boolean?*/ andPlay){ // summary: // Sets the progress of the animation. @@ -7748,7 +7748,7 @@ dojo.provide("dojo._base.fx"); if(andPlay){ this.play(); } return this; // dojo._Animation }, - + stop: function(/*boolean?*/ gotoEnd){ // summary: Stops a running animation. // gotoEnd: If true, the animation will end. @@ -7761,7 +7761,7 @@ dojo.provide("dojo._base.fx"); this._active = this._paused = false; return this; // dojo._Animation }, - + status: function(){ // summary: Returns a string token representation of the status of // the animation, one of: "paused", "playing", "stopped" @@ -7770,30 +7770,30 @@ dojo.provide("dojo._base.fx"); } return "stopped"; // String }, - + _cycle: function(){ var _t = this; if(_t._active){ var curr = new Date().valueOf(); var step = (curr - _t._startTime) / (_t._endTime - _t._startTime); - + if(step >= 1){ step = 1; } _t._percent = step; - + // Perform easing if(_t.easing){ step = _t.easing(step); } - + _t._fire("onAnimate", [_t.curve.getValue(step)]); - + if(_t._percent < 1){ _t._startTimer(); }else{ _t._active = false; - + if(_t.repeat > 0){ _t.repeat--; _t.play(null, true); @@ -7863,7 +7863,7 @@ dojo.provide("dojo._base.fx"); } : function(){}; dojo._fade = function(/*Object*/ args){ - // summary: + // summary: // Returns an animation that will fade the node defined by // args.node from the start to end values passed (args.start // args.end) (end is mandatory, start is optional) @@ -7872,8 +7872,8 @@ dojo.provide("dojo._base.fx"); var fArgs = d.mixin({ properties: {} }, args); var props = (fArgs.properties.opacity = {}); props.start = !("start" in fArgs) ? - function(){ - return Number(d.style(fArgs.node, "opacity")); + function(){ + return Number(d.style(fArgs.node, "opacity")); } : fArgs.start; props.end = fArgs.end; @@ -7898,14 +7898,14 @@ dojo.provide("dojo._base.fx"); =====*/ dojo.fadeIn = function(/*dojo.__FadeArgs*/ args){ - // summary: + // summary: // Returns an animation that will fade node defined in 'args' from // its current opacity to fully opaque. return d._fade(d.mixin({ end: 1 }, args)); // dojo._Animation } dojo.fadeOut = function(/*dojo.__FadeArgs*/ args){ - // summary: + // summary: // Returns an animation that will fade node defined in 'args' // from its current opacity to fully transparent. return d._fade(d.mixin({ end: 0 }, args)); // dojo._Animation @@ -7950,13 +7950,13 @@ dojo.provide("dojo._base.fx"); // A hash map of style properties to Objects describing the transition, // such as the properties of dojo._Line with an additional 'unit' property properties: {} - + //TODOC: add event callbacks }); =====*/ dojo.animateProperty = function(/*dojo.__AnimArgs*/ args){ - // summary: + // summary: // Returns an animation that will transition the properties of // node defined in 'args' depending how they are defined in // 'args.properties' @@ -7966,10 +7966,10 @@ dojo.provide("dojo._base.fx"); // animations. It takes an object of "properties" corresponding to // style properties, and animates them in parallel over a set // duration. - // + // // example: // A simple animation that changes the width of the specified node. - // | dojo.animateProperty({ + // | dojo.animateProperty({ // | node: "nodeId", // | properties: { width: 400 }, // | }).play(); @@ -7984,7 +7984,7 @@ dojo.provide("dojo._base.fx"); // | properties: { // | width: { start: '200', end: '400', unit:"px" }, // | height: { start:'200', end: '400', unit:"px" }, - // | paddingTop: { start:'5', end:'50', unit:"px" } + // | paddingTop: { start:'5', end:'50', unit:"px" } // | } // | }).play(); // @@ -7993,7 +7993,7 @@ dojo.provide("dojo._base.fx"); // when the animation ends. Easing functions accept values between // zero and one and return a value on that basis. In this case, an // exponential-in curve. - // | dojo.animateProperty({ + // | dojo.animateProperty({ // | node: "nodeId", // | // dojo figures out the start value // | properties: { width: { end: 400 } }, @@ -8061,10 +8061,10 @@ dojo.provide("dojo._base.fx"); return anim; // dojo._Animation } - dojo.anim = function( /*DOMNode|String*/ node, - /*Object*/ properties, - /*Integer?*/ duration, - /*Function?*/ easing, + dojo.anim = function( /*DOMNode|String*/ node, + /*Object*/ properties, + /*Integer?*/ duration, + /*Function?*/ easing, /*Function?*/ onEnd, /*Integer?*/ delay){ // summary: @@ -8105,12 +8105,12 @@ dojo.provide("dojo._base.fx"); // example: // Fade out a node over a full second // | dojo.anim("id", { opacity: 0 }, 1000); - return d.animateProperty({ + return d.animateProperty({ node: node, duration: duration||d._Animation.prototype.duration, properties: properties, easing: easing, - onEnd: onEnd + onEnd: onEnd }).play(delay||0); } })(); diff --git a/tests/javascript/frameworks/dojo/dojo-1.3.3.js b/tests/javascript/frameworks/dojo/dojo-1.3.3.js index a20d4ab2afabd5bc831cf8d7017d3161ea9057f4..3919209708f2c6a6ca328ba71d4c98f672841d4a 100644 --- a/tests/javascript/frameworks/dojo/dojo-1.3.3.js +++ b/tests/javascript/frameworks/dojo/dojo-1.3.3.js @@ -21,7 +21,7 @@ ["dojo", "fojo"], ["dijit", "fijit"], ["dojox", "fojox"] - + ] */ @@ -124,7 +124,7 @@ djConfig = { // of calling `dojo.registerModulePath("foo", "../../bar");`. Multiple // modules may be configured via `djConfig.modulePaths`. modulePaths: {}, - // afterOnLoad: Boolean + // afterOnLoad: Boolean // Indicates Dojo was added to the page after the page load. In this case // Dojo will not wait for the page DOMContentLoad/load events and fire // its dojo.addOnLoad callbacks after making sure all outstanding @@ -141,7 +141,7 @@ djConfig = { addOnLoad: null, // require: Array // An array of module names to be loaded immediately after dojo.js has been included - // in a page. + // in a page. require: [], // defaultDuration: Array // Default duration, in milliseconds, for wipe and fade animations within dijits. @@ -150,9 +150,9 @@ djConfig = { // dojoBlankHtmlUrl: String // Used by some modules to configure an empty iframe. Used by dojo.io.iframe and // dojo.back, and dijit popup support in IE where an iframe is needed to make sure native - // controls do not bleed through the popups. Normally this configuration variable + // controls do not bleed through the popups. Normally this configuration variable // does not need to be set, except when using cross-domain/CDN Dojo builds. - // Save dojo/resources/blank.html to your domain and set `djConfig.dojoBlankHtmlUrl` + // Save dojo/resources/blank.html to your domain and set `djConfig.dojoBlankHtmlUrl` // to the path on your domain your copy of blank.html. dojoBlankHtmlUrl: undefined } @@ -171,14 +171,14 @@ djConfig = { var cn = [ "assert", "count", "debug", "dir", "dirxml", "error", "group", "groupEnd", "info", "profile", "profileEnd", "time", "timeEnd", - "trace", "warn", "log" + "trace", "warn", "log" ]; var i=0, tn; while((tn=cn[i++])){ if(!console[tn]){ (function(){ var tcn = tn+""; - console[tcn] = ('log' in console) ? function(){ + console[tcn] = ('log' in console) ? function(){ var a = Array.apply({}, arguments); a.unshift(tcn+":"); console["log"](a.join(" ")); @@ -210,7 +210,7 @@ djConfig = { if(typeof dojox == "undefined"){ this.dojox = {_scopeName: "dojox"}; } - + if(!d._scopeArgs){ d._scopeArgs = [dojo, dijit, dojox]; } @@ -246,10 +246,10 @@ dojo.global = { =====*/ dojo.locale = d.config.locale; - var rev = "$Rev: 21524 $".match(/\d+/); + var rev = "$Rev: 21524 $".match(/\d+/); dojo.version = { - // summary: + // summary: // version number of dojo // major: Integer // Major version. If total version is "1.2.0beta1", will be 1 @@ -274,7 +274,7 @@ dojo.global = { if(typeof OpenAjax != "undefined"){ OpenAjax.hub.registerLibrary(dojo._scopeName, "http://dojotoolkit.org", d.version.toString()); } - + var tobj = {}; dojo._mixin = function(/*Object*/ obj, /*Object*/ props){ // summary: @@ -302,7 +302,7 @@ dojo.global = { } dojo.mixin = function(/*Object*/obj, /*Object...*/props){ - // summary: + // summary: // Adds all properties and methods of props to obj and returns the // (now modified) obj. // description: @@ -328,8 +328,8 @@ dojo.global = { // | constructor: function(properties){ // | // property configuration: // | dojo.mixin(this, properties); - // | - // | + // | + // | // | // ... // | }, // | quip: "I wasn't born yesterday, you know - I've seen movies.", @@ -349,11 +349,11 @@ dojo.global = { // | name: "Carl Brutanananadilewski" // | } // | ); - // | + // | // | // will print "Carl Brutanananadilewski" - // | + // | // | // will print "true" - // | + // | if(!obj){ obj = {}; } for(var i=1, l=arguments.length; i<l; i++){ d._mixin(obj, arguments[i]); @@ -373,14 +373,14 @@ dojo.global = { } dojo.setObject = function(/*String*/name, /*Object*/value, /*Object?*/context){ - // summary: + // summary: // Set a property from a dot-separated string, such as "A.B.C" - // description: + // description: // Useful for longer api chains where you have to test each object in // the chain, or when you have an object reference in string format. // Objects are created as needed along `path`. Returns the passed // value if setting is successful or `undefined` if not. - // name: + // name: // Path to a property, in the form "A.B.C". // context: // Optional. Object to use as root of path. Defaults to @@ -403,14 +403,14 @@ dojo.global = { } dojo.getObject = function(/*String*/name, /*Boolean?*/create, /*Object?*/context){ - // summary: + // summary: // Get a property from a dot-separated string, such as "A.B.C" - // description: + // description: // Useful for longer api chains where you have to test each object in // the chain, or when you have an object reference in string format. - // name: + // name: // Path to an property, in the form "A.B.C". - // create: + // create: // Optional. Defaults to `false`. If `true`, Objects will be // created at any point along the 'path' that is undefined. // context: @@ -420,12 +420,12 @@ dojo.global = { } dojo.exists = function(/*String*/name, /*Object?*/obj){ - // summary: + // summary: // determine if an object supports a given method - // description: + // description: // useful for longer api chains where you have to test each object in // the chain - // name: + // name: // Path to an object, in the form "A.B.C". // obj: // Object to use as root of path. Defaults to @@ -448,10 +448,10 @@ dojo.global = { dojo["eval"] = function(/*String*/ scriptFragment){ - // summary: + // summary: // Perform an evaluation in the global scope. Use this rather than // calling 'eval()' directly. - // description: + // description: // Placed in a separate function to minimize size of trapped // exceptions. Calling eval() directly from some other scope may // complicate tracebacks on some platforms. @@ -473,7 +473,7 @@ dojo.global = { /*===== dojo.deprecated = function(behaviour, extra, removal){ - // summary: + // summary: // Log a debug message to indicate that a behavior has been // deprecated. // behaviour: String @@ -492,7 +492,7 @@ dojo.global = { dojo.experimental = function(moduleName, extra){ // summary: Marks code as experimental. - // description: + // description: // This can be used to mark a function, file, or module as // experimental. Experimental code is not ready to be used, and the // APIs are subject to change without notice. Experimental code may be @@ -554,11 +554,11 @@ dojo.global = { _loadedUrls: [], - //WARNING: + //WARNING: // This variable is referenced by packages outside of bootstrap: // FloatingPane.js and undo/browser.js _postLoad: false, - + //Egad! Lots of test files push on this directly instead of using dojo.addOnLoad. _loaders: [], _unloaders: [], @@ -577,13 +577,13 @@ dojo.global = { // not caught by us, so the caller will see it. We return a true // value if and only if the script is found. // - // relpath: + // relpath: // A relative path to a script (no leading '/', and typically ending // in '.js'). - // module: + // module: // A module whose existance to check for after loading a path. Can be // used to determine success or failure of the load. - // cb: + // cb: // a callback function to pass the result of evaluating the script var uri = ((relpath.charAt(0) == '/' || relpath.match(/^\w+:/)) ? "" : this.baseUrl) + relpath; @@ -604,7 +604,7 @@ dojo.global = { // it succeeded. Returns false if the URI reading failed. Throws if // the evaluation throws. // uri: a uri which points at the script to be loaded - // cb: + // cb: // a callback function to process the result of evaluating the script // as an expression, typically used by the resource bundle loader to // load JSON-style resources @@ -628,7 +628,7 @@ dojo.global = { if(cb){ cb(value); } return true; // Boolean } - + // FIXME: probably need to add logging to this method dojo._loadUriAndCheck = function(/*String*/uri, /*String*/moduleName, /*Function?*/cb){ // summary: calls loadUri then findModule and returns true if both succeed @@ -644,10 +644,10 @@ dojo.global = { dojo.loaded = function(){ // summary: // signal fired when initial environment and package loading is - // complete. You should use dojo.addOnLoad() instead of doing a + // complete. You should use dojo.addOnLoad() instead of doing a // direct dojo.connect() to this method in order to handle // initialization tasks that require the environment to be - // initialized. In a browser host, declarative widgets will + // initialized. In a browser host, declarative widgets will // be constructed when this function finishes runing. this._loadNotifying = true; this._postLoad = true; @@ -662,7 +662,7 @@ dojo.global = { } this._loadNotifying = false; - + //Make sure nothing else got added to the onload queue //after this first run. If something did, and we are not waiting for any //more inflight resources, run again. @@ -674,8 +674,8 @@ dojo.global = { dojo.unloaded = function(){ // summary: // signal fired by impending environment destruction. You should use - // dojo.addOnUnload() instead of doing a direct dojo.connect() to this - // method to perform page/application cleanup methods. See + // dojo.addOnUnload() instead of doing a direct dojo.connect() to this + // method to perform page/application cleanup methods. See // dojo.addOnUnload for more info. var mll = d._unloaders; while(mll.length){ @@ -726,7 +726,7 @@ dojo.global = { dojo._modulesLoaded = function(){ if(d._postLoad){ return; } - if(d._inFlightCount > 0){ + if(d._inFlightCount > 0){ console.warn("files still in flight!"); return; } @@ -760,8 +760,8 @@ dojo.global = { var syms = modulename.split("."); for(var i = syms.length; i>0; i--){ var parentModule = syms.slice(0, i).join("."); - if((i==1) && !this._moduleHasPrefix(parentModule)){ - // Support default module directory (sibling of dojo) for top-level modules + if((i==1) && !this._moduleHasPrefix(parentModule)){ + // Support default module directory (sibling of dojo) for top-level modules syms[0] = "../" + syms[0]; }else{ var parentModulePath = this._getModulePrefix(parentModule); @@ -812,26 +812,26 @@ dojo.global = { // description: // `dojo.require("A.B")` first checks to see if symbol A.B is // defined. If it is, it is simply returned (nothing to do). - // + // // If it is not defined, it will look for `A/B.js` in the script root // directory. - // + // // `dojo.require` throws an excpetion if it cannot find a file // to load, or if the symbol `A.B` is not defined after loading. - // + // // It returns the object `A.B`. - // + // // `dojo.require()` does nothing about importing symbols into // the current namespace. It is presumed that the caller will // take care of that. For example, to import all symbols into a // local block, you might write: - // + // // | with (dojo.require("A.B")) { // | ... // | } - // + // // And to import just the leaf symbol to a local variable: - // + // // | var B = dojo.require("A.B"); // | ... // returns: the required namespace object @@ -859,7 +859,7 @@ dojo.global = { // pass in false so we can give better error module = this._loadedModules[moduleName]; if(!module){ - throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); + throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); } } @@ -877,14 +877,14 @@ dojo.global = { // Each javascript source file is called a resource. When a // resource is loaded by the browser, `dojo.provide()` registers // that it has been loaded. - // + // // For backwards compatibility reasons, in addition to registering // the resource, `dojo.provide()` also ensures that the javascript // object for the module exists. For example, // `dojo.provide("dojox.data.FlickrStore")`, in addition to // registering that `FlickrStore.js` is a resource for the // `dojox.data` module, will ensure that the `dojox.data` - // javascript object exists, so that calls like + // javascript object exists, so that calls like // `dojo.data.foo = function(){ ... }` don't fail. // // In the case of a build where multiple javascript source files @@ -943,7 +943,7 @@ dojo.global = { if(condition === true){ // FIXME: why do we support chained require()'s here? does the build system? var args = []; - for(var i = 1; i < arguments.length; i++){ + for(var i = 1; i < arguments.length; i++){ args.push(arguments[i]); } d.require.apply(d, args); @@ -953,13 +953,13 @@ dojo.global = { dojo.requireAfterIf = d.requireIf; dojo.registerModulePath = function(/*String*/module, /*String*/prefix){ - // summary: + // summary: // maps a module name to a path - // description: + // description: // An unregistered module is given the default path of ../[module], // relative to Dojo root. For example, module acme is mapped to // ../acme. If you want to use a different module name, use - // dojo.registerModulePath. + // dojo.registerModulePath. // example: // If your dojo.js is located at this location in the web root: // | /myapp/js/dojo/dojo/dojo.js @@ -972,7 +972,7 @@ dojo.global = { // At which point you can then use dojo.require() to load the // modules (assuming they provide() the same things which are // required). The full code might be: - // | <script type="text/javascript" + // | <script type="text/javascript" // | src="/myapp/js/dojo/dojo/dojo.js"></script> // | <script type="text/javascript"> // | dojo.registerModulePath("foo", "../../foo"); @@ -993,7 +993,7 @@ dojo.global = { // description: // Load translated resource bundles provided underneath the "nls" // directory within a package. Translated resources may be located in - // different packages throughout the source tree. + // different packages throughout the source tree. // // Each directory is named for a locale as specified by RFC 3066, // (http://www.ietf.org/rfc/rfc3066.txt), normalized in lowercase. @@ -1008,18 +1008,18 @@ dojo.global = { // preload the bundles to avoid data redundancy and the multiple // network hits normally required to load these resources. // - // moduleName: + // moduleName: // name of the package containing the "nls" directory in which the // bundle is found // - // bundleName: + // bundleName: // bundle name, i.e. the filename without the '.js' suffix // - // locale: + // locale: // the locale to load (optional) By default, the browser's user // locale as defined by dojo.locale // - // availableFlatLocales: + // availableFlatLocales: // A comma-separated list of the available, flattened locales for this // bundle. This argument should only be set by the build process. // @@ -1061,11 +1061,11 @@ dojo.global = { var ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"); dojo._Url = function(/*dojo._Url||String...*/){ - // summary: + // summary: // Constructor to create an object representing a URL. // It is marked as private, since we might consider removing // or simplifying it. - // description: + // description: // Each argument is evaluated in order relative to the next until // a canonical uri is produced. To get an absolute Uri relative to // the current document use: @@ -1133,7 +1133,7 @@ dojo.global = { } uri = []; - if(relobj.scheme){ + if(relobj.scheme){ uri.push(relobj.scheme, ":"); } if(relobj.authority){ @@ -1173,7 +1173,7 @@ dojo.global = { dojo._Url.prototype.toString = function(){ return this.uri; }; dojo.moduleUrl = function(/*String*/module, /*dojo._Url||String*/url){ - // summary: + // summary: // Returns a `dojo._Url` object relative to a module. // example: // | var pngPath = dojo.moduleUrl("acme","images/small.png"); @@ -1181,10 +1181,10 @@ dojo.global = { // | // create an image and set it's source to pngPath's value: // | var img = document.createElement("img"); // | // NOTE: we assign the string representation of the url object - // | img.src = pngPath.toString(); + // | img.src = pngPath.toString(); // | // add our image to the document // | dojo.body().appendChild(img); - // example: + // example: // you may de-reference as far as you like down the package // hierarchy. This is sometimes handy to avoid lenghty relative // urls or for building portable sub-packages. In this example, @@ -1195,9 +1195,9 @@ dojo.global = { // | // somewhere in a configuration block // | dojo.registerModulePath("acme.widget", "../../acme/widget"); // | dojo.registerModulePath("acme.util", "../../util"); - // | + // | // | // ... - // | + // | // | // code in a module using acme resources // | var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html"); // | var dataPath = dojo.moduleUrl("acme.util","resources/data.json"); @@ -1207,7 +1207,7 @@ dojo.global = { if(loc.lastIndexOf("/") != loc.length-1){ loc += "/"; } - + //If the path is an absolute path (starts with a / or is on another //domain/xdomain) then don't add the baseUrl. var colonIndex = loc.indexOf(":"); @@ -1240,9 +1240,9 @@ dojo.isIE = { dojo.isSafari = { // example: // | if(dojo.isSafari){ ... } - // example: + // example: // Detect iPhone: - // | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ + // | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ // | // we are iPhone. Note, iPod touch reports "iPod" above and fails this test. // | } }; @@ -1370,7 +1370,7 @@ if(typeof window != 'undefined'){ if(dojo.isIE && window.location.protocol === "file:"){ dojo.config.ieForceActiveXXhr=true; } - + var cm = document.compatMode; d.isQuirks = cm == "BackCompat" || cm == "QuirksMode" || d.isIE < 6; @@ -1379,9 +1379,9 @@ if(typeof window != 'undefined'){ // These are in order of decreasing likelihood; this will change in time. d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; - + d._xhrObj = function(){ - // summary: + // summary: // does the work of portably generating a new XMLHTTPRequest object. var http, last_e; if(!dojo.isIE || !dojo.config.ieForceActiveXXhr){ @@ -1402,7 +1402,7 @@ if(typeof window != 'undefined'){ } } } - + if(!http){ throw new Error("XMLHTTP not available: "+last_e); } @@ -1470,7 +1470,7 @@ if(typeof window != 'undefined'){ } return http.responseText; // String } - + var _w = window; var _handleNodeEvent = function(/*String*/evtName, /*Function*/fp){ @@ -1488,7 +1488,7 @@ if(typeof window != 'undefined'){ d._windowUnloaders = []; - + d.windowUnloaded = function(){ // summary: // signal fired by impending window destruction. You may use @@ -1509,7 +1509,7 @@ if(typeof window != 'undefined'){ d.addOnWindowUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){ // summary: // registers a function to be triggered when window.onunload - // fires. + // fires. // description: // The first time that addOnWindowUnload is called Dojo // will register a page listener to trigger your unload @@ -1540,7 +1540,7 @@ if(typeof window != 'undefined'){ // description: // The first time that addOnUnload is called Dojo will // register a page listener to trigger your unload handler - // with. + // with. // // In a browser enviroment, the functions will be triggered // during the window.onbeforeunload event. Be careful of doing @@ -1553,7 +1553,7 @@ if(typeof window != 'undefined'){ // // Further note that calling dojo.addOnUnload will prevent // browsers from using a "fast back" cache to make page - // loading via back button instantaneous. + // loading via back button instantaneous. // example: // | dojo.addOnUnload(functionPointer) // | dojo.addOnUnload(object, "functionName") @@ -1592,19 +1592,19 @@ if(typeof window != 'undefined'){ // START DOMContentLoaded // Mozilla and Opera 9 expose the event we could use if(document.addEventListener){ - // NOTE: + // NOTE: // due to a threading issue in Firefox 2.0, we can't enable // DOMContentLoaded on that platform. For more information, see: // http://trac.dojotoolkit.org/ticket/1704 if(dojo.isWebKit > 525 || dojo.isOpera || dojo.isFF >= 3 || (dojo.isMoz && dojo.config.enableMozDomContentLoaded === true)){ document.addEventListener("DOMContentLoaded", dojo._loadInit, null); } - + // mainly for Opera 8.5, won't be fired if DOMContentLoaded fired already. // also used for Mozilla because of trac #1640 window.addEventListener("load", dojo._loadInit, null); } - + if(dojo.isAIR){ window.addEventListener("load", dojo._loadInit, null); }else if((dojo.isWebKit < 525) || dojo.isKhtml){ @@ -1635,7 +1635,7 @@ if(typeof window != 'undefined'){ document.createStyleSheet().addRule("v\\:*", "behavior:url(#default#VML); display:inline-block"); }catch(e){} } - + /* OpenAjax.subscribe("OpenAjax", "onload", function(){ @@ -1702,7 +1702,7 @@ dojo.isFunction = function(it){ dojo.isFunction = (function(){ var _isFunction = function(/*anything*/ it){ - var t = typeof it; // must evaluate separately due to bizarre Opera bug. See #8937 + var t = typeof it; // must evaluate separately due to bizarre Opera bug. See #8937 return it && (t == "function" || it instanceof Function); // Boolean }; @@ -1715,7 +1715,7 @@ dojo.isFunction = (function(){ })(); dojo.isObject = function(/*anything*/ it){ - // summary: + // summary: // Returns true if it is a JavaScript object (or an Array, a Function // or null) return it !== undefined && @@ -1743,7 +1743,7 @@ dojo.isArrayLike = function(/*anything*/ it){ } dojo.isAlien = function(/*anything*/ it){ - // summary: + // summary: // Returns true if it is a built-in function or some other kind of // oddball that *should* report as a function but doesn't return it && !dojo.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean @@ -1774,23 +1774,23 @@ dojo._hitchArgs = function(scope, method /*,...*/){ } dojo.hitch = function(/*Object*/scope, /*Function|String*/method /*,...*/){ - // summary: - // Returns a function that will only ever execute in the a given scope. + // summary: + // Returns a function that will only ever execute in the a given scope. // This allows for easy use of object member functions // in callbacks and other places in which the "this" keyword may - // otherwise not reference the expected scope. - // Any number of default positional arguments may be passed as parameters + // otherwise not reference the expected scope. + // Any number of default positional arguments may be passed as parameters // beyond "method". // Each of these values will be used to "placehold" (similar to curry) - // for the hitched function. - // scope: - // The scope to use when method executes. If method is a string, + // for the hitched function. + // scope: + // The scope to use when method executes. If method is a string, // scope is also the object containing method. // method: // A function to be hitched to scope, or the name of the method in // scope to be hitched. // example: - // | dojo.hitch(foo, "bar")(); + // | dojo.hitch(foo, "bar")(); // runs foo.bar() in the scope of foo // example: // | dojo.hitch(foo, myFunction); @@ -1815,7 +1815,7 @@ dojo.delegate = function(obj, props){ // summary: // Returns a new object which "looks" to obj for properties which it // does not have a value for. Optionally takes a bag of properties to - // seed the returned object with initially. + // seed the returned object with initially. // description: // This is a small implementaton of the Boodman/Crockford delegation // pattern in JavaScript. An intermediate object constructor mediates @@ -1879,17 +1879,17 @@ dojo._toArray = function(obj, offset, startWith){ }; var slow = function(obj, offset, startWith){ - var arr = startWith||[]; - for(var x = offset || 0; x < obj.length; x++){ - arr.push(obj[x]); - } + var arr = startWith||[]; + for(var x = offset || 0; x < obj.length; x++){ + arr.push(obj[x]); + } return arr; }; - - dojo._toArray = + + dojo._toArray = dojo.isIE ? function(obj){ return ((obj.item) ? slow : efficient).apply(this, arguments); - } : + } : efficient; })(); @@ -1969,27 +1969,27 @@ dojo.provide("dojo._base.declare"); // this file courtesy of the TurboAjax Group, licensed under a Dojo CLA dojo.declare = function(/*String*/ className, /*Function|Function[]*/ superclass, /*Object*/ props){ - // summary: + // summary: // Create a feature-rich constructor from compact notation // className: // The name of the constructor (loosely, a "class") // stored in the "declaredClass" property in the created prototype // superclass: - // May be null, a Function, or an Array of Functions. If an array, + // May be null, a Function, or an Array of Functions. If an array, // the first element is used as the prototypical ancestor and // any following Functions become mixin ancestors. // props: // An object whose properties are copied to the // created prototype. - // Add an instance-initialization function by making it a property + // Add an instance-initialization function by making it a property // named "constructor". // description: // Create a constructor using a compact notation for inheritance and - // prototype extension. + // prototype extension. // // All superclasses (including mixins) must be Functions (not simple Objects). // - // Mixin ancestors provide a type of multiple inheritance. Prototypes of mixin + // Mixin ancestors provide a type of multiple inheritance. Prototypes of mixin // ancestors are copied to the new class: changes to mixin prototypes will // not affect classes to which they have been mixed in. // @@ -2001,11 +2001,11 @@ dojo.declare = function(/*String*/ className, /*Function|Function[]*/ superclass // | someValue: 2, // | // initialization function // | constructor: function(){ - // | this.myComplicatedObject = new ReallyComplicatedObject(); + // | this.myComplicatedObject = new ReallyComplicatedObject(); // | }, // | // other functions - // | someMethod: function(){ - // | doStuff(); + // | someMethod: function(){ + // | doStuff(); // | } // | ); @@ -2061,13 +2061,13 @@ dojo.mixin(dojo.declare, { // we have to make a function, but don't want to close over anything return function(){ this._construct(arguments); }; }, - _core: { + _core: { _construct: function(args){ var c=args.callee, s=c.superclass, ct=s&&s.constructor, m=c.mixin, mct=m&&m.constructor, a=args, ii, fn; // side-effect of = used on purpose here, lint may complain, don't try this at home - if(a[0]){ + if(a[0]){ // FIXME: preambles for each mixin should be allowed - // FIXME: + // FIXME: // should we allow the preamble here NOT to modify the // default args, but instead to act on each mixin // independently of the class instance being constructed @@ -2075,13 +2075,13 @@ dojo.mixin(dojo.declare, { // allow any first argument w/ a "preamble" property to act as a // class preamble (not exclusive of the prototype preamble) - if(/*dojo.isFunction*/((fn = a[0].preamble))){ - a = fn.apply(this, a) || a; + if(/*dojo.isFunction*/((fn = a[0].preamble))){ + a = fn.apply(this, a) || a; } - } + } // prototype preamble if((fn = c.prototype.preamble)){a = fn.apply(this, a) || a;} - // FIXME: + // FIXME: // need to provide an optional prototype-settable // "_explicitSuper" property which disables this // initialize superclass @@ -2156,11 +2156,11 @@ dojo.provide("dojo._base.connect"); dojo._listener = { // create a dispatcher function getDispatcher: function(){ - // following comments pulled out-of-line to prevent cloning them + // following comments pulled out-of-line to prevent cloning them // in the returned function. - // - indices (i) that are really in the array of listeners (ls) will + // - indices (i) that are really in the array of listeners (ls) will // not be in Array.prototype. This is the 'sparse array' trick - // that keeps us safe from libs that take liberties with built-in + // that keeps us safe from libs that take liberties with built-in // objects // - listener is invoked with current scope (this) return function(){ @@ -2170,7 +2170,7 @@ dojo._listener = { // make local copy of listener array so it is immutable during processing var lls; lls = [].concat(ls); - + // invoke listeners after target function for(var i in lls){ if(!(i in ap)){ @@ -2184,12 +2184,12 @@ dojo._listener = { // add a listener to an object add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){ // Whenever 'method' is invoked, 'listener' will have the same scope. - // Trying to supporting a context object for the listener led to - // complexity. + // Trying to supporting a context object for the listener led to + // complexity. // Non trivial to provide 'once' functionality here // because listener could be the result of a dojo.hitch call, // in which case two references to the same hitch target would not - // be equivalent. + // be equivalent. source = source || dojo.global; // The source method is either null, a dispatcher, or some other function var f = source[method]; @@ -2199,15 +2199,15 @@ dojo._listener = { // original target function is special d.target = f; // dispatcher holds a list of listeners - d._listeners = []; + d._listeners = []; // redirect source to dispatcher f = source[method] = d; } - // The contract is that a handle is returned that can - // identify this listener for disconnect. + // The contract is that a handle is returned that can + // identify this listener for disconnect. // - // The type of the handle is private. Here is it implemented as Integer. - // DOM event code has this same contract but handle is Function + // The type of the handle is private. Here is it implemented as Integer. + // DOM event code has this same contract but handle is Function // in non-IE browsers. // // We could have separate lists of before and after listeners. @@ -2225,19 +2225,19 @@ dojo._listener = { // Multiple delegation for arbitrary methods. -// This unit knows nothing about DOM, -// but we include DOM aware +// This unit knows nothing about DOM, +// but we include DOM aware // documentation and dontFix // argument here to help the autodocs. // Actual DOM aware code is in event.js. -dojo.connect = function(/*Object|null*/ obj, - /*String*/ event, - /*Object|null*/ context, +dojo.connect = function(/*Object|null*/ obj, + /*String*/ event, + /*Object|null*/ context, /*String|Function*/ method, /*Boolean*/ dontFix){ // summary: - // Create a link that calls one function when another executes. + // Create a link that calls one function when another executes. // // description: // Connects method to event, so that after event fires, method @@ -2249,41 +2249,41 @@ dojo.connect = function(/*Object|null*/ obj, // // null arguments may simply be omitted. // - // obj[event] can resolve to a function or undefined (null). + // obj[event] can resolve to a function or undefined (null). // If obj[event] is null, it is assigned a function. // - // The return value is a handle that is needed to + // The return value is a handle that is needed to // remove this connection with dojo.disconnect. // - // obj: - // The source object for the event function. + // obj: + // The source object for the event function. // Defaults to dojo.global if null. - // If obj is a DOM node, the connection is delegated + // If obj is a DOM node, the connection is delegated // to the DOM event manager (unless dontFix is true). // // event: - // String name of the event function in obj. + // String name of the event function in obj. // I.e. identifies a property obj[event]. // - // context: + // context: // The object that method will receive as "this". // // If context is null and method is a function, then method // inherits the context of event. - // - // If method is a string then context must be the source + // + // If method is a string then context must be the source // object object for method (context[method]). If context is null, // dojo.global is used. // // method: - // A function reference, or name of a function in context. - // The function identified by method fires after event does. + // A function reference, or name of a function in context. + // The function identified by method fires after event does. // method receives the same arguments as the event. // See context argument comments for information on method's scope. // // dontFix: - // If obj is a DOM node, set dontFix to true to prevent delegation - // of this connection to the DOM event manager. + // If obj is a DOM node, set dontFix to true to prevent delegation + // of this connection to the DOM event manager. // // example: // When obj.onchange(), do ui.update(): @@ -2332,7 +2332,7 @@ dojo.connect = function(/*Object|null*/ obj, // used by non-browser hostenvs. always overriden by event.js dojo._connect = function(obj, event, context, method){ - var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method)); + var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method)); return [obj, event, h, l]; // Handle } @@ -2370,7 +2370,7 @@ dojo.subscribe = function(/*String*/ topic, /*Object|null*/ context, /*String|Fu // is invoked when topic is published. // example: // | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }); - // | dojo.publish("alerts", [ "read this", "hello world" ]); + // | dojo.publish("alerts", [ "read this", "hello world" ]); // support for 2 argument invocation (omitting context) depends on hitch return [topic, dojo._listener.add(dojo._topics, topic, dojo.hitch(context, method))]; /*Handle*/ @@ -2378,7 +2378,7 @@ dojo.subscribe = function(/*String*/ topic, /*Object|null*/ context, /*String|Fu dojo.unsubscribe = function(/*Handle*/ handle){ // summary: - // Remove a topic listener. + // Remove a topic listener. // handle: // The handle returned from a call to subscribe. // example: @@ -2396,11 +2396,11 @@ dojo.publish = function(/*String*/ topic, /*Array*/ args){ // topic: // The name of the topic to publish. // args: - // An array of arguments. The arguments will be applied + // An array of arguments. The arguments will be applied // to each topic subscriber (as first class parameters, via apply). // example: // | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }; - // | dojo.publish("alerts", [ "read this", "hello world" ]); + // | dojo.publish("alerts", [ "read this", "hello world" ]); // Note that args is an array, which is more efficient vs variable length // argument list. Ideally, var args would be implemented via Array @@ -2411,8 +2411,8 @@ dojo.publish = function(/*String*/ topic, /*Array*/ args){ } } -dojo.connectPublisher = function( /*String*/ topic, - /*Object|null*/ obj, +dojo.connectPublisher = function( /*String*/ topic, + /*Object|null*/ obj, /*String*/ event){ // summary: // Ensure that everytime obj.event() is called, a message is published @@ -2421,11 +2421,11 @@ dojo.connectPublisher = function( /*String*/ topic, // the topic. // topic: // The name of the topic to publish. - // obj: + // obj: // The source object for the event function. Defaults to dojo.global // if null. // event: - // The name of the event function in obj. + // The name of the event function in obj. // I.e. identifies a property obj[event]. // example: // | dojo.connectPublisher("/ajax/start", dojo, "xhrGet"); @@ -2486,7 +2486,7 @@ dojo.Deferred = function(/*Function?*/ canceller){ // The sequence of callbacks is internally represented as a list of // 2-tuples containing the callback/errback pair. For example, the // following call sequence: - // + // // | var d = new dojo.Deferred(); // | d.addCallback(myCallback); // | d.addErrback(myErrback); @@ -2509,7 +2509,7 @@ dojo.Deferred = function(/*Function?*/ canceller){ // * -1: no value yet (initial condition) // * 0: success // * 1: error - // + // // A Deferred will be in the error state if one of the following three // conditions are met: // @@ -2608,7 +2608,7 @@ dojo.Deferred = function(/*Function?*/ canceller){ // | renderDataitem(data[x]); // | } // | d.callback(true); - // | }catch(e){ + // | }catch(e){ // | d.errback(new Error("rendering failed")); // | } // | return d; @@ -2635,7 +2635,7 @@ dojo.Deferred = function(/*Function?*/ canceller){ // | renderDataitem(data[x]); // | } // | d.callback(true); - // | }catch(e){ + // | }catch(e){ // | d.errback(new Error("rendering failed")); // | } // | }, 100); @@ -2689,7 +2689,7 @@ dojo.extend(dojo.Deferred, { })(), cancel: function(){ - // summary: + // summary: // Cancels a Deferred that has not yet received a value, or is // waiting on another Deferred as its value. // description: @@ -2722,7 +2722,7 @@ dojo.extend(dojo.Deferred, { this.results[0].cancel(); } }, - + _resback: function(res){ // summary: @@ -2743,9 +2743,9 @@ dojo.extend(dojo.Deferred, { }, callback: function(res){ - // summary: + // summary: // Begin the callback sequence with a non-error value. - + /* callback or errback should only be called once on a given Deferred. @@ -2755,7 +2755,7 @@ dojo.extend(dojo.Deferred, { }, errback: function(/*Error*/res){ - // summary: + // summary: // Begin the callback sequence with an error result. this._check(); if(!(res instanceof Error)){ @@ -2774,19 +2774,19 @@ dojo.extend(dojo.Deferred, { }, addCallback: function(/*Function|Object*/cb, /*String?*/cbfn /*...*/){ - // summary: + // summary: // Add a single callback to the end of the callback sequence. return this.addCallbacks(dojo.hitch.apply(dojo, arguments)); // dojo.Deferred }, addErrback: function(cb, cbfn){ - // summary: + // summary: // Add a single callback to the end of the callback sequence. return this.addCallbacks(null, dojo.hitch.apply(dojo, arguments)); // dojo.Deferred }, addCallbacks: function(cb, eb){ - // summary: + // summary: // Add separate callback and errback to the end of the callback // sequence. this.chain.push([cb, eb]) @@ -2797,7 +2797,7 @@ dojo.extend(dojo.Deferred, { }, _fire: function(){ - // summary: + // summary: // Used internally to exhaust the callback sequence when a result // is available. var chain = this.chain; @@ -2825,7 +2825,7 @@ dojo.extend(dojo.Deferred, { // inlined from _pause() self.paused--; if( - (self.paused == 0) && + (self.paused == 0) && (self.fired >= 0) ){ self._fire(); @@ -2865,7 +2865,7 @@ dojo.provide("dojo._base.json"); dojo.fromJson = function(/*String*/ json){ // summary: // Parses a [JSON](http://json.org) string to return a JavaScript object. Throws for invalid JSON strings. - // json: + // json: // a string literal of a JSON item, for instance: // `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'` @@ -2899,8 +2899,8 @@ dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _ind // // prettyPrint: // if true, we indent objects and arrays to make the output prettier. - // The variable dojo.toJsonIndentStr is used as the indent string - // -- to use something other than the default (tab), + // The variable dojo.toJsonIndentStr is used as the indent string + // -- to use something other than the default (tab), // change that variable before calling dojo.toJson(). // // _indentStr: @@ -2916,8 +2916,8 @@ dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _ind if(it === null){ return "null"; } - if(dojo.isString(it)){ - return dojo._escapeString(it); + if(dojo.isString(it)){ + return dojo._escapeString(it); } // recurse var recurse = arguments.callee; @@ -2961,7 +2961,7 @@ dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _ind newObj = dojo.json.jsonRegistry.match(it); return recurse(newObj, prettyPrint, nextIndent); }catch(e){ - // + // } // it's a function with no adapter, skip it */ @@ -3001,8 +3001,8 @@ dojo.provide("dojo._base.array"); (function(){ var _getParts = function(arr, obj, cb){ - return [ - dojo.isString(arr) ? arr.split("") : arr, + return [ + dojo.isString(arr) ? arr.split("") : arr, obj || dojo.global, // FIXME: cache the anonymous functions we create here? dojo.isString(cb) ? new Function("item", "index", "array", cb) : cb @@ -3010,7 +3010,7 @@ dojo.provide("dojo._base.array"); }; dojo.mixin(dojo, { - indexOf: function( /*Array*/ array, + indexOf: function( /*Array*/ array, /*Object*/ value, /*Integer?*/ fromIndex, /*Boolean?*/ findLast){ @@ -3063,7 +3063,7 @@ dojo.provide("dojo._base.array"); // | dojo.forEach( // | [ "thinger", "blah", "howdy", 10 ], // | function(item){ - // | + // | // | } // | ); // example: @@ -3071,26 +3071,26 @@ dojo.provide("dojo._base.array"); // | dojo.forEach( // | [ "thinger", "blah", "howdy", 10 ], // | function(item, idx, arr){ - // | + // | // | } // | ); // example: // | // use a scoped object member as the callback - // | + // | // | var obj = { - // | prefix: "logged via obj.callback:", + // | prefix: "logged via obj.callback:", // | callback: function(item){ - // | + // | // | } // | }; - // | + // | // | // specifying the scope function executes the callback in that scope // | dojo.forEach( // | [ "thinger", "blah", "howdy", 10 ], // | obj.callback, // | obj // | ); - // | + // | // | // alternately, we can accomplish the same thing with dojo.hitch() // | dojo.forEach( // | [ "thinger", "blah", "howdy", 10 ], @@ -3103,7 +3103,7 @@ dojo.provide("dojo._base.array"); // FIXME: there are several ways of handilng thisObject. Is // dojo.global always the default context? var _p = _getParts(arr, thisObject, callback); arr = _p[0]; - for(var i=0,l=arr.length; i<l; ++i){ + for(var i=0,l=arr.length; i<l; ++i){ _p[2].call(_p[1], arr[i], i, arr); } }, @@ -3138,7 +3138,7 @@ dojo.provide("dojo._base.array"); // | // returns false // | dojo.every([1, 2, 3, 4], function(item){ return item>1; }); // example: - // | // returns true + // | // returns true // | dojo.every([1, 2, 3, 4], function(item){ return item>0; }); return dojo._everyOrSome(true, arr, callback, thisObject); // Boolean }, @@ -3239,9 +3239,9 @@ dojo.provide("dojo._base.Color"); (function(){ - + var d = dojo; - + dojo.Color = function(/*Array|String|Object*/ color){ // summary: // Takes a named string, hex string, array of rgb or rgba values, @@ -3250,7 +3250,7 @@ dojo.provide("dojo._base.Color"); // // example: // Work with a Color instance: - // | var c = new dojo.Color(); + // | var c = new dojo.Color(); // | c.setColor([0,0,0]); // black // | var hex = c.toHex(); // #000000 // @@ -3259,7 +3259,7 @@ dojo.provide("dojo._base.Color"); // | var color = dojo.style("someNode", "backgroundColor"); // | var n = new dojo.Color(color); // | // adjust the color some - // | n.r *= .5; + // | n.r *= .5; // | // rgb(128, 255, 255); if(color){ this.setColor(color); } }; @@ -3293,8 +3293,8 @@ dojo.provide("dojo._base.Color"); // summary: // Takes a named string, hex string, array of rgb or rgba values, // an object with r, g, b, and a properties, or another `dojo.Color` object - // and sets this color instance to that value. - // + // and sets this color instance to that value. + // // example: // | var c = new dojo.Color(); // no color // | c.setColor("#ededed"); // greyish @@ -3311,7 +3311,7 @@ dojo.provide("dojo._base.Color"); sanitize: function(){ // summary: // makes sure that the object has correct attributes - // description: + // description: // the default implementation does nothing, include dojo.colors to // augment it to real checks return this; // dojo.Color @@ -3320,8 +3320,8 @@ dojo.provide("dojo._base.Color"); // summary: Returns 3 component array of rgb values // // example: - // | var c = new dojo.Color("#000000"); - // | // [0,0,0] + // | var c = new dojo.Color("#000000"); + // | // [0,0,0] var t = this; return [t.r, t.g, t.b]; // Array }, @@ -3333,7 +3333,7 @@ dojo.provide("dojo._base.Color"); toHex: function(){ // summary: Returns a css color string in hexadecimal representation // - // example: + // example: // | // #000000 var arr = d.map(["r", "g", "b"], function(x){ var s = this[x].toString(16); @@ -3357,12 +3357,12 @@ dojo.provide("dojo._base.Color"); }); dojo.blendColors = function( - /*dojo.Color*/ start, - /*dojo.Color*/ end, + /*dojo.Color*/ start, + /*dojo.Color*/ end, /*Number*/ weight, /*dojo.Color?*/ obj ){ - // summary: + // summary: // Blend colors end and start with weight from 0 to 1, 0.5 being a 50/50 blend, // can reuse a previously allocated dojo.Color object for the result var t = obj || new d.Color(); @@ -3486,9 +3486,9 @@ dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocu dojo.doc = globalDocument; }; -dojo.withGlobal = function( /*Object*/globalObject, - /*Function*/callback, - /*Object?*/thisObject, +dojo.withGlobal = function( /*Object*/globalObject, + /*Function*/callback, + /*Object?*/thisObject, /*Array?*/cbArguments){ // summary: // Invoke callback with globalObject as dojo.global and @@ -3509,9 +3509,9 @@ dojo.withGlobal = function( /*Object*/globalObject, } } -dojo.withDoc = function( /*DocumentElement*/documentObject, - /*Function*/callback, - /*Object?*/thisObject, +dojo.withDoc = function( /*DocumentElement*/documentObject, + /*Function*/callback, + /*Object?*/thisObject, /*Array?*/cbArguments){ // summary: // Invoke callback with documentObject as dojo.doc. @@ -3538,7 +3538,7 @@ dojo.withDoc = function( /*DocumentElement*/documentObject, if(oldLtr !== undefined){ dojo._bodyLtr = oldLtr; } } }; - + } @@ -3553,18 +3553,18 @@ dojo.provide("dojo._base.event"); // DOM event listener machinery var del = (dojo._event_listener = { add: function(/*DOMNode*/node, /*String*/name, /*Function*/fp){ - if(!node){return;} + if(!node){return;} name = del._normalizeEventName(name); fp = del._fixCallback(name, fp); var oname = name; if( - !dojo.isIE && + !dojo.isIE && (name == "mouseenter" || name == "mouseleave") ){ var ofp = fp; //oname = name; name = (name == "mouseenter") ? "mouseover" : "mouseout"; - fp = function(e){ + fp = function(e){ if(dojo.isFF <= 2) { // check tagName to fix a FF2 bug with invalid nodes (hidden child DIV of INPUT) // which causes isDescendant to return false which causes @@ -3574,7 +3574,7 @@ dojo.provide("dojo._base.event"); } if(!dojo.isDescendant(e.relatedTarget, node)){ // e.type = oname; // FIXME: doesn't take? SJM: event.type is generally immutable. - return ofp.call(this, e); + return ofp.call(this, e); } } } @@ -3615,7 +3615,7 @@ dojo.provide("dojo._base.event"); }, _fixEvent: function(evt, sender){ // _fixCallback only attaches us to keypress. - // Switch on evt.type anyway because we might + // Switch on evt.type anyway because we might // be called directly from dojo.fixEvent. switch(evt.type){ case "keypress": @@ -3631,25 +3631,25 @@ dojo.provide("dojo._base.event"); // For IE and Safari: some ctrl-key combinations (mostly w/punctuation) do not emit a char code in IE // we map those virtual key codes to ascii here // not valid for all (non-US) keyboards, so maybe we shouldn't bother - _punctMap: { - 106:42, - 111:47, - 186:59, - 187:43, - 188:44, - 189:45, - 190:46, - 191:47, - 192:96, - 219:91, - 220:92, - 221:93, - 222:39 + _punctMap: { + 106:42, + 111:47, + 186:59, + 187:43, + 188:44, + 189:45, + 190:46, + 191:47, + 192:96, + 219:91, + 220:92, + 221:93, + 222:39 } }); // DOM events - + dojo.fixEvent = function(/*Event*/evt, /*DOMNode*/sender){ // summary: // normalizes properties on the event object including event @@ -3674,7 +3674,7 @@ dojo.provide("dojo._base.event"); // the default listener to use on dontFix nodes, overriden for IE var node_listener = dojo._listener; - + // Unify connect and event listeners dojo._connect = function(obj, event, context, method, dontFix){ // FIXME: need a more strict test @@ -3685,7 +3685,7 @@ dojo.provide("dojo._base.event"); // create a listener var h = l.add(obj, event, dojo.hitch(context, method)); // formerly, the disconnect package contained "l" directly, but if client code - // leaks the disconnect package (by connecting it to a node), referencing "l" + // leaks the disconnect package (by connecting it to a node), referencing "l" // compounds the problem. // instead we return a listener id, which requires custom _disconnect below. // return disconnect package @@ -3762,9 +3762,9 @@ dojo.provide("dojo._base.event"); NUM_LOCK: 144, SCROLL_LOCK: 145 }; - + // IE event normalization - if(dojo.isIE){ + if(dojo.isIE){ var _trySetKeyCode = function(e, code){ try{ // squelch errors when keyCode is read-only @@ -3782,7 +3782,7 @@ dojo.provide("dojo._base.event"); if(!dojo.config._allow_leaks){ // custom listener that handles leak protection for DOM events node_listener = iel = dojo._ie_listener = { - // support handler indirection: event handler functions are + // support handler indirection: event handler functions are // referenced here. Event dispatchers hold only indices. handlers: [], // add a listener to an object @@ -3835,7 +3835,7 @@ dojo.provide("dojo._base.event"); }, remove: function(/*DOMNode*/node, /*String*/event, /*Handle*/handle){ event = del._normalizeEventName(event); - iel.remove(node, event, handle); + iel.remove(node, event, handle); if(event=="onkeypress"){ var kd = node.onkeydown; if(--kd._stealthKeydownRefs <= 0){ @@ -3859,11 +3859,11 @@ dojo.provide("dojo._base.event"); // sender: node to treat as "currentTarget" if(!evt){ var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window; - evt = w.event; + evt = w.event; } if(!evt){return(evt);} - evt.target = evt.srcElement; - evt.currentTarget = (sender || evt.srcElement); + evt.target = evt.srcElement; + evt.currentTarget = (sender || evt.srcElement); evt.layerX = evt.offsetX; evt.layerY = evt.offsetY; // FIXME: scroll position query is duped from dojo.html to @@ -3876,10 +3876,10 @@ dojo.provide("dojo._base.event"); var offset = dojo._getIeDocumentElementOffset(); evt.pageX = evt.clientX + dojo._fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x; evt.pageY = evt.clientY + (docBody.scrollTop || 0) - offset.y; - if(evt.type == "mouseover"){ + if(evt.type == "mouseover"){ evt.relatedTarget = evt.fromElement; } - if(evt.type == "mouseout"){ + if(evt.type == "mouseout"){ evt.relatedTarget = evt.toElement; } evt.stopPropagation = del._stopPropagation; @@ -3923,12 +3923,12 @@ dojo.provide("dojo._base.event"); var c = unprintable ? 0 : k; if(evt.ctrlKey){ if(k==3 || k==13){ - return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively - }else if(c>95 && c<106){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ c -= 48; // map CTRL-[numpad 0-9] to ASCII - }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ + }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ c += 32; // map CTRL-[A-Z] to lowercase - }else{ + }else{ c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII } } @@ -3942,13 +3942,13 @@ dojo.provide("dojo._base.event"); }, // Called in Event scope _stopPropagation: function(){ - this.cancelBubble = true; + this.cancelBubble = true; }, _preventDefault: function(){ // Setting keyCode to 0 is the only way to prevent certain keypresses (namely // ctrl-combinations that correspond to menu accelerator keys). // Otoh, it prevents upstream listeners from getting this information - // Try to split the difference here by clobbering keyCode only for ctrl + // Try to split the difference here by clobbering keyCode only for ctrl // combinations. If you still need to access the key upstream, bubbledKeyCode is // provided as a workaround. this.bubbledKeyCode = this.keyCode; @@ -3956,7 +3956,7 @@ dojo.provide("dojo._base.event"); this.returnValue = false; } }); - + // override stopEvent for IE dojo.stopEvent = function(evt){ evt = evt || window.event; @@ -3964,18 +3964,18 @@ dojo.provide("dojo._base.event"); del._preventDefault.call(evt); } } - + del._synthesizeEvent = function(evt, props){ var faux = dojo.mixin({}, evt, props); del._setKeyChar(faux); - // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); + // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); // but it throws an error when preventDefault is invoked on Safari // does Event.preventDefault not support "apply" on Safari? - faux.preventDefault = function(){ evt.preventDefault(); }; - faux.stopPropagation = function(){ evt.stopPropagation(); }; + faux.preventDefault = function(){ evt.preventDefault(); }; + faux.stopPropagation = function(){ evt.stopPropagation(); }; return faux; } - + // Opera event normalization if(dojo.isOpera){ dojo.mixin(del, { @@ -3999,7 +3999,7 @@ dojo.provide("dojo._base.event"); } }); } - + // Webkit event normalization if(dojo.isWebKit){ del._add = del.add; @@ -4025,12 +4025,12 @@ dojo.provide("dojo._base.event"); var c = unprintable ? 0 : k; if(evt.ctrlKey){ if(k==3 || k==13){ - return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively - }else if(c>95 && c<106){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ c -= 48; // map CTRL-[numpad 0-9] to ASCII - }else if(!evt.shiftKey && c>=65 && c<=90){ + }else if(!evt.shiftKey && c>=65 && c<=90){ c += 32; // map CTRL-[A-Z] to lowercase - }else{ + }else{ c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII } } @@ -4117,7 +4117,7 @@ try{ /*===== dojo.byId = function(id, doc){ // summary: - // Returns DOM node with matching `id` attribute or `null` + // Returns DOM node with matching `id` attribute or `null` // if not found, similar to "$" function in another library. // If `id` is a DomNode, this function is a no-op. // @@ -4128,7 +4128,7 @@ dojo.byId = function(id, doc){ // Document to work in. Defaults to the current value of // dojo.doc. Can be used to retrieve // node references from other documents. - // + // // example: // Look up a node by ID: // | var n = dojo.byId("foo"); @@ -4139,8 +4139,8 @@ dojo.byId = function(id, doc){ // // example: // Allow string or DomNode references to be passed to a custom function: - // | var foo = function(nodeOrId){ - // | nodeOrId = dojo.byId(nodeOrId); + // | var foo = function(nodeOrId){ + // | nodeOrId = dojo.byId(nodeOrId); // | // ... more stuff // | } =====*/ @@ -4150,7 +4150,7 @@ if(dojo.isIE || dojo.isOpera){ if(dojo.isString(id)){ var _d = doc || dojo.doc; var te = _d.getElementById(id); - // attributes.id.value is better than just id in case the + // attributes.id.value is better than just id in case the // user has a name=id inside a form if(te && (te.attributes.id.value == id || te.id == id)){ return te; @@ -4188,7 +4188,7 @@ if(dojo.isIE || dojo.isOpera){ d.addOnWindowUnload(function(){ _destroyContainer = null; //prevent IE leak }); - + /*===== dojo._destroyElement = function(node){ // summary: Existing alias for `dojo.destroy`. Deprecated, will be removed in 2.0 @@ -4202,7 +4202,7 @@ if(dojo.isIE || dojo.isOpera){ // description: // Removes a node from its parent, clobbering it and all of its // children. Function only works with DomNodes, and returns nothing. - // + // // node: // A String ID or DomNode reference of the element to be destroyed // @@ -4213,7 +4213,7 @@ if(dojo.isIE || dojo.isOpera){ // example: // Destroy all nodes in a list by reference: // | dojo.query(".someNode").forEach(dojo.destroy); - + node = d.byId(node); try{ if(!_destroyContainer || _destroyContainer.ownerDocument != node.ownerDocument){ @@ -4221,7 +4221,7 @@ if(dojo.isIE || dojo.isOpera){ } _destroyContainer.appendChild(node.parentNode ? node.parentNode.removeChild(node) : node); // NOTE: see http://trac.dojotoolkit.org/ticket/2931. This may be a bug and not a feature - _destroyContainer.innerHTML = ""; + _destroyContainer.innerHTML = ""; }catch(e){ /* squelch */ } @@ -4250,7 +4250,7 @@ if(dojo.isIE || dojo.isOpera){ // node: // id or reference to node // selectable: - // state to put the node in. false indicates unselectable, true + // state to put the node in. false indicates unselectable, true // allows selection. node = d.byId(node); if(d.isMozilla){ @@ -4297,7 +4297,7 @@ if(dojo.isIE || dojo.isOpera){ // // position: String|Number? // string noting the position of node relative to refNode or a - // number indicating the location in the childNodes collection of refNode. + // number indicating the location in the childNodes collection of refNode. // Accepted string values are: // | * before // | * after @@ -4312,7 +4312,7 @@ if(dojo.isIE || dojo.isOpera){ // Returned values is the first argument resolved to a DOM node. // // .place() is also a method of `dojo.NodeList`, allowing `dojo.query` node lookups. - // + // // example: // Place a node by string id as the last child of another node by string id: // | dojo.place("someNode", "anotherNode"); @@ -4350,7 +4350,7 @@ if(dojo.isIE || dojo.isOpera){ break; case "replace": refNode.parentNode.replaceChild(node, refNode); - break; + break; case "only": d.empty(refNode); refNode.appendChild(node); @@ -4371,14 +4371,14 @@ if(dojo.isIE || dojo.isOpera){ // Box functions will assume this model. // On IE/Opera, BORDER_BOX will be set if the primary document is in quirks mode. // Can be set to change behavior of box setters. - + // can be either: // "border-box" // "content-box" (default) dojo.boxModel = "content-box"; - + // We punt per-node box mode testing completely. - // If anybody cares, we can provide an additional (optional) unit + // If anybody cares, we can provide an additional (optional) unit // that overrides existing code to include per-node box sensitivity. // Opera documentation claims that Opera 9 uses border-box in BackCompat mode. @@ -4391,19 +4391,19 @@ if(dojo.isIE || dojo.isOpera){ // client code may have to adjust if compatMode varies across iframes d.boxModel = _dcm == "BackCompat" || _dcm == "QuirksMode" || d.isIE < 6 ? "border-box" : "content-box"; // FIXME: remove IE < 6 support? } - + // ============================= // Style Functions // ============================= - + // getComputedStyle drives most of the style code. // Wherever possible, reuse the returned object. // - // API functions below that need to access computed styles accept an + // API functions below that need to access computed styles accept an // optional computedStyle parameter. // If this parameter is omitted, the functions will call getComputedStyle themselves. - // This way, calling code can access computedStyle once, and then pass the reference to - // multiple API functions. + // This way, calling code can access computedStyle once, and then pass the reference to + // multiple API functions. /*===== dojo.getComputedStyle = function(node){ @@ -4412,7 +4412,7 @@ if(dojo.isIE || dojo.isOpera){ // // description: // Gets a "computed style" object which can be used to gather - // information about the current state of the rendered node. + // information about the current state of the rendered node. // // Note that this may behave differently on different browsers. // Values may have different formats and value encodings across @@ -4441,7 +4441,7 @@ if(dojo.isIE || dojo.isOpera){ // Although we normally eschew argument validation at this // level, here we test argument 'node' for (duck)type, // by testing nodeType, ecause 'document' is the 'parentNode' of 'body' - // it is frequently sent to this function even + // it is frequently sent to this function even // though it is not Element. var gcs; if(d.isWebKit){ @@ -4450,13 +4450,13 @@ if(dojo.isIE || dojo.isOpera){ if(node.nodeType == 1){ var dv = node.ownerDocument.defaultView; s = dv.getComputedStyle(node, null); - if(!s && node.style){ - node.style.display = ""; + if(!s && node.style){ + node.style.display = ""; s = dv.getComputedStyle(node, null); } } return s || {}; - }; + }; }else if(d.isIE){ gcs = function(node){ // IE (as of 7) doesn't expose Element like sane browsers @@ -4464,7 +4464,7 @@ if(dojo.isIE || dojo.isOpera){ }; }else{ gcs = function(node){ - return node.nodeType == 1 ? + return node.nodeType == 1 ? node.ownerDocument.defaultView.getComputedStyle(node, null) : {}; }; } @@ -4474,7 +4474,7 @@ if(dojo.isIE || dojo.isOpera){ d._toPixelValue = function(element, value){ // style values can be floats, client code may want // to round for integer pixels. - return parseFloat(value) || 0; + return parseFloat(value) || 0; }; }else{ d._toPixelValue = function(element, avalue){ @@ -4521,7 +4521,7 @@ if(dojo.isIE || dojo.isOpera){ =====*/ var astr = "DXImageTransform.Microsoft.Alpha"; - var af = function(n, f){ + var af = function(n, f){ try{ return n.filters.item(astr); }catch(e){ @@ -4529,14 +4529,14 @@ if(dojo.isIE || dojo.isOpera){ } } - dojo._getOpacity = + dojo._getOpacity = d.isIE ? function(node){ try{ return af(node).Opacity / 100; // Number }catch(e){ return 1; // Number } - } : + } : function(node){ return gcs(node).opacity; }; @@ -4556,7 +4556,7 @@ if(dojo.isIE || dojo.isOpera){ } =====*/ - dojo._setOpacity = + dojo._setOpacity = d.isIE ? function(/*DomNode*/node, /*Number*/opacity){ var ov = opacity * 100; node.style.zoom = 1.0; @@ -4577,7 +4577,7 @@ if(dojo.isIE || dojo.isOpera){ }); } return opacity; - } : + } : function(node, opacity){ return node.style.opacity = opacity; }; @@ -4610,11 +4610,11 @@ if(dojo.isIE || dojo.isOpera){ var _floatStyle = d.isIE ? "styleFloat" : "cssFloat", _floatAliases = { "cssFloat": _floatStyle, "styleFloat": _floatStyle, "float": _floatStyle } ; - + // public API - - dojo.style = function( /*DomNode|String*/ node, - /*String?|Object?*/ style, + + dojo.style = function( /*DomNode|String*/ node, + /*String?|Object?*/ style, /*String?*/ value){ // summary: // Accesses styles on a node. If 2 arguments are @@ -4627,7 +4627,7 @@ if(dojo.isIE || dojo.isOpera){ // like "borderBottomWidth" instead of "border" since compound values like // "border" are not necessarily reflected as expected. // If you want to get node dimensions, use dojo.marginBox() or - // dojo.contentBox(). + // dojo.contentBox(). // node: // id or reference to node to get/set style for // style: @@ -4707,18 +4707,18 @@ if(dojo.isIE || dojo.isOpera){ // fitting. // // * l/t = left/top padding (respectively) - // * w = the total of the left and right padding + // * w = the total of the left and right padding // * h = the total of the top and bottom padding // - // If 'node' has position, l/t forms the origin for child nodes. + // If 'node' has position, l/t forms the origin for child nodes. // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var - s = computedStyle||gcs(n), - l = px(n, s.paddingLeft), + var + s = computedStyle||gcs(n), + l = px(n, s.paddingLeft), t = px(n, s.paddingTop); - return { + return { l: l, t: t, w: l+px(n, s.paddingRight), @@ -4738,12 +4738,12 @@ if(dojo.isIE || dojo.isOpera){ // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var + var ne = "none", - s = computedStyle||gcs(n), + s = computedStyle||gcs(n), bl = (s.borderLeftStyle != ne ? px(n, s.borderLeftWidth) : 0), bt = (s.borderTopStyle != ne ? px(n, s.borderTopWidth) : 0); - return { + return { l: bl, t: bt, w: bl + (s.borderRightStyle!=ne ? px(n, s.borderRightWidth) : 0), @@ -4763,11 +4763,11 @@ if(dojo.isIE || dojo.isOpera){ // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var - s = computedStyle||gcs(n), + var + s = computedStyle||gcs(n), p = d._getPadExtents(n, s), b = d._getBorderExtents(n, s); - return { + return { l: p.l + b.l, t: p.t + b.t, w: p.w + b.w, @@ -4787,22 +4787,22 @@ if(dojo.isIE || dojo.isOpera){ // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var - s = computedStyle||gcs(n), + var + s = computedStyle||gcs(n), l = px(n, s.marginLeft), t = px(n, s.marginTop), r = px(n, s.marginRight), b = px(n, s.marginBottom); if(d.isWebKit && (s.position != "absolute")){ // FIXME: Safari's version of the computed right margin - // is the space between our right edge and the right edge - // of our offsetParent. - // What we are looking for is the actual margin value as + // is the space between our right edge and the right edge + // of our offsetParent. + // What we are looking for is the actual margin value as // determined by CSS. // Hack solution is to assume left/right margins are the same. r = l; } - return { + return { l: l, t: t, w: l+r, @@ -4816,15 +4816,15 @@ if(dojo.isIE || dojo.isOpera){ // They do *not* work for display: inline objects that have padding styles // because the user agent ignores padding (it's bogus styling in any case) // - // Be careful with IMGs because they are inline or block depending on + // Be careful with IMGs because they are inline or block depending on // browser and browser mode. - // Although it would be easier to read, there are not separate versions of + // Although it would be easier to read, there are not separate versions of // _getMarginBox for each browser because: // 1. the branching is not expensive // 2. factoring the shared code wastes cycles (function call overhead) // 3. duplicating the shared code wastes bytes - + dojo._getMarginBox = function(/*DomNode*/node, /*Object*/computedStyle){ // summary: // returns an object that encodes the width, height, left and top @@ -4859,14 +4859,14 @@ if(dojo.isIE || dojo.isOpera){ t -= be.t; } } - return { - l: l, - t: t, - w: node.offsetWidth + me.w, - h: node.offsetHeight + me.h + return { + l: l, + t: t, + w: node.offsetWidth + me.w, + h: node.offsetHeight + me.h }; } - + dojo._getContentBox = function(node, computedStyle){ // summary: // Returns an object that encodes the width, height, left and top @@ -4878,33 +4878,33 @@ if(dojo.isIE || dojo.isOpera){ var s = computedStyle || gcs(node), pe = d._getPadExtents(node, s), be = d._getBorderExtents(node, s), - w = node.clientWidth, + w = node.clientWidth, h ; if(!w){ w = node.offsetWidth, h = node.offsetHeight; }else{ - h = node.clientHeight, be.w = be.h = 0; + h = node.clientHeight, be.w = be.h = 0; } // On Opera, offsetLeft includes the parent's border if(d.isOpera){ pe.l += be.l; pe.t += be.t; }; - return { - l: pe.l, - t: pe.t, - w: w - pe.w - be.w, + return { + l: pe.l, + t: pe.t, + w: w - pe.w - be.w, h: h - pe.h - be.h }; } dojo._getBorderBox = function(node, computedStyle){ - var s = computedStyle || gcs(node), + var s = computedStyle || gcs(node), pe = d._getPadExtents(node, s), cb = d._getContentBox(node, s) ; - return { - l: cb.l - pe.l, - t: cb.t - pe.t, - w: cb.w + pe.w, + return { + l: cb.l - pe.l, + t: cb.t - pe.t, + w: cb.w + pe.w, h: cb.h + pe.h }; } @@ -4918,14 +4918,14 @@ if(dojo.isIE || dojo.isOpera){ // Beware of display: inline objects that have padding styles // because the user agent ignores padding (it's a bogus setup anyway) // - // Be careful with IMGs because they are inline or block depending on + // Be careful with IMGs because they are inline or block depending on // browser and browser mode. - // + // // Elements other than DIV may have special quirks, like built-in // margins or padding, or values not detectable via computedStyle. - // In particular, margins on TABLE do not seems to appear + // In particular, margins on TABLE do not seems to appear // at all in computedStyle on Mozilla. - + dojo._setBox = function(/*DomNode*/node, /*Number?*/l, /*Number?*/t, /*Number?*/w, /*Number?*/h, /*String?*/u){ // summary: // sets width/height/left/top in the current (native) box-model @@ -4947,21 +4947,21 @@ if(dojo.isIE || dojo.isOpera){ dojo._isButtonTag = function(/*DomNode*/node) { // summary: // True if the node is BUTTON or INPUT.type="button". - return node.tagName == "BUTTON" + return node.tagName == "BUTTON" || node.tagName=="INPUT" && node.getAttribute("type").toUpperCase() == "BUTTON"; // boolean } - + dojo._usesBorderBox = function(/*DomNode*/node){ - // summary: + // summary: // True if the node uses border-box layout. // We could test the computed style of node to see if a particular box // has been specified, but there are details and we choose not to bother. - + // TABLE and BUTTON (and INPUT type=button) are always border-box by default. // If you have assigned a different box to either one via CSS then // box functions will break. - + var n = node.tagName; return d.boxModel=="border-box" || n=="TABLE" || d._isButtonTag(node); // boolean } @@ -4978,8 +4978,8 @@ if(dojo.isIE || dojo.isOpera){ d._setBox(node, NaN, NaN, widthPx, heightPx); } - dojo._setMarginBox = function(/*DomNode*/node, /*Number?*/leftPx, /*Number?*/topPx, - /*Number?*/widthPx, /*Number?*/heightPx, + dojo._setMarginBox = function(/*DomNode*/node, /*Number?*/leftPx, /*Number?*/topPx, + /*Number?*/widthPx, /*Number?*/heightPx, /*Object*/computedStyle){ // summary: // sets the size of the node's margin box and placement @@ -4988,7 +4988,7 @@ if(dojo.isIE || dojo.isOpera){ // you. var s = computedStyle || gcs(node), - // Some elements have special padding, margin, and box-model settings. + // Some elements have special padding, margin, and box-model settings. // To use box functions you may need to set padding, margin explicitly. // Controlling box-model is harder, in a pinch you might set dojo.boxModel. bb = d._usesBorderBox(node), @@ -5009,15 +5009,15 @@ if(dojo.isIE || dojo.isOpera){ if(heightPx >= 0){ heightPx = Math.max(heightPx - pb.h - mb.h, 0); } d._setBox(node, leftPx, topPx, widthPx, heightPx); } - + var _nilExtents = { l:0, t:0, w:0, h:0 }; // public API - + dojo.marginBox = function(/*DomNode|String*/node, /*Object?*/box){ // summary: // Getter/setter for the margin-box of node. - // description: + // description: // Returns an object in the expected format of box (regardless // if box is passed). The object might look like: // `{ l: 50, t: 200, w: 300: h: 150 }` @@ -5055,11 +5055,11 @@ if(dojo.isIE || dojo.isOpera){ var n = d.byId(node), s = gcs(n), b = box; return !b ? d._getContentBox(n, s) : d._setContentSize(n, b.w, b.h, s); // Object } - + // ============================= - // Positioning + // Positioning // ============================= - + var _sumAncestorProperties = function(node, prop){ if(!(node = (node||0).parentNode)){return 0} var val, retVal = 0, _b = d.body(); @@ -5080,7 +5080,7 @@ if(dojo.isIE || dojo.isOpera){ } dojo._docScroll = function(){ - var + var _b = d.body(), _w = d.global, de = d.doc.documentElement; @@ -5089,13 +5089,13 @@ if(dojo.isIE || dojo.isOpera){ x: (_w.pageXOffset || d._fixIeBiDiScrollLeft(de.scrollLeft) || _b.scrollLeft || 0) }; }; - + dojo._isBodyLtr = function(){ //FIXME: could check html and body tags directly instead of computed style? need to ignore case, accept empty values return ("_bodyLtr" in d) ? d._bodyLtr : - d._bodyLtr = gcs(d.body()).direction == "ltr"; // Boolean + d._bodyLtr = gcs(d.body()).direction == "ltr"; // Boolean } - + dojo._getIeDocumentElementOffset = function(){ // summary // The following values in IE contain an offset: @@ -5116,7 +5116,7 @@ if(dojo.isIE || dojo.isOpera){ if(d.isIE < 7){ return { x: d._isBodyLtr() || window.parent == window ? - de.clientLeft : de.offsetWidth - de.clientWidth - de.clientLeft, + de.clientLeft : de.offsetWidth - de.clientWidth - de.clientLeft, y: de.clientTop }; // Object }else if(d.isIE < 8){ return {x: de.getBoundingClientRect().left, y: de.getBoundingClientRect().top}; @@ -5128,7 +5128,7 @@ if(dojo.isIE || dojo.isOpera){ } }; - + dojo._fixIeBiDiScrollLeft = function(/*Integer*/ scrollLeft){ // In RTL direction, scrollLeft should be a negative value, but IE < 8 // returns a positive one. All codes using documentElement.scrollLeft @@ -5157,7 +5157,7 @@ if(dojo.isIE || dojo.isOpera){ // FIXME: need to decide in the brave-new-world if we're going to be // margin-box or border-box. - + // targetBoxType == "border-box" var db = d.body(), dh = d.body().parentNode, ret; if(node["getBoundingClientRect"]){ @@ -5187,7 +5187,7 @@ if(dojo.isIE || dojo.isOpera){ if(node["offsetParent"]){ ret.x -= _sumAncestorProperties(node, "scrollLeft"); ret.y -= _sumAncestorProperties(node, "scrollTop"); - + var curnode = node; do{ var n = curnode.offsetLeft, @@ -5264,7 +5264,7 @@ if(dojo.isIE || dojo.isOpera){ // ============================= var ieLT8 = d.isIE < 8; - + var _fixAttrName = function(/*String*/name){ switch(name.toLowerCase()){ // Internet Explorer will only set or remove tabindex/readonly @@ -5337,7 +5337,7 @@ if(dojo.isIE || dojo.isOpera){ // Handles normalized getting and setting of attributes on DOM // Nodes. If 2 arguments are passed, and a the second argumnt is a // string, acts as a getter. - // + // // If a third argument is passed, or if the second argumnt is a // map of attributes, acts as a setter. // @@ -5410,7 +5410,7 @@ if(dojo.isIE || dojo.isOpera){ // | // | // though shorter to use `dojo.style` in this case: // | dojo.style("someNode", obj); - + node = d.byId(node); var args = arguments.length; if(args == 2 && !d.isString(name)){ @@ -5483,21 +5483,21 @@ if(dojo.isIE || dojo.isOpera){ // the name of the attribute to remove d.byId(node).removeAttribute(_fixAttrName(name)); } - + dojo.create = function(tag, attrs, refNode, pos){ // summary: Create an element, allowing for optional attribute decoration - // and placement. + // and placement. // // description: // A DOM Element creation function. A shorthand method for creating a node or - // a fragment, and allowing for a convenient optional attribute setting step, + // a fragment, and allowing for a convenient optional attribute setting step, // as well as an optional DOM placement reference. //| // Attributes are set by passing the optional object through `dojo.attr`. - // See `dojo.attr` for noted caveats and nuances, and API if applicable. + // See `dojo.attr` for noted caveats and nuances, and API if applicable. //| - // Placement is done via `dojo.place`, assuming the new node to be the action - // node, passing along the optional reference node and position. + // Placement is done via `dojo.place`, assuming the new node to be the action + // node, passing along the optional reference node and position. // // tag: String|DomNode // A string of the element to create (eg: "div", "a", "p", "li", "script", "br"), @@ -5512,7 +5512,7 @@ if(dojo.isIE || dojo.isOpera){ // Optional reference node. Used by `dojo.place` to place the newly created // node somewhere in the dom relative to refNode. Can be a DomNode reference // or String ID of a node. - // + // // pos: String? // Optional positional reference. Defaults to "last" by way of `dojo.place`, // though can be set to "first","after","before","last", "replace" or "only" @@ -5534,9 +5534,9 @@ if(dojo.isIE || dojo.isOpera){ // | var n = dojo.create("div", null, dojo.body()); // // example: - // Create an UL, and populate it with LI's. Place the list as the first-child of a + // Create an UL, and populate it with LI's. Place the list as the first-child of a // node with id="someId": - // | var ul = dojo.create("ul", null, "someId", "first"); + // | var ul = dojo.create("ul", null, "someId", "first"); // | var items = ["one", "two", "three", "four"]; // | dojo.forEach(items, function(data){ // | dojo.create("li", { innerHTML: data }, ul); @@ -5554,7 +5554,7 @@ if(dojo.isIE || dojo.isOpera){ // | .place("#someNode"); // redundant, but cleaner. var doc = d.doc; - if(refNode){ + if(refNode){ refNode = d.byId(refNode); doc = refNode.ownerDocument; } @@ -5565,7 +5565,7 @@ if(dojo.isIE || dojo.isOpera){ if(refNode){ d.place(tag, refNode, pos); } return tag; // DomNode } - + /*===== dojo.empty = function(node){ // summary: @@ -5582,7 +5582,7 @@ if(dojo.isIE || dojo.isOpera){ } =====*/ - d.empty = + d.empty = d.isIE ? function(node){ node = d.byId(node); for(var c; c = node.lastChild;){ // intentional assignment @@ -5671,7 +5671,7 @@ if(dojo.isIE || dojo.isOpera){ if(master.childNodes.length == 1){ return master.removeChild(master.firstChild); // DOMNode } - + // return multiple nodes as a document fragment df = doc.createDocumentFragment(); while(fc = master.firstChild){ // intentional assignment @@ -5688,17 +5688,17 @@ if(dojo.isIE || dojo.isOpera){ dojo.hasClass = function(/*DomNode|String*/node, /*String*/classStr){ // summary: // Returns whether or not the specified classes are a portion of the - // class list currently applied to the node. + // class list currently applied to the node. // - // node: + // node: // String ID or DomNode reference to check the class for. // // classStr: // A string class name to look for. - // + // // example: // | if(dojo.hasClass("someNode","aSillyClassName")){ ... } - + return ((" "+ d.byId(node)[_className] +" ").indexOf(" "+ classStr +" ") >= 0); // Boolean }; @@ -5722,7 +5722,7 @@ if(dojo.isIE || dojo.isOpera){ // example: // Available in `dojo.NodeList` for multiple additions // | dojo.query("ul > li").addClass("firstLevel"); - + node = d.byId(node); var cls = node[_className]; if((" "+ cls +" ").indexOf(" " + classStr + " ") < 0){ @@ -5731,8 +5731,8 @@ if(dojo.isIE || dojo.isOpera){ }; dojo.removeClass = function(/*DomNode|String*/node, /*String*/classStr){ - // summary: Removes the specified classes from node. No `dojo.hasClass` - // check is required. + // summary: Removes the specified classes from node. No `dojo.hasClass` + // check is required. // // node: String ID or DomNode reference to remove the class from. // @@ -5744,7 +5744,7 @@ if(dojo.isIE || dojo.isOpera){ // example: // Available in `dojo.NodeList` for multiple removal // | dojo.query(".foo").removeClass("foo"); - + node = d.byId(node); var t = d.trim((" " + node[_className] + " ").replace(" " + classStr + " ", " ")); if(node[_className] != t){ node[_className] = t; } @@ -5767,7 +5767,7 @@ if(dojo.isIE || dojo.isOpera){ // example: // Available in `dojo.NodeList` for multiple toggles // | dojo.query(".toggleMe").toggleClass("toggleMe"); - + if(condition === undefined){ condition = !d.hasClass(node, classStr); } @@ -5789,7 +5789,7 @@ dojo.provide("dojo._base.NodeList"); var d = dojo; var ap = Array.prototype, aps = ap.slice, apc = ap.concat; - + var tnl = function(a){ // decorate an array to make it look like a NodeList a.constructor = d.NodeList; @@ -5809,7 +5809,7 @@ dojo.provide("dojo._base.NodeList"); return f.apply(o, a); }; }; - + // adapters var adaptAsForEach = function(f, o){ @@ -5839,7 +5839,7 @@ dojo.provide("dojo._base.NodeList"); return this.map(loopBody(f, arguments, o)); }; }; - + var adaptAsFilter = function(f, o){ // summary: // adapts a single node function to be used in the filter-type actions @@ -5851,9 +5851,9 @@ dojo.provide("dojo._base.NodeList"); return this.filter(loopBody(f, arguments, o)); }; }; - + var adaptWithCondition = function(f, g, o){ - // summary: + // summary: // adapts a single node function to be used in the map-type // actions, behaves like forEach() or map() depending on arguments // f: Function @@ -5871,13 +5871,13 @@ dojo.provide("dojo._base.NodeList"); return this; // self }; }; - + var magicGuard = function(a){ // summary: // the guard function for dojo.attr() and dojo.style() return a.length == 1 && d.isString(a[0]) }; - + var orphan = function(node){ // summary: // function to orphan nodes @@ -5908,7 +5908,7 @@ dojo.provide("dojo._base.NodeList"); // get a NodeList from a CSS query and iterate on it // | var l = dojo.query(".thinger"); // | l.forEach(function(node, index, nodeList){ - // | + // | // | }); // example: // use native and Dojo-provided array methods to manipulate a @@ -5917,13 +5917,13 @@ dojo.provide("dojo._base.NodeList"); // | // since NodeLists are real arrays, they have a length // | // property that is both readable and writable and // | // push/pop/shift/unshift methods - // | + // | // | l.push(dojo.create("<span>howdy!</span>")); // | // | // dojo's normalized array methods work too: - // | + // | // | // ...including the special "function as string" shorthand - // | + // | // | // | // NodeLists can be [..] indexed, or you can use the at() // | // function to get specific items wrapped in a new NodeList: @@ -5971,35 +5971,35 @@ dojo.provide("dojo._base.NodeList"); }; var nl = d.NodeList, nlp = nl.prototype; - + // expose adapters and the wrapper as private functions - + nl._wrap = tnl; nl._adaptAsMap = adaptAsMap; nl._adaptAsForEach = adaptAsForEach; nl._adaptAsFilter = adaptAsFilter; nl._adaptWithCondition = adaptWithCondition; - + // mass assignment - + // add array redirectors d.forEach(["slice", "splice"], function(name){ var f = ap[name]; nlp[name] = function(){ return tnl(f.apply(this, arguments)); }; }); // concat should be here but some browsers with native NodeList have problems with it - + // add array.js redirectors d.forEach(["indexOf", "lastIndexOf", "every", "some"], function(name){ var f = d[name]; nlp[name] = function(){ return f.apply(d, [this].concat(aps.call(arguments, 0))); }; }); - + // add conditional methods d.forEach(["attr", "style"], function(name){ nlp[name] = adaptWithCondition(d[name], magicGuard); }); - + // add forEach actions d.forEach(["connect", "addClass", "removeClass", "toggleClass", "empty"], function(name){ nlp[name] = adaptAsForEach(d[name]); @@ -6010,7 +6010,7 @@ dojo.provide("dojo._base.NodeList"); // FIXME: handle return values for #3244 // http://trac.dojotoolkit.org/ticket/3244 - + // FIXME: // need to wrap or implement: // join (perhaps w/ innerHTML/outerHTML overload for toString() of items?) @@ -6067,7 +6067,7 @@ dojo.provide("dojo._base.NodeList"); indexOf: function(value, fromIndex){ // summary: - // see dojo.indexOf(). The primary difference is that the acted-on + // see dojo.indexOf(). The primary difference is that the acted-on // array is implicitly this NodeList // value: Object: // The value to search for. @@ -6138,10 +6138,10 @@ dojo.provide("dojo._base.NodeList"); // spliced into the NodeList // returns: // dojo.NodeList - + //return tnl(apc.apply(this, arguments)); // the line above won't work for the native NodeList :-( - + // implementation notes: // 1) Native NodeList is not an array, and cannot be used directly // in concat() --- the latter doesn't recognize it as an array, and @@ -6150,7 +6150,7 @@ dojo.provide("dojo._base.NodeList"); // read-only and cannot be changed. So we have to test for both // native NodeList and dojo.NodeList in this property to recognize // the node list. - + var t = d.isArray(this) ? this : aps.call(this, 0), m = d.map(arguments, function(a){ return a && !d.isArray(a) && @@ -6171,11 +6171,11 @@ dojo.provide("dojo._base.NodeList"); forEach: function(callback, thisObj){ // summary: - // see `dojo.forEach()`. The primary difference is that the acted-on + // see `dojo.forEach()`. The primary difference is that the acted-on // array is implicitly this NodeList d.forEach(this, callback, thisObj); // non-standard return to allow easier chaining - return this; // dojo.NodeList + return this; // dojo.NodeList }, @@ -6184,7 +6184,7 @@ dojo.provide("dojo._base.NodeList"); // summary: // Returns the box objects all elements in a node list as // an Array (*not* a NodeList) - + return d.map(this, d.coords); // Array }, @@ -6208,7 +6208,7 @@ dojo.provide("dojo._base.NodeList"); // gets or sets the CSS property for every element in the NodeList // property: String // the CSS property to get/set, in JavaScript notation - // ("lineHieght" instead of "line-height") + // ("lineHieght" instead of "line-height") // value: String? // optional. The value to set the property to // returns: @@ -6258,7 +6258,7 @@ dojo.provide("dojo._base.NodeList"); // if 2 arguments are passed (methodName, objOrFunc), objOrFunc should // reference a function or be the name of the function in the global // namespace to attach. If 3 arguments are provided - // (methodName, objOrFunc, funcName), objOrFunc must be the scope to + // (methodName, objOrFunc, funcName), objOrFunc must be the scope to // locate the bound function in // funcName: String? // optional. A string naming the function in objOrFunc to bind to the @@ -6266,7 +6266,7 @@ dojo.provide("dojo._base.NodeList"); // example: // add an onclick handler to every button on the page // | dojo.query("div:nth-child(odd)").connect("onclick", function(e){ - // | + // | // | }); // example: // attach foo.bar() to every odd div's onmouseover @@ -6282,7 +6282,7 @@ dojo.provide("dojo._base.NodeList"); // FIXME: should we be checking for and/or disposing of widgets below these nodes? }, =====*/ - + // useful html methods coords: adaptAsMap(d.coords), @@ -6303,7 +6303,7 @@ dojo.provide("dojo._base.NodeList"); // by queryOrNode. Returns the original NodeList. See: `dojo.place` // queryOrNode: // may be a string representing any valid CSS3 selector or a DOM node. - // In the selector case, only the first matching element will be used + // In the selector case, only the first matching element will be used // for relative positioning. // position: // can be one of: @@ -6328,7 +6328,7 @@ dojo.provide("dojo._base.NodeList"); // anything which does not invoke a descent to evaluate but // can instead be used to test a single node is acceptable. // returns: - // `dojo.NodeList` containing the orpahned elements + // `dojo.NodeList` containing the orpahned elements return (simpleFilter ? d._filterQueryResult(this, simpleFilter) : this).forEach(orphan); // dojo.NodeList }, @@ -6418,7 +6418,7 @@ dojo.provide("dojo._base.NodeList"); } return tnl(d.filter(items, a[start], a[start + 1])); // dojo.NodeList }, - + /* // FIXME: should this be "copyTo" and include parenting info? clone: function(){ @@ -6461,10 +6461,10 @@ dojo.provide("dojo._base.NodeList"); // add a clone of a DOM node to the end of every element in // the list, removing it from its existing parent. // | dojo.query(".note").addContent(dojo.byId("foo")); - var c = d.isString(content) ? - d._toDom(content, this[0] && this[0].ownerDocument) : - content, - i, + var c = d.isString(content) ? + d._toDom(content, this[0] && this[0].ownerDocument) : + content, + i, l = this.length - 1; for(i = 0; i < l; ++i){ d.place(c.cloneNode(true), this[i], position); @@ -6505,7 +6505,7 @@ dojo.provide("dojo._base.NodeList"); d.forEach([ "blur", "focus", "change", "click", "error", "keydown", "keypress", "keyup", "load", "mousedown", "mouseenter", "mouseleave", "mousemove", - "mouseout", "mouseover", "mouseup", "submit" + "mouseout", "mouseover", "mouseup", "submit" ], function(evt){ var _oe = "on"+evt; nlp[_oe] = function(a, b){ @@ -6513,8 +6513,8 @@ dojo.provide("dojo._base.NodeList"); } // FIXME: should these events trigger publishes? /* - return (a ? this.connect(_oe, a, b) : - this.forEach(function(n){ + return (a ? this.connect(_oe, a, b) : + this.forEach(function(n){ // FIXME: // listeners get buried by // addEventListener and can't be dug back @@ -6522,7 +6522,7 @@ dojo.provide("dojo._base.NodeList"); // see: // http://developer.mozilla.org/en/docs/DOM:element - + // FIXME: need synthetic event support! var _e = { target: n, faux: true, type: evt }; @@ -6544,8 +6544,8 @@ if(!dojo._hasResource["dojo._base.query"]){ //_hasResource checks added by build dojo._hasResource["dojo._base.query"] = true; if(typeof dojo != "undefined"){ dojo.provide("dojo._base.query"); - - + + } @@ -6556,7 +6556,7 @@ if(typeof dojo != "undefined"){ designed to take any valid CSS3 selector and return the nodes matching the selector. To do this quickly, it processes queries in several steps, applying caching where profitable. - + The steps (roughly in reverse order of the way they appear in the code): 1.) check to see if we already have a "query dispatcher" - if so, use that with the given parameterization. Skip to step 4. @@ -6632,7 +6632,7 @@ if(typeof dojo != "undefined"){ //////////////////////////////////////////////////////////////////////// var getQueryParts = function(query){ - // summary: + // summary: // state machine for query tokenization // description: // instead of using a brittle and slow regex-based CSS parser, @@ -6648,7 +6648,7 @@ if(typeof dojo != "undefined"){ // below. - // NOTE: + // NOTE: // this code is designed to run fast and compress well. Sacrifices // to readibility and maintainability have been made. Your best // bet when hacking the tokenizer is to put The Donnas on *really* @@ -6666,7 +6666,7 @@ if(typeof dojo != "undefined"){ } var ts = function(/*Integer*/ s, /*Integer*/ e){ - // trim and slice. + // trim and slice. // take an index to start a string slice from and an end position // and return a trimmed copy of that sub-string @@ -6674,12 +6674,12 @@ if(typeof dojo != "undefined"){ } // the overall data graph of the full query, as represented by queryPart objects - var queryParts = []; + var queryParts = []; // state keeping vars - var inBrackets = -1, inParens = -1, inMatchFor = -1, - inPseudo = -1, inClass = -1, inId = -1, inTag = -1, + var inBrackets = -1, inParens = -1, inMatchFor = -1, + inPseudo = -1, inClass = -1, inId = -1, inTag = -1, lc = "", cc = "", pStart; // iteration vars @@ -6743,9 +6743,9 @@ if(typeof dojo != "undefined"){ // needs to do any iteration. Many simple selectors don't, and // we can avoid significant construction-time work by advising // the system to skip them - currentPart.loops = ( - currentPart.pseudos.length || - currentPart.attrs.length || + currentPart.loops = ( + currentPart.pseudos.length || + currentPart.attrs.length || currentPart.classes.length ); currentPart.oquery = currentPart.query = ts(pStart, x); // save the full expression as a string @@ -6775,7 +6775,7 @@ if(typeof dojo != "undefined"){ currentPart.infixOper = queryParts.pop(); currentPart.query = currentPart.infixOper.query + " " + currentPart.query; /* - + */ } queryParts.push(currentPart); @@ -6783,7 +6783,7 @@ if(typeof dojo != "undefined"){ currentPart = null; } - // iterate over the query, charachter by charachter, building up a + // iterate over the query, charachter by charachter, building up a // list of query part objects for(; lc=cc, cc=query.charAt(x), x < ql; x++){ // cc: the current character in the match @@ -6791,7 +6791,7 @@ if(typeof dojo != "undefined"){ // someone is trying to escape something, so don't try to match any // fragments. We assume we're inside a literal. - if(lc == "\\"){ continue; } + if(lc == "\\"){ continue; } if(!currentPart){ // a part was just ended or none has yet been created // NOTE: I hate all this alloc, but it's shorter than writing tons of if's pStart = x; @@ -6834,7 +6834,7 @@ if(typeof dojo != "undefined"){ // the beginning of a match, which should be a tag name. This // might fault a little later on, but we detect that and this // iteration will still be fine. - inTag = x; + inTag = x; } if(inBrackets >= 0){ @@ -6853,19 +6853,19 @@ if(typeof dojo != "undefined"){ var cmf = _cp.matchFor; if(cmf){ // try to strip quotes from the matchFor value. We want - // [attrName=howdy] to match the same + // [attrName=howdy] to match the same // as [attrName = 'howdy' ] if( (cmf.charAt(0) == '"') || (cmf.charAt(0) == "'") ){ _cp.matchFor = cmf.slice(1, -1); } } - // end the attribute by adding it to the list of attributes. + // end the attribute by adding it to the list of attributes. currentPart.attrs.push(_cp); _cp = null; // necessary? inBrackets = inMatchFor = -1; }else if(cc == "="){ // if the last char was an operator prefix, make sure we - // record it along with the "=" operator. + // record it along with the "=" operator. var addToCc = ("|~^$*".indexOf(lc) >=0 ) ? lc : ""; _cp.type = addToCc+cc; _cp.attr = ts(inBrackets+1, x-addToCc.length); @@ -6895,7 +6895,7 @@ if(typeof dojo != "undefined"){ endAll(); inPseudo = x; }else if(cc == "["){ - // start of an attribute match. + // start of an attribute match. endAll(); inBrackets = x; // provide a new structure for the attribute match to fill-in @@ -6909,15 +6909,15 @@ if(typeof dojo != "undefined"){ // expression if we're already inside a pseudo-selector match if(inPseudo >= 0){ // provide a new structure for the pseudo match to fill-in - _cp = { - name: ts(inPseudo+1, x), + _cp = { + name: ts(inPseudo+1, x), value: null } currentPart.pseudos.push(_cp); } inParens = x; }else if( - (cc == " ") && + (cc == " ") && // if it's a space char and the last char is too, consume the // current one without doing more work (lc != cc) @@ -6927,7 +6927,7 @@ if(typeof dojo != "undefined"){ } return queryParts; }; - + //////////////////////////////////////////////////////////////////////// // DOM query infrastructure @@ -6989,7 +6989,7 @@ if(typeof dojo != "undefined"){ } }, "$=": function(attr, value){ - // E[foo$="bar"] + // E[foo$="bar"] // an E element whose "foo" attribute value ends exactly // with the string "bar" var tval = " "+value; @@ -6999,7 +6999,7 @@ if(typeof dojo != "undefined"){ } }, "~=": function(attr, value){ - // E[foo~="bar"] + // E[foo~="bar"] // an E element whose "foo" attribute value is a list of // space-separated values, one of which is exactly equal // to "bar" @@ -7077,9 +7077,9 @@ if(typeof dojo != "undefined"){ root["_l"] = l; ci = -1; for(var te = root["firstElementChild"]||root["firstChild"]; te; te = te[_ns]){ - if(_simpleNodeTest(te)){ + if(_simpleNodeTest(te)){ te["_i"] = ++i; - if(node === te){ + if(node === te){ // NOTE: // shortcuting the return at this step in indexing works // very well for benchmarking but we avoid it here since @@ -7113,7 +7113,7 @@ if(typeof dojo != "undefined"){ "first-child": function(){ return _lookLeft; }, "last-child": function(){ return _lookRight; }, "only-child": function(name, condition){ - return function(node){ + return function(node){ if(!_lookLeft(node)){ return false; } if(!_lookRight(node)){ return false; } return true; @@ -7144,7 +7144,7 @@ if(typeof dojo != "undefined"){ }, "not": function(name, condition){ var p = getQueryParts(condition)[0]; - var ignores = { el: 1 }; + var ignores = { el: 1 }; if(p.tag != "*"){ ignores.tag = 1; } @@ -7287,7 +7287,7 @@ if(typeof dojo != "undefined"){ if(!("id" in ignores)){ if(query.id){ - ff = agree(ff, function(elem){ + ff = agree(ff, function(elem){ return (!!elem && (elem.id == query.id)); }); } @@ -7295,7 +7295,7 @@ if(typeof dojo != "undefined"){ if(!ff){ if(!("default" in ignores)){ - ff = yesman; + ff = yesman; } } return ff; @@ -7346,14 +7346,14 @@ if(typeof dojo != "undefined"){ _simpleNodeTest(te) && (!bag || _isUnique(te, bag)) && (filterFunc(te, x)) - ){ + ){ ret.push(te); } } return ret; }; }; - + /* // thanks, Dean! var itemIsAfterRoot = d.isIE ? function(item, root){ @@ -7441,7 +7441,7 @@ if(typeof dojo != "undefined"){ var filterFunc = getSimpleFilterFunc(query, { el: 1 }); var qt = query.tag; var wildcardTag = ("*" == qt); - var ecs = getDoc()["getElementsByClassName"]; + var ecs = getDoc()["getElementsByClassName"]; if(!oper){ // if there's no infix operator, then it's a descendant query. ID @@ -7451,8 +7451,8 @@ if(typeof dojo != "undefined"){ // testing shows that the overhead of yesman() is acceptable // and can save us some bytes vs. re-defining the function // everywhere. - filterFunc = (!query.loops && wildcardTag) ? - yesman : + filterFunc = (!query.loops && wildcardTag) ? + yesman : getSimpleFilterFunc(query, { el: 1, id: 1 }); retFunc = function(root, arr){ @@ -7467,9 +7467,9 @@ if(typeof dojo != "undefined"){ } } }else if( - ecs && + ecs && // isAlien check. Workaround for Prototype.js being totally evil/dumb. - /\{\s*\[native code\]\s*\}/.test(String(ecs)) && + /\{\s*\[native code\]\s*\}/.test(String(ecs)) && query.classes.length && !cssCaseBug ){ @@ -7635,8 +7635,8 @@ if(typeof dojo != "undefined"){ // We need te detect the right "internal" webkit version to make this work. var wk = "WebKit/"; var is525 = ( - d.isWebKit && - (nua.indexOf(wk) > 0) && + d.isWebKit && + (nua.indexOf(wk) > 0) && (parseFloat(nua.split(wk)[1]) > 528) ); @@ -7647,10 +7647,10 @@ if(typeof dojo != "undefined"){ var qsa = "querySelectorAll"; var qsaAvail = ( - !!getDoc()[qsa] && + !!getDoc()[qsa] && // see #5832 (!d.isSafari || (d.isSafari > 3.1) || is525 ) - ); + ); var getQueryFunc = function(query, forceDOM){ if(qsaAvail){ @@ -7664,7 +7664,7 @@ if(typeof dojo != "undefined"){ var domCached = _queryFuncCacheDOM[query]; if(domCached){ return domCached; } - // TODO: + // TODO: // today we're caching DOM and QSA branches separately so we // recalc useQSA every time. If we had a way to tag root+query // efficiently, we'd be in good shape to do a global cache. @@ -7678,11 +7678,11 @@ if(typeof dojo != "undefined"){ forceDOM = true; } - var useQSA = ( + var useQSA = ( qsaAvail && (!forceDOM) && // as per CSS 3, we can't currently start w/ combinator: // http://www.w3.org/TR/css3-selectors/#w3cselgrammar - (specials.indexOf(qcz) == -1) && + (specials.indexOf(qcz) == -1) && // IE's QSA impl sucks on pseudos (!d.isIE || (query.indexOf(":") == -1)) && @@ -7695,7 +7695,7 @@ if(typeof dojo != "undefined"){ (query.indexOf("|=") == -1) // some browsers don't grok it ); - // TODO: + // TODO: // if we've got a descendant query (e.g., "> .thinger" instead of // just ".thinger") in a QSA-able doc, but are passed a child as a // root, it should be possible to give the item a synthetic ID and @@ -7704,7 +7704,7 @@ if(typeof dojo != "undefined"){ if(useQSA){ - var tq = (specials.indexOf(query.charAt(query.length-1)) >= 0) ? + var tq = (specials.indexOf(query.charAt(query.length-1)) >= 0) ? (query + " *") : query; return _queryFuncCacheQSA[query] = function(root){ try{ @@ -7731,9 +7731,9 @@ if(typeof dojo != "undefined"){ }else{ // DOM branch var parts = query.split(/\s*,\s*/); - return _queryFuncCacheDOM[query] = ((parts.length < 2) ? + return _queryFuncCacheDOM[query] = ((parts.length < 2) ? // if not a compound query (e.g., ".foo, .bar"), cache and return a dispatcher - getStepQueryFunc(query) : + getStepQueryFunc(query) : // if it *is* a complex query, break it up into its // constituent parts and return a dispatcher that will // merge the parts when run @@ -7763,7 +7763,7 @@ if(typeof dojo != "undefined"){ }else{ return node.uniqueID; } - } : + } : function(node){ return (node._uid || (node._uid = ++_zipIdx)); }; @@ -7772,7 +7772,7 @@ if(typeof dojo != "undefined"){ // to flatten a list of unique items, but rather just tell if the item in // question is already in the bag. Normally we'd just use hash lookup to do // this for us but IE's DOM is busted so we can't really count on that. On - // the upside, it gives us a built in unique ID function. + // the upside, it gives us a built in unique ID function. var _isUnique = function(node, bag){ if(!bag){ return 1; } var id = _nodeUID(node); @@ -7784,7 +7784,7 @@ if(typeof dojo != "undefined"){ // returning a list of "uniques", hopefully in doucment order var _zipIdxName = "_zipIdx"; var _zip = function(arr){ - if(arr && arr.nozip){ + if(arr && arr.nozip){ return (qlc._wrap) ? qlc._wrap(arr) : arr; } // var ret = new d._queryListCtor(); @@ -7796,14 +7796,14 @@ if(typeof dojo != "undefined"){ if(arr.length < 2){ return ret; } _zipIdx++; - + // we have to fork here for IE and XML docs because we can't set // expandos on their nodes (apparently). *sigh* if(d.isIE && caseSensitive){ var szidx = _zipIdx+""; arr[0].setAttribute(_zipIdxName, szidx); for(var x = 1, te; te = arr[x]; x++){ - if(arr[x].getAttribute(_zipIdxName) != szidx){ + if(arr[x].getAttribute(_zipIdxName) != szidx){ ret.push(te); } te.setAttribute(_zipIdxName, szidx); @@ -7811,7 +7811,7 @@ if(typeof dojo != "undefined"){ }else if(d.isIE && arr.commentStrip){ try{ for(var x = 1, te; te = arr[x]; x++){ - if(_isElement(te)){ + if(_isElement(te)){ ret.push(te); } } @@ -7819,7 +7819,7 @@ if(typeof dojo != "undefined"){ }else{ if(arr[0]){ arr[0][_zipIdxName] = _zipIdx; } for(var x = 1, te; te = arr[x]; x++){ - if(arr[x][_zipIdxName] != _zipIdx){ + if(arr[x][_zipIdxName] != _zipIdx){ ret.push(te); } te[_zipIdxName] = _zipIdx; @@ -7849,7 +7849,7 @@ if(typeof dojo != "undefined"){ // * class selectors (e.g., `.foo`) // * node type selectors like `span` // * ` ` descendant selectors - // * `>` child element selectors + // * `>` child element selectors // * `#foo` style ID selectors // * `*` universal selector // * `~`, the immediately preceeded-by sibling selector @@ -7874,14 +7874,14 @@ if(typeof dojo != "undefined"){ // palette of selectors and when combined with functions for // manipulation presented by dojo.NodeList, many types of DOM // manipulation operations become very straightforward. - // + // // Unsupported Selectors: // ---------------------- // // While dojo.query handles many CSS3 selectors, some fall outside of // what's resaonable for a programmatic node querying engine to // handle. Currently unsupported selectors include: - // + // // * namespace-differentiated selectors of any form // * all `::` pseduo-element selectors // * certain pseduo-selectors which don't get a lot of day-to-day use: @@ -7890,10 +7890,10 @@ if(typeof dojo != "undefined"){ // | * `:root`, `:active`, `:hover`, `:visisted`, `:link`, // `:enabled`, `:disabled` // * `:*-of-type` pseudo selectors - // + // // dojo.query and XML Documents: // ----------------------------- - // + // // `dojo.query` (as of dojo 1.2) supports searching XML documents // in a case-sensitive manner. If an HTML document is served with // a doctype that forces case-sensitivity (e.g., XHTML 1.1 @@ -8003,12 +8003,12 @@ if(typeof dojo != "undefined"){ // NOTE: // Opera in XHTML mode doesn't detect case-sensitivity correctly // and it's not clear that there's any way to test for it - caseSensitive = (root.contentType && root.contentType=="application/xml") || + caseSensitive = (root.contentType && root.contentType=="application/xml") || (d.isOpera && (root.doctype || od.toString() == "[object XMLDocument]")) || - (!!od) && + (!!od) && (d.isIE ? od.xml : (root.xmlVersion||od.xmlVersion)); - // NOTE: + // NOTE: // adding "true" as the 2nd argument to getQueryFunc is useful for // testing the DOM branch without worrying about the // behavior/performance of the QSA branch. @@ -8089,7 +8089,7 @@ dojo.provide("dojo._base.xhr"); // yields this object structure as the result of a call to // formToObject(): // - // | { + // | { // | blah: "blah", // | multi: [ // | "thud", @@ -8112,7 +8112,7 @@ dojo.provide("dojo._base.xhr"); setValue(ret, _in, opt.value); } }); - }else{ + }else{ setValue(ret, _in, item.value); if(type == "image"){ ret[_in+".x"] = ret[_in+".y"] = ret[_in].x = ret[_in].y = 0; @@ -8130,7 +8130,7 @@ dojo.provide("dojo._base.xhr"); // example: // this object: // - // | { + // | { // | blah: "blah", // | multi: [ // | "thud", @@ -8139,7 +8139,7 @@ dojo.provide("dojo._base.xhr"); // | }; // // yields the following query string: - // + // // | "blah=blah&multi=thud&multi=thonk" // FIXME: need to implement encodeAscii!! @@ -8184,7 +8184,7 @@ dojo.provide("dojo._base.xhr"); // This string: // // | "foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&" - // + // // results in this object structure: // // | { @@ -8192,7 +8192,7 @@ dojo.provide("dojo._base.xhr"); // | thinger: " spaces =blah", // | zonk: "blarg" // | } - // + // // Note that spaces and other urlencoded entities are correctly // handled. @@ -8230,13 +8230,13 @@ dojo.provide("dojo._base.xhr"); // every IO API timeout: 1000, // milliseconds handleAs: "text", // replaces the always-wrong "mimetype" - content: { + content: { key: "value" }, // browser-specific, MAY be unsupported sync: true, // defaults to false - form: dojo.byId("someForm") + form: dojo.byId("someForm") } */ @@ -8251,7 +8251,7 @@ dojo.provide("dojo._base.xhr"); json: function(xhr){ return _d.fromJson(xhr.responseText || null); }, - "json-comment-filtered": function(xhr){ + "json-comment-filtered": function(xhr){ // NOTE: the json-comment-filtered option was implemented to prevent // "JavaScript Hijacking", but it is less secure than standard JSON. Use // standard JSON instead. JSON prefixing can be used to subvert hijacking. @@ -8271,7 +8271,7 @@ dojo.provide("dojo._base.xhr"); } return _d.fromJson(value.substring(cStartIdx+2, cEndIdx)); }, - javascript: function(xhr){ + javascript: function(xhr){ // FIXME: try Moz and IE specific eval variants? return _d.eval(xhr.responseText); }, @@ -8405,7 +8405,7 @@ dojo.provide("dojo._base.xhr"); /*Function*/canceller, /*Function*/okHandler, /*Function*/errHandler){ - // summary: + // summary: // sets up the Deferred and ioArgs property on the Deferred so it // can be used in an io call. // args: @@ -8421,25 +8421,25 @@ dojo.provide("dojo._base.xhr"); // object returned from this function. // errHandler: // The first error callback to be registered with Deferred. It has the opportunity - // to do cleanup on an error. It will receive two arguments: error (the + // to do cleanup on an error. It will receive two arguments: error (the // Error object) and dfd, the Deferred object returned from this function. var ioArgs = {args: args, url: args.url}; //Get values from form if requestd. var formObject = null; - if(args.form){ + if(args.form){ var form = _d.byId(args.form); - //IE requires going through getAttributeNode instead of just getAttribute in some form cases, + //IE requires going through getAttributeNode instead of just getAttribute in some form cases, //so use it for all. See #2844 var actnNode = form.getAttributeNode("action"); - ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); + ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); formObject = _d.formToObject(form); } // set up the query params var miArgs = [{}]; - + if(formObject){ // potentially over-ride url-provided params w/ form values miArgs.push(formObject); @@ -8452,7 +8452,7 @@ dojo.provide("dojo._base.xhr"); miArgs.push({"dojo.preventCache": new Date().valueOf()}); } ioArgs.query = _d.objectToQuery(_d.mixin.apply(null, miArgs)); - + // .. and the real work of getting the deferred in order, etc. ioArgs.handleAs = args.handleAs || "text"; var d = new _d.Deferred(canceller); @@ -8482,9 +8482,9 @@ dojo.provide("dojo._base.xhr"); return handle.call(args, value, ioArgs); }); } - + d.ioArgs = ioArgs; - + // FIXME: need to wire up the xhr object's abort method to something // analagous in the Deferred return d; @@ -8492,7 +8492,7 @@ dojo.provide("dojo._base.xhr"); var _deferredCancel = function(/*Deferred*/dfd){ //summary: canceller function for dojo._ioSetArgs call. - + dfd.canceled = true; var xhr = dfd.ioArgs.xhr; var _at = typeof xhr.abort; @@ -8524,10 +8524,10 @@ dojo.provide("dojo._base.xhr"); var _inFlightIntvl = null; var _inFlight = []; var _watchInFlight = function(){ - //summary: + //summary: // internal method that checks each inflight XMLHttpRequest to see // if it has completed or if the timeout situation applies. - + var now = (new Date()).getTime(); // make sure sync calls stay thread safe, if this callback is called // during a sync call and this results in another sync call before the @@ -8539,7 +8539,7 @@ dojo.provide("dojo._base.xhr"); var dfd = tif.dfd; var func = function(){ if(!dfd || dfd.canceled || !tif.validCheck(dfd)){ - _inFlight.splice(i--, 1); + _inFlight.splice(i--, 1); }else if(tif.ioCheck(dfd)){ _inFlight.splice(i--, 1); tif.resHandle(dfd); @@ -8592,7 +8592,7 @@ dojo.provide("dojo._base.xhr"); if(_d.isIE){ _d.addOnWindowUnload(_d._ioCancelAll); } - + _d._ioWatch = function(/*Deferred*/dfd, /*Function*/validCheck, /*Function*/ioCheck, @@ -8653,7 +8653,7 @@ dojo.provide("dojo._base.xhr"); if(ioArgs.query.length){ ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query; ioArgs.query = null; - } + } } /*===== @@ -8742,7 +8742,7 @@ dojo.provide("dojo._base.xhr"); } dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){ - // summary: + // summary: // Sends an HTTP GET request to the server. return _d.xhr("GET", args); // dojo.Deferred } @@ -8796,14 +8796,14 @@ dojo.provide("dojo._base.fx"); /* - Animation losely package based on Dan Pupius' work, contributed under CLA: + Animation losely package based on Dan Pupius' work, contributed under CLA: http://pupius.co.uk/js/Toolkit.Drawing.js */ -(function(){ +(function(){ var d = dojo; var _mixin = d.mixin; - + dojo._Line = function(/*int*/ start, /*int*/ end){ // summary: // dojo._Line is the object used to generate values from a start value @@ -8820,7 +8820,7 @@ dojo.provide("dojo._base.fx"); // n: a floating point number greater than 0 and less than 1 return ((this.end - this.start) * n) + this.start; // Decimal } - + d.declare("dojo._Animation", null, { // summary // A generic animation class that fires callbacks into its handlers @@ -8837,72 +8837,72 @@ dojo.provide("dojo._base.fx"); this.curve = new d._Line(this.curve[0], this.curve[1]); } }, - + // duration: Integer // The time in milliseonds the animation will take to run duration: 350, - + /*===== // curve: dojo._Line||Array // A two element array of start and end values, or a dojo._Line instance to be - // used in the Animation. + // used in the Animation. curve: null, - + // easing: Function - // A Function to adjust the acceleration (or deceleration) of the progress + // A Function to adjust the acceleration (or deceleration) of the progress // across a dojo._Line easing: null, =====*/ - + // repeat: Integer // The number of times to loop the animation repeat: 0, - + // rate: Integer - // the time in milliseconds to wait before advancing to next frame + // the time in milliseconds to wait before advancing to next frame // (used as a fps timer: rate/1000 = fps) rate: 10 /* 100 fps */, - - /*===== + + /*===== // delay: Integer // The time in milliseconds to wait before starting animation after it has been .play()'ed delay: null, - + // events // // beforeBegin: Event // Synthetic event fired before a dojo._Animation begins playing (synchronous) beforeBegin: null, - + // onBegin: Event // Synthetic event fired as a dojo._Animation begins playing (useful?) onBegin: null, - + // onAnimate: Event // Synthetic event fired at each interval of a dojo._Animation onAnimate: null, - + // onEnd: Event // Synthetic event fired after the final frame of a dojo._Animation onEnd: null, - + // onPlay: Event // Synthetic event fired any time a dojo._Animation is play()'ed onPlay: null, - + // onPause: Event // Synthetic event fired when a dojo._Animation is paused onPause: null, - + // onStop: Event // Synthetic event fires when a dojo._Animation is stopped onStop: null, - + =====*/ - + _percent: 0, _startRepeatCount: 0, - + _fire: function(/*Event*/ evt, /*Array?*/ args){ // summary: // Convenience function. Fire event "evt" and pass it the @@ -8948,12 +8948,12 @@ dojo.provide("dojo._base.fx"); }else if(_t._active && !_t._paused){ return _t; // dojo._Animation } - + _t._fire("beforeBegin"); - + var de = delay || _t.delay, _p = dojo.hitch(_t, "_play", gotoStart); - + if(de > 0){ _t._delayTimer = setTimeout(_p, de); return _t; // dojo._Animation @@ -8961,7 +8961,7 @@ dojo.provide("dojo._base.fx"); _p(); return _t; }, - + _play: function(gotoStart){ var _t = this; if(_t._delayTimer){ _t._clearTimer(); } @@ -8970,10 +8970,10 @@ dojo.provide("dojo._base.fx"); _t._startTime -= _t.duration * _t._percent; } _t._endTime = _t._startTime + _t.duration; - + _t._active = true; _t._paused = false; - + var value = _t.curve.getValue(_t._percent); if(!_t._percent){ if(!_t._startRepeatCount){ @@ -8981,13 +8981,13 @@ dojo.provide("dojo._base.fx"); } _t._fire("onBegin", [value]); } - + _t._fire("onPlay", [value]); - + _t._cycle(); return _t; // dojo._Animation }, - + pause: function(){ // summary: Pauses a running animation. var _t = this; @@ -8998,7 +8998,7 @@ dojo.provide("dojo._base.fx"); _t._fire("onPause", [_t.curve.getValue(_t._percent)]); return _t; // dojo._Animation }, - + gotoPercent: function(/*Decimal*/ percent, /*Boolean?*/ andPlay){ // summary: // Sets the progress of the animation. @@ -9013,7 +9013,7 @@ dojo.provide("dojo._base.fx"); if(andPlay){ _t.play(); } return _t; // dojo._Animation }, - + stop: function(/*boolean?*/ gotoEnd){ // summary: Stops a running animation. // gotoEnd: If true, the animation will end. @@ -9028,7 +9028,7 @@ dojo.provide("dojo._base.fx"); _t._active = _t._paused = false; return _t; // dojo._Animation }, - + status: function(){ // summary: Returns a string token representation of the status of // the animation, one of: "paused", "playing", "stopped" @@ -9037,30 +9037,30 @@ dojo.provide("dojo._base.fx"); } return "stopped"; // String }, - + _cycle: function(){ var _t = this; if(_t._active){ var curr = new Date().valueOf(); var step = (curr - _t._startTime) / (_t._endTime - _t._startTime); - + if(step >= 1){ step = 1; } _t._percent = step; - + // Perform easing if(_t.easing){ step = _t.easing(step); } - + _t._fire("onAnimate", [_t.curve.getValue(step)]); - + if(_t._percent < 1){ _t._startTimer(); }else{ _t._active = false; - + if(_t.repeat > 0){ _t.repeat--; _t.play(null, true); @@ -9079,13 +9079,13 @@ dojo.provide("dojo._base.fx"); } return _t; // dojo._Animation }, - + _clearTimer: function(){ // summary: Clear the play delay timer clearTimeout(this._delayTimer); delete this._delayTimer; } - + }); var ctr = 0, @@ -9119,7 +9119,7 @@ dojo.provide("dojo._base.fx"); } }; - var _makeFadeable = + var _makeFadeable = d.isIE ? function(node){ // only set the zoom if the "tickle" value would be the same as the // default @@ -9129,11 +9129,11 @@ dojo.provide("dojo._base.fx"); if(!ns.width.length && d.style(node, "width") == "auto"){ ns.width = "auto"; } - } : + } : function(){}; dojo._fade = function(/*Object*/ args){ - // summary: + // summary: // Returns an animation that will fade the node defined by // args.node from the start to end values passed (args.start // args.end) (end is mandatory, start is optional) @@ -9141,10 +9141,10 @@ dojo.provide("dojo._base.fx"); args.node = d.byId(args.node); var fArgs = _mixin({ properties: {} }, args), props = (fArgs.properties.opacity = {}); - + props.start = !("start" in fArgs) ? - function(){ - return +d.style(fArgs.node, "opacity")||0; + function(){ + return +d.style(fArgs.node, "opacity")||0; } : fArgs.start; props.end = fArgs.end; @@ -9169,14 +9169,14 @@ dojo.provide("dojo._base.fx"); =====*/ dojo.fadeIn = function(/*dojo.__FadeArgs*/ args){ - // summary: + // summary: // Returns an animation that will fade node defined in 'args' from // its current opacity to fully opaque. return d._fade(_mixin({ end: 1 }, args)); // dojo._Animation } dojo.fadeOut = function(/*dojo.__FadeArgs*/ args){ - // summary: + // summary: // Returns an animation that will fade node defined in 'args' // from its current opacity to fully transparent. return d._fade(_mixin({ end: 0 }, args)); // dojo._Animation @@ -9222,13 +9222,13 @@ dojo.provide("dojo._base.fx"); // A hash map of style properties to Objects describing the transition, // such as the properties of dojo._Line with an additional 'unit' property properties: {} - + //TODOC: add event callbacks }); =====*/ dojo.animateProperty = function(/*dojo.__AnimArgs*/ args){ - // summary: + // summary: // Returns an animation that will transition the properties of // node defined in 'args' depending how they are defined in // 'args.properties' @@ -9238,10 +9238,10 @@ dojo.provide("dojo._base.fx"); // animations. It takes an object of "properties" corresponding to // style properties, and animates them in parallel over a set // duration. - // + // // example: // A simple animation that changes the width of the specified node. - // | dojo.animateProperty({ + // | dojo.animateProperty({ // | node: "nodeId", // | properties: { width: 400 }, // | }).play(); @@ -9257,18 +9257,18 @@ dojo.provide("dojo._base.fx"); // | properties: { // | width: { start: '200', end: '400', unit:"px" }, // | height: { start:'200', end: '400', unit:"px" }, - // | paddingTop: { start:'5', end:'50', unit:"px" } + // | paddingTop: { start:'5', end:'50', unit:"px" } // | } // | }).play(); // Note 'paddingTop' is used over 'padding-top'. Multi-name CSS properties // are written using "mixed case", as the hyphen is illegal as an object key. - // + // // example: // Plug in a different easing function and register a callback for // when the animation ends. Easing functions accept values between // zero and one and return a value on that basis. In this case, an // exponential-in curve. - // | dojo.animateProperty({ + // | dojo.animateProperty({ // | node: "nodeId", // | // dojo figures out the start value // | properties: { width: { end: 400 } }, @@ -9291,11 +9291,11 @@ dojo.provide("dojo._base.fx"); // | } // | }); // | dojo.connect(anim,"onEnd", function(){ - // | + // | // | }); // | // play the animation now: // | anim.play(); - + args.node = d.byId(args.node); if(!args.easing){ args.easing = d._defaultEasing; } @@ -9346,10 +9346,10 @@ dojo.provide("dojo._base.fx"); return anim; // dojo._Animation } - dojo.anim = function( /*DOMNode|String*/ node, - /*Object*/ properties, - /*Integer?*/ duration, - /*Function?*/ easing, + dojo.anim = function( /*DOMNode|String*/ node, + /*Object*/ properties, + /*Integer?*/ duration, + /*Function?*/ easing, /*Function?*/ onEnd, /*Integer?*/ delay){ // summary: @@ -9390,12 +9390,12 @@ dojo.provide("dojo._base.fx"); // example: // Fade out a node over a full second // | dojo.anim("id", { opacity: 0 }, 1000); - return d.animateProperty({ + return d.animateProperty({ node: node, duration: duration||d._Animation.prototype.duration, properties: properties, easing: easing, - onEnd: onEnd + onEnd: onEnd }).play(delay||0); } })(); diff --git a/tests/javascript/frameworks/dojo/dojo-1.4.3.js b/tests/javascript/frameworks/dojo/dojo-1.4.3.js index 13a76674bcb716c00ffc025a5c9b0575ec9e1995..c88a90843d7fd5e6bf3fc70c93ece72a20cb861e 100644 --- a/tests/javascript/frameworks/dojo/dojo-1.4.3.js +++ b/tests/javascript/frameworks/dojo/dojo-1.4.3.js @@ -21,7 +21,7 @@ ["dojo", "fojo"], ["dijit", "fijit"], ["dojox", "fojox"] - + ] */ @@ -124,7 +124,7 @@ djConfig = { // of calling `dojo.registerModulePath("foo", "../../bar");`. Multiple // modules may be configured via `djConfig.modulePaths`. modulePaths: {}, - // afterOnLoad: Boolean + // afterOnLoad: Boolean // Indicates Dojo was added to the page after the page load. In this case // Dojo will not wait for the page DOMContentLoad/load events and fire // its dojo.addOnLoad callbacks after making sure all outstanding @@ -151,7 +151,7 @@ djConfig = { // dojoBlankHtmlUrl: String // Used by some modules to configure an empty iframe. Used by dojo.io.iframe and // dojo.back, and dijit popup support in IE where an iframe is needed to make sure native - // controls do not bleed through the popups. Normally this configuration variable + // controls do not bleed through the popups. Normally this configuration variable // does not need to be set, except when using cross-domain/CDN Dojo builds. // Save dojo/resources/blank.html to your domain and set `djConfig.dojoBlankHtmlUrl` // to the path on your domain your copy of blank.html. @@ -308,7 +308,7 @@ dojo.global = { if(typeof OpenAjax != "undefined"){ OpenAjax.hub.registerLibrary(dojo._scopeName, "http://dojotoolkit.org", d.version.toString()); } - + var extraNames, extraLen, empty = {}; for(var i in {toString: 1}){ extraNames = []; break; } dojo._extraNames = extraNames = extraNames || ["hasOwnProperty", "valueOf", "isPrototypeOf", @@ -371,7 +371,7 @@ dojo.global = { // | constructor: function(properties){ // | // property configuration: // | dojo.mixin(this, properties); - // | + // | // | console.log(this.quip); // | // ... // | }, @@ -392,7 +392,7 @@ dojo.global = { // | name: "Carl Brutanananadilewski" // | } // | ); - // | + // | // | // will print "Carl Brutanananadilewski" // | console.log(flattened.name); // | // will print "true" @@ -600,11 +600,11 @@ dojo.global = { _loadedUrls: [], - //WARNING: + //WARNING: // This variable is referenced by packages outside of bootstrap: // FloatingPane.js and undo/browser.js _postLoad: false, - + //Egad! Lots of test files push on this directly instead of using dojo.addOnLoad. _loaders: [], _unloaders: [], @@ -623,13 +623,13 @@ dojo.global = { // not caught by us, so the caller will see it. We return a true // value if and only if the script is found. // - // relpath: + // relpath: // A relative path to a script (no leading '/', and typically ending // in '.js'). - // module: + // module: // A module whose existance to check for after loading a path. Can be // used to determine success or failure of the load. - // cb: + // cb: // a callback function to pass the result of evaluating the script var uri = ((relpath.charAt(0) == '/' || relpath.match(/^\w+:/)) ? "" : d.baseUrl) + relpath; @@ -650,7 +650,7 @@ dojo.global = { // it succeeded. Returns false if the URI reading failed. Throws if // the evaluation throws. // uri: a uri which points at the script to be loaded - // cb: + // cb: // a callback function to process the result of evaluating the script // as an expression, typically used by the resource bundle loader to // load JSON-style resources @@ -676,23 +676,23 @@ dojo.global = { } // Check to see if we need to call _callLoaded() due to an addOnLoad() that arrived while we were busy downloading if(--d._inFlightCount == 0 && d._postLoad && d._loaders.length){ - // We shouldn't be allowed to get here but Firefox allows an event - // (mouse, keybd, async xhrGet) to interrupt a synchronous xhrGet. + // We shouldn't be allowed to get here but Firefox allows an event + // (mouse, keybd, async xhrGet) to interrupt a synchronous xhrGet. // If the current script block contains multiple require() statements, then after each // require() returns, inFlightCount == 0, but we want to hold the _callLoaded() until // all require()s are done since the out-of-sequence addOnLoad() presumably needs them all. // setTimeout allows the next require() to start (if needed), and then we check this again. - setTimeout(function(){ - // If inFlightCount > 0, then multiple require()s are running sequentially and + setTimeout(function(){ + // If inFlightCount > 0, then multiple require()s are running sequentially and // the next require() started after setTimeout() was executed but before we got here. - if(d._inFlightCount == 0){ + if(d._inFlightCount == 0){ d._callLoaded(); } }, 0); } return !!contents; // Boolean: contents? true : false } - + // FIXME: probably need to add logging to this method dojo._loadUriAndCheck = function(/*String*/uri, /*String*/moduleName, /*Function?*/cb){ // summary: calls loadUri then findModule and returns true if both succeed @@ -708,10 +708,10 @@ dojo.global = { dojo.loaded = function(){ // summary: // signal fired when initial environment and package loading is - // complete. You should use dojo.addOnLoad() instead of doing a + // complete. You should use dojo.addOnLoad() instead of doing a // direct dojo.connect() to this method in order to handle // initialization tasks that require the environment to be - // initialized. In a browser host, declarative widgets will + // initialized. In a browser host, declarative widgets will // be constructed when this function finishes runing. d._loadNotifying = true; d._postLoad = true; @@ -726,7 +726,7 @@ dojo.global = { } d._loadNotifying = false; - + //Make sure nothing else got added to the onload queue //after this first run. If something did, and we are not waiting for any //more inflight resources, run again. @@ -738,8 +738,8 @@ dojo.global = { dojo.unloaded = function(){ // summary: // signal fired by impending environment destruction. You should use - // dojo.addOnUnload() instead of doing a direct dojo.connect() to this - // method to perform page/application cleanup methods. See + // dojo.addOnUnload() instead of doing a direct dojo.connect() to this + // method to perform page/application cleanup methods. See // dojo.addOnUnload for more info. var mll = d._unloaders; while(mll.length){ @@ -758,13 +758,13 @@ dojo.global = { dojo.ready = dojo.addOnLoad = function(/*Object*/obj, /*String|Function?*/functionName){ // summary: - // Registers a function to be triggered after the DOM and dojo.require() calls + // Registers a function to be triggered after the DOM and dojo.require() calls // have finished loading. // // description: // Registers a function to be triggered after the DOM has finished - // loading and `dojo.require` modules have loaded. Widgets declared in markup - // have been instantiated if `djConfig.parseOnLoad` is true when this fires. + // loading and `dojo.require` modules have loaded. Widgets declared in markup + // have been instantiated if `djConfig.parseOnLoad` is true when this fires. // // Images and CSS files may or may not have finished downloading when // the specified function is called. (Note that widgets' CSS and HTML @@ -807,7 +807,7 @@ dojo.global = { dojo._modulesLoaded = function(){ if(d._postLoad){ return; } - if(d._inFlightCount > 0){ + if(d._inFlightCount > 0){ console.warn("files still in flight!"); return; } @@ -839,8 +839,8 @@ dojo.global = { var syms = modulename.split("."); for(var i = syms.length; i>0; i--){ var parentModule = syms.slice(0, i).join("."); - if(i == 1 && !d._moduleHasPrefix(parentModule)){ - // Support default module directory (sibling of dojo) for top-level modules + if(i == 1 && !d._moduleHasPrefix(parentModule)){ + // Support default module directory (sibling of dojo) for top-level modules syms[0] = "../" + syms[0]; }else{ var parentModulePath = d._getModulePrefix(parentModule); @@ -894,28 +894,28 @@ dojo.global = { // custom build that specified loader=xdomain and the module lives on a modulePath // that is a whole URL, with protocol and a domain. The versions of Dojo that are on // the Google and AOL CDNs use the xdomain loader. - // + // // If the module is loaded via the xdomain loader, it is an asynchronous load, since // the module is added via a dynamically created script tag. This - // means that dojo.require() can return before the module has loaded. However, this + // means that dojo.require() can return before the module has loaded. However, this // should only happen in the case where you do dojo.require calls in the top-level // HTML page, or if you purposely avoid the loader checking for dojo.require // dependencies in your module by using a syntax like dojo["require"] to load the module. - // + // // Sometimes it is useful to not have the loader detect the dojo.require calls in the // module so that you can dynamically load the modules as a result of an action on the // page, instead of right at module load time. - // + // // Also, for script blocks in an HTML page, the loader does not pre-process them, so // it does not know to download the modules before the dojo.require calls occur. - // + // // So, in those two cases, when you want on-the-fly module loading or for script blocks // in the HTML page, special care must be taken if the dojo.required code is loaded // asynchronously. To make sure you can execute code that depends on the dojo.required // modules, be sure to add the code that depends on the modules in a dojo.addOnLoad() // callback. dojo.addOnLoad waits for all outstanding modules to finish loading before // executing. Example: - // + // // | <script type="text/javascript"> // | dojo.require("foo"); // | dojo.require("bar"); @@ -923,36 +923,36 @@ dojo.global = { // | //you can now safely do something with foo and bar // | }); // | </script> - // + // // This type of syntax works with both xdomain and normal loaders, so it is good // practice to always use this idiom for on-the-fly code loading and in HTML script // blocks. If at some point you change loaders and where the code is loaded from, // it will all still work. - // + // // More on how dojo.require // `dojo.require("A.B")` first checks to see if symbol A.B is // defined. If it is, it is simply returned (nothing to do). - // + // // If it is not defined, it will look for `A/B.js` in the script root // directory. - // + // // `dojo.require` throws an excpetion if it cannot find a file // to load, or if the symbol `A.B` is not defined after loading. - // + // // It returns the object `A.B`, but note the caveats above about on-the-fly loading and // HTML script blocks when the xdomain loader is loading a module. - // + // // `dojo.require()` does nothing about importing symbols into // the current namespace. It is presumed that the caller will // take care of that. For example, to import all symbols into a // local block, you might write: - // + // // | with (dojo.require("A.B")) { // | ... // | } - // + // // And to import just the leaf symbol to a local variable: - // + // // | var B = dojo.require("A.B"); // | ... // returns: the required namespace object @@ -980,7 +980,7 @@ dojo.global = { // pass in false so we can give better error module = d._loadedModules[moduleName]; if(!module){ - throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); + throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); } } @@ -1001,14 +1001,14 @@ dojo.global = { // the file name. For example, `js/dojo/foo.js` must have // `dojo.provide("dojo.foo");` before any calls to // `dojo.require()` are made. - // + // // For backwards compatibility reasons, in addition to registering // the resource, `dojo.provide()` also ensures that the javascript // object for the module exists. For example, // `dojo.provide("dojox.data.FlickrStore")`, in addition to // registering that `FlickrStore.js` is a resource for the // `dojox.data` module, will ensure that the `dojox.data` - // javascript object exists, so that calls like + // javascript object exists, so that calls like // `dojo.data.foo = function(){ ... }` don't fail. // // In the case of a build where multiple javascript source files @@ -1017,11 +1017,11 @@ dojo.global = { // note that it includes multiple resources. // // resourceName: String - // A dot-sperated string identifying a resource. + // A dot-sperated string identifying a resource. // // example: // Safely create a `my` object, and make dojo.require("my.CustomModule") work - // | dojo.provide("my.CustomModule"); + // | dojo.provide("my.CustomModule"); //Make sure we have a string. resourceName = resourceName + ""; @@ -1074,11 +1074,11 @@ dojo.global = { // // example: // | dojo.requireIf(dojo.isBrowser, "my.special.Module"); - + if(condition === true){ // FIXME: why do we support chained require()'s here? does the build system? var args = []; - for(var i = 1; i < arguments.length; i++){ + for(var i = 1; i < arguments.length; i++){ args.push(arguments[i]); } d.require.apply(d, args); @@ -1088,13 +1088,13 @@ dojo.global = { dojo.requireAfterIf = d.requireIf; dojo.registerModulePath = function(/*String*/module, /*String*/prefix){ - // summary: + // summary: // Maps a module name to a path - // description: + // description: // An unregistered module is given the default path of ../[module], // relative to Dojo root. For example, module acme is mapped to // ../acme. If you want to use a different module name, use - // dojo.registerModulePath. + // dojo.registerModulePath. // example: // If your dojo.js is located at this location in the web root: // | /myapp/js/dojo/dojo/dojo.js @@ -1107,7 +1107,7 @@ dojo.global = { // At which point you can then use dojo.require() to load the // modules (assuming they provide() the same things which are // required). The full code might be: - // | <script type="text/javascript" + // | <script type="text/javascript" // | src="/myapp/js/dojo/dojo/dojo.js"></script> // | <script type="text/javascript"> // | dojo.registerModulePath("foo", "../../foo"); @@ -1128,7 +1128,7 @@ dojo.global = { // description: // Load translated resource bundles provided underneath the "nls" // directory within a package. Translated resources may be located in - // different packages throughout the source tree. + // different packages throughout the source tree. // // Each directory is named for a locale as specified by RFC 3066, // (http://www.ietf.org/rfc/rfc3066.txt), normalized in lowercase. @@ -1143,21 +1143,21 @@ dojo.global = { // preload the bundles to avoid data redundancy and the multiple // network hits normally required to load these resources. // - // moduleName: + // moduleName: // name of the package containing the "nls" directory in which the // bundle is found // - // bundleName: + // bundleName: // bundle name, i.e. the filename without the '.js' suffix. Using "nls" as a // a bundle name is not supported, since "nls" is the name of the folder // that holds bundles. Using "nls" as the bundle name will cause problems // with the custom build. // - // locale: + // locale: // the locale to load (optional) By default, the browser's user // locale as defined by dojo.locale // - // availableFlatLocales: + // availableFlatLocales: // A comma-separated list of the available, flattened locales for this // bundle. This argument should only be set by the build process. // @@ -1199,11 +1199,11 @@ dojo.global = { ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"); dojo._Url = function(/*dojo._Url|String...*/){ - // summary: + // summary: // Constructor to create an object representing a URL. // It is marked as private, since we might consider removing // or simplifying it. - // description: + // description: // Each argument is evaluated in order relative to the next until // a canonical uri is produced. To get an absolute Uri relative to // the current document use: @@ -1270,7 +1270,7 @@ dojo.global = { } uri = []; - if(relobj.scheme){ + if(relobj.scheme){ uri.push(relobj.scheme, ":"); } if(relobj.authority){ @@ -1310,7 +1310,7 @@ dojo.global = { dojo._Url.prototype.toString = function(){ return this.uri; }; dojo.moduleUrl = function(/*String*/module, /*dojo._Url||String*/url){ - // summary: + // summary: // Returns a `dojo._Url` object relative to a module. // example: // | var pngPath = dojo.moduleUrl("acme","images/small.png"); @@ -1318,10 +1318,10 @@ dojo.global = { // | // create an image and set it's source to pngPath's value: // | var img = document.createElement("img"); // | // NOTE: we assign the string representation of the url object - // | img.src = pngPath.toString(); + // | img.src = pngPath.toString(); // | // add our image to the document // | dojo.body().appendChild(img); - // example: + // example: // you may de-reference as far as you like down the package // hierarchy. This is sometimes handy to avoid lenghty relative // urls or for building portable sub-packages. In this example, @@ -1332,9 +1332,9 @@ dojo.global = { // | // somewhere in a configuration block // | dojo.registerModulePath("acme.widget", "../../acme/widget"); // | dojo.registerModulePath("acme.util", "../../util"); - // | + // | // | // ... - // | + // | // | // code in a module using acme resources // | var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html"); // | var dataPath = dojo.moduleUrl("acme.util","resources/data.json"); @@ -1344,7 +1344,7 @@ dojo.global = { if(loc.lastIndexOf("/") != loc.length-1){ loc += "/"; } - + //If the path is an absolute path (starts with a / or is on another //domain/xdomain) then don't add the baseUrl. var colonIndex = loc.indexOf(":"); @@ -1377,9 +1377,9 @@ dojo.isIE = { dojo.isSafari = { // example: // | if(dojo.isSafari){ ... } - // example: + // example: // Detect iPhone: - // | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ + // | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ // | // we are iPhone. Note, iPod touch reports "iPod" above and fails this test. // | } }; @@ -1513,7 +1513,7 @@ if(typeof window != 'undefined'){ if(dojo.isIE && window.location.protocol === "file:"){ dojo.config.ieForceActiveXXhr=true; } - + d.isQuirks = document.compatMode == "BackCompat"; // TODO: is the HTML LANG attribute relevant? @@ -1521,9 +1521,9 @@ if(typeof window != 'undefined'){ // These are in order of decreasing likelihood; this will change in time. d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; - + d._xhrObj = function(){ - // summary: + // summary: // does the work of portably generating a new XMLHTTPRequest object. var http, last_e; if(!dojo.isIE || !dojo.config.ieForceActiveXXhr){ @@ -1544,7 +1544,7 @@ if(typeof window != 'undefined'){ } } } - + if(!http){ throw new Error("XMLHTTP not available: "+last_e); } @@ -1613,7 +1613,7 @@ if(typeof window != 'undefined'){ } return http.responseText; // String } - + var _w = window; var _handleNodeEvent = function(/*String*/evtName, /*Function*/fp){ @@ -1631,7 +1631,7 @@ if(typeof window != 'undefined'){ d._windowUnloaders = []; - + d.windowUnloaded = function(){ // summary: // signal fired by impending window destruction. You may use @@ -1652,7 +1652,7 @@ if(typeof window != 'undefined'){ d.addOnWindowUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){ // summary: // registers a function to be triggered when window.onunload - // fires. + // fires. // description: // The first time that addOnWindowUnload is called Dojo // will register a page listener to trigger your unload @@ -1683,7 +1683,7 @@ if(typeof window != 'undefined'){ // description: // The first time that addOnUnload is called Dojo will // register a page listener to trigger your unload handler - // with. + // with. // // In a browser enviroment, the functions will be triggered // during the window.onbeforeunload event. Be careful of doing @@ -1696,7 +1696,7 @@ if(typeof window != 'undefined'){ // // Further note that calling dojo.addOnUnload will prevent // browsers from using a "fast back" cache to make page - // loading via back button instantaneous. + // loading via back button instantaneous. // example: // | dojo.addOnUnload(functionPointer) // | dojo.addOnUnload(object, "functionName") @@ -1898,7 +1898,7 @@ dojo.provide("dojo._base.lang"); // This allows for easy use of object member functions // in callbacks and other places in which the "this" keyword may // otherwise not reference the expected scope. - // Any number of default positional arguments may be passed as parameters + // Any number of default positional arguments may be passed as parameters // beyond "method". // Each of these values will be used to "placehold" (similar to curry) // for the hitched function. @@ -1924,7 +1924,7 @@ dojo.provide("dojo._base.lang"); // | var foo = { bar: 2 }; // | dojo.hitch(foo, function(){ this.bar = 10; })(); // execute an anonymous function in scope of foo - + if(arguments.length > 2){ return d._hitchArgs.apply(d, arguments); // Function } @@ -2015,7 +2015,7 @@ dojo.provide("dojo._base.lang"); } return arr; }; - + dojo._toArray = d.isIE ? function(obj){ return ((obj.item) ? slow : efficient).apply(this, arguments); @@ -2118,7 +2118,7 @@ dojo.provide("dojo._base.lang"); dojo.replace = function(tmpl, map, pattern){ // summary: // Performs parameterized substitutions on a string. Throws an - // exception if any parameter is unmatched. + // exception if any parameter is unmatched. // tmpl: String // String to be used as a template. // map: Object|Function @@ -2199,8 +2199,8 @@ dojo.provide("dojo._base.array"); (function(){ var _getParts = function(arr, obj, cb){ - return [ - (typeof arr == "string") ? arr.split("") : arr, + return [ + (typeof arr == "string") ? arr.split("") : arr, obj || dojo.global, // FIXME: cache the anonymous functions we create here? (typeof cb == "string") ? new Function("item", "index", "array", cb) : cb @@ -2219,7 +2219,7 @@ dojo.provide("dojo._base.array"); }; dojo.mixin(dojo, { - indexOf: function( /*Array*/ array, + indexOf: function( /*Array*/ array, /*Object*/ value, /*Integer?*/ fromIndex, /*Boolean?*/ findLast){ @@ -2228,7 +2228,7 @@ dojo.provide("dojo._base.array"); // passed array. If the value is not found, -1 is returned. // description: // This method corresponds to the JavaScript 1.6 Array.indexOf method, with one difference: when - // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript + // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript // 1.6's indexOf skips the holes in the sparse array. // For details on this method, see: // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf @@ -2253,7 +2253,7 @@ dojo.provide("dojo._base.array"); // array. If the value is not found, -1 is returned. // description: // This method corresponds to the JavaScript 1.6 Array.lastIndexOf method, with one difference: when - // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript + // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript // 1.6's lastIndexOf skips the holes in the sparse array. // For details on this method, see: // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/lastIndexOf @@ -2272,7 +2272,7 @@ dojo.provide("dojo._base.array"); // thisObject: // may be used to scope the call to callback // description: - // This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when + // This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when // run over sparse arrays, this implemenation passes the "holes" in the sparse array to // the callback function with a value of undefined. JavaScript 1.6's forEach skips the holes in the sparse array. // For more details, see: @@ -2295,21 +2295,21 @@ dojo.provide("dojo._base.array"); // | ); // example: // | // use a scoped object member as the callback - // | + // | // | var obj = { - // | prefix: "logged via obj.callback:", + // | prefix: "logged via obj.callback:", // | callback: function(item){ // | console.log(this.prefix, item); // | } // | }; - // | + // | // | // specifying the scope function executes the callback in that scope // | dojo.forEach( // | [ "thinger", "blah", "howdy", 10 ], // | obj.callback, // | obj // | ); - // | + // | // | // alternately, we can accomplish the same thing with dojo.hitch() // | dojo.forEach( // | [ "thinger", "blah", "howdy", 10 ], @@ -2322,7 +2322,7 @@ dojo.provide("dojo._base.array"); // FIXME: there are several ways of handilng thisObject. Is // dojo.global always the default context? var _p = _getParts(arr, thisObject, callback); arr = _p[0]; - for(var i=0,l=arr.length; i<l; ++i){ + for(var i=0,l=arr.length; i<l; ++i){ _p[2].call(_p[1], arr[i], i, arr); } }, @@ -2339,7 +2339,7 @@ dojo.provide("dojo._base.array"); // thisObject: // may be used to scope the call to callback // description: - // This function corresponds to the JavaScript 1.6 Array.every() method, with one difference: when + // This function corresponds to the JavaScript 1.6 Array.every() method, with one difference: when // run over sparse arrays, this implemenation passes the "holes" in the sparse array to // the callback function with a value of undefined. JavaScript 1.6's every skips the holes in the sparse array. // For more details, see: @@ -2348,7 +2348,7 @@ dojo.provide("dojo._base.array"); // | // returns false // | dojo.every([1, 2, 3, 4], function(item){ return item>1; }); // example: - // | // returns true + // | // returns true // | dojo.every([1, 2, 3, 4], function(item){ return item>0; }); return everyOrSome(true, arr, callback, thisObject); // Boolean }, @@ -2365,7 +2365,7 @@ dojo.provide("dojo._base.array"); // thisObject: // may be used to scope the call to callback // description: - // This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when + // This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when // run over sparse arrays, this implemenation passes the "holes" in the sparse array to // the callback function with a value of undefined. JavaScript 1.6's some skips the holes in the sparse array. // For more details, see: @@ -2392,7 +2392,7 @@ dojo.provide("dojo._base.array"); // thisObject: // may be used to scope the call to callback // description: - // This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when + // This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when // run over sparse arrays, this implemenation passes the "holes" in the sparse array to // the callback function with a value of undefined. JavaScript 1.6's map skips the holes in the sparse array. // For more details, see: @@ -2423,9 +2423,9 @@ dojo.provide("dojo._base.array"); // thisObject: // may be used to scope the call to callback // description: - // This function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when + // This function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when // run over sparse arrays, this implemenation passes the "holes" in the sparse array to - // the callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array. + // the callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array. // For more details, see: // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter // example: @@ -3437,11 +3437,11 @@ dojo.provide("dojo._base.connect"); dojo._listener = { // create a dispatcher function getDispatcher: function(){ - // following comments pulled out-of-line to prevent cloning them + // following comments pulled out-of-line to prevent cloning them // in the returned function. - // - indices (i) that are really in the array of listeners (ls) will + // - indices (i) that are really in the array of listeners (ls) will // not be in Array.prototype. This is the 'sparse array' trick - // that keeps us safe from libs that take liberties with built-in + // that keeps us safe from libs that take liberties with built-in // objects // - listener is invoked with current scope (this) return function(){ @@ -3451,7 +3451,7 @@ dojo._listener = { // make local copy of listener array so it is immutable during processing var lls; lls = [].concat(ls); - + // invoke listeners after target function for(var i in lls){ if(!(i in ap)){ @@ -3465,12 +3465,12 @@ dojo._listener = { // add a listener to an object add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){ // Whenever 'method' is invoked, 'listener' will have the same scope. - // Trying to supporting a context object for the listener led to - // complexity. + // Trying to supporting a context object for the listener led to + // complexity. // Non trivial to provide 'once' functionality here // because listener could be the result of a dojo.hitch call, // in which case two references to the same hitch target would not - // be equivalent. + // be equivalent. source = source || dojo.global; // The source method is either null, a dispatcher, or some other function var f = source[method]; @@ -3480,15 +3480,15 @@ dojo._listener = { // original target function is special d.target = f; // dispatcher holds a list of listeners - d._listeners = []; + d._listeners = []; // redirect source to dispatcher f = source[method] = d; } - // The contract is that a handle is returned that can - // identify this listener for disconnect. + // The contract is that a handle is returned that can + // identify this listener for disconnect. // - // The type of the handle is private. Here is it implemented as Integer. - // DOM event code has this same contract but handle is Function + // The type of the handle is private. Here is it implemented as Integer. + // DOM event code has this same contract but handle is Function // in non-IE browsers. // // We could have separate lists of before and after listeners. @@ -3510,9 +3510,9 @@ dojo._listener = { // and dontFix argument here to help the autodocs. Actual DOM aware code is in // event.js. -dojo.connect = function(/*Object|null*/ obj, - /*String*/ event, - /*Object|null*/ context, +dojo.connect = function(/*Object|null*/ obj, + /*String*/ event, + /*Object|null*/ context, /*String|Function*/ method, /*Boolean?*/ dontFix){ // summary: @@ -3547,37 +3547,37 @@ dojo.connect = function(/*Object|null*/ obj, // arguments may simply be omitted such that fewer than 4 arguments // may be required to set up a connection See the examples for deails. // - // The return value is a handle that is needed to + // The return value is a handle that is needed to // remove this connection with `dojo.disconnect`. // - // obj: - // The source object for the event function. + // obj: + // The source object for the event function. // Defaults to `dojo.global` if null. - // If obj is a DOM node, the connection is delegated + // If obj is a DOM node, the connection is delegated // to the DOM event manager (unless dontFix is true). // // event: - // String name of the event function in obj. + // String name of the event function in obj. // I.e. identifies a property `obj[event]`. // - // context: + // context: // The object that method will receive as "this". // // If context is null and method is a function, then method // inherits the context of event. - // - // If method is a string then context must be the source + // + // If method is a string then context must be the source // object object for method (context[method]). If context is null, // dojo.global is used. // // method: - // A function reference, or name of a function in context. - // The function identified by method fires after event does. + // A function reference, or name of a function in context. + // The function identified by method fires after event does. // method receives the same arguments as the event. // See context argument comments for information on method's scope. // // dontFix: - // If obj is a DOM node, set dontFix to true to prevent delegation + // If obj is a DOM node, set dontFix to true to prevent delegation // of this connection to the DOM event manager. // // example: @@ -3627,7 +3627,7 @@ dojo.connect = function(/*Object|null*/ obj, // used by non-browser hostenvs. always overriden by event.js dojo._connect = function(obj, event, context, method){ - var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method)); + var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method)); return [obj, event, h, l]; // Handle } @@ -3665,7 +3665,7 @@ dojo.subscribe = function(/*String*/ topic, /*Object|null*/ context, /*String|Fu // is invoked when topic is published. // example: // | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }); - // | dojo.publish("alerts", [ "read this", "hello world" ]); + // | dojo.publish("alerts", [ "read this", "hello world" ]); // support for 2 argument invocation (omitting context) depends on hitch return [topic, dojo._listener.add(dojo._topics, topic, dojo.hitch(context, method))]; /*Handle*/ @@ -3673,7 +3673,7 @@ dojo.subscribe = function(/*String*/ topic, /*Object|null*/ context, /*String|Fu dojo.unsubscribe = function(/*Handle*/ handle){ // summary: - // Remove a topic listener. + // Remove a topic listener. // handle: // The handle returned from a call to subscribe. // example: @@ -3691,11 +3691,11 @@ dojo.publish = function(/*String*/ topic, /*Array*/ args){ // topic: // The name of the topic to publish. // args: - // An array of arguments. The arguments will be applied + // An array of arguments. The arguments will be applied // to each topic subscriber (as first class parameters, via apply). // example: // | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }; - // | dojo.publish("alerts", [ "read this", "hello world" ]); + // | dojo.publish("alerts", [ "read this", "hello world" ]); // Note that args is an array, which is more efficient vs variable length // argument list. Ideally, var args would be implemented via Array @@ -3706,8 +3706,8 @@ dojo.publish = function(/*String*/ topic, /*Array*/ args){ } } -dojo.connectPublisher = function( /*String*/ topic, - /*Object|null*/ obj, +dojo.connectPublisher = function( /*String*/ topic, + /*Object|null*/ obj, /*String*/ event){ // summary: // Ensure that everytime obj.event() is called, a message is published @@ -3716,11 +3716,11 @@ dojo.connectPublisher = function( /*String*/ topic, // the topic. // topic: // The name of the topic to publish. - // obj: + // obj: // The source object for the event function. Defaults to dojo.global // if null. // event: - // The name of the event function in obj. + // The name of the event function in obj. // I.e. identifies a property obj[event]. // example: // | dojo.connectPublisher("/ajax/start", dojo, "xhrGet"); @@ -3781,7 +3781,7 @@ dojo.Deferred = function(/*Function?*/ canceller){ // The sequence of callbacks is internally represented as a list of // 2-tuples containing the callback/errback pair. For example, the // following call sequence: - // + // // | var d = new dojo.Deferred(); // | d.addCallback(myCallback); // | d.addErrback(myErrback); @@ -3804,7 +3804,7 @@ dojo.Deferred = function(/*Function?*/ canceller){ // * -1: no value yet (initial condition) // * 0: success // * 1: error - // + // // A Deferred will be in the error state if one of the following three // conditions are met: // @@ -3903,7 +3903,7 @@ dojo.Deferred = function(/*Function?*/ canceller){ // | renderDataitem(data[x]); // | } // | d.callback(true); - // | }catch(e){ + // | }catch(e){ // | d.errback(new Error("rendering failed")); // | } // | return d; @@ -3930,7 +3930,7 @@ dojo.Deferred = function(/*Function?*/ canceller){ // | renderDataitem(data[x]); // | } // | d.callback(true); - // | }catch(e){ + // | }catch(e){ // | d.errback(new Error("rendering failed")); // | } // | }, 100); @@ -3985,7 +3985,7 @@ dojo.extend(dojo.Deferred, { })(), cancel: function(){ - // summary: + // summary: // Cancels a Deferred that has not yet received a value, or is // waiting on another Deferred as its value. // description: @@ -4018,7 +4018,7 @@ dojo.extend(dojo.Deferred, { this.results[0].cancel(); } }, - + _resback: function(res){ // summary: @@ -4039,9 +4039,9 @@ dojo.extend(dojo.Deferred, { }, callback: function(res){ - // summary: + // summary: // Begin the callback sequence with a non-error value. - + /* callback or errback should only be called once on a given Deferred. @@ -4051,7 +4051,7 @@ dojo.extend(dojo.Deferred, { }, errback: function(/*Error*/res){ - // summary: + // summary: // Begin the callback sequence with an error result. this._check(); if(!(res instanceof Error)){ @@ -4070,19 +4070,19 @@ dojo.extend(dojo.Deferred, { }, addCallback: function(/*Function|Object*/cb, /*String?*/cbfn /*...*/){ - // summary: + // summary: // Add a single callback to the end of the callback sequence. return this.addCallbacks(dojo.hitch.apply(dojo, arguments)); // dojo.Deferred }, addErrback: function(cb, cbfn){ - // summary: + // summary: // Add a single callback to the end of the callback sequence. return this.addCallbacks(null, dojo.hitch.apply(dojo, arguments)); // dojo.Deferred }, addCallbacks: function(cb, eb){ - // summary: + // summary: // Add separate callback and errback to the end of the callback // sequence. this.chain.push([cb, eb]) @@ -4093,7 +4093,7 @@ dojo.extend(dojo.Deferred, { }, _fire: function(){ - // summary: + // summary: // Used internally to exhaust the callback sequence when a result // is available. this.isFiring = true; @@ -4122,7 +4122,7 @@ dojo.extend(dojo.Deferred, { // inlined from _pause() self.paused--; if( - (self.paused == 0) && + (self.paused == 0) && (self.fired >= 0) ){ self._fire(); @@ -4166,7 +4166,7 @@ dojo.fromJson = function(/*String*/ json){ // description: // Throws for invalid JSON strings, but it does not use a strict JSON parser. It // delegates to eval(). - // json: + // json: // a string literal of a JSON item, for instance: // `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'` @@ -4225,8 +4225,8 @@ dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _ind if(it === null){ return "null"; } - if(dojo.isString(it)){ - return dojo._escapeString(it); + if(dojo.isString(it)){ + return dojo._escapeString(it); } // recurse var recurse = arguments.callee; @@ -4497,7 +4497,7 @@ dojo.provide("dojo._base.Color"); // Builds a `dojo.Color` from a 3 or 4 element array, mapping each // element in sequence to the rgb(a) values of the color. // example: - // | var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha + // | var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha // returns: // A dojo.Color object. If obj is passed, it will be the return value. var t = obj || new d.Color(); @@ -4580,9 +4580,9 @@ dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocu dojo.doc = globalDocument; }; -dojo.withGlobal = function( /*Object*/globalObject, - /*Function*/callback, - /*Object?*/thisObject, +dojo.withGlobal = function( /*Object*/globalObject, + /*Function*/callback, + /*Object?*/thisObject, /*Array?*/cbArguments){ // summary: // Invoke callback with globalObject as dojo.global and @@ -4603,9 +4603,9 @@ dojo.withGlobal = function( /*Object*/globalObject, } } -dojo.withDoc = function( /*DocumentElement*/documentObject, - /*Function*/callback, - /*Object?*/thisObject, +dojo.withDoc = function( /*DocumentElement*/documentObject, + /*Function*/callback, + /*Object?*/thisObject, /*Array?*/cbArguments){ // summary: // Invoke callback with documentObject as dojo.doc. @@ -4636,7 +4636,7 @@ dojo.withDoc = function( /*DocumentElement*/documentObject, dojo.isQuirks = oldQ; } }; - + } @@ -4651,12 +4651,12 @@ dojo.provide("dojo._base.event"); // DOM event listener machinery var del = (dojo._event_listener = { add: function(/*DOMNode*/ node, /*String*/ name, /*Function*/ fp){ - if(!node){return;} + if(!node){return;} name = del._normalizeEventName(name); fp = del._fixCallback(name, fp); var oname = name; if( - !dojo.isIE && + !dojo.isIE && (name == "mouseenter" || name == "mouseleave") ){ var ofp = fp; @@ -4665,7 +4665,7 @@ dojo.provide("dojo._base.event"); fp = function(e){ if(!dojo.isDescendant(e.relatedTarget, node)){ // e.type = oname; // FIXME: doesn't take? SJM: event.type is generally immutable. - return ofp.call(this, e); + return ofp.call(this, e); } } } @@ -4706,7 +4706,7 @@ dojo.provide("dojo._base.event"); }, _fixEvent: function(evt, sender){ // _fixCallback only attaches us to keypress. - // Switch on evt.type anyway because we might + // Switch on evt.type anyway because we might // be called directly from dojo.fixEvent. switch(evt.type){ case "keypress": @@ -4722,25 +4722,25 @@ dojo.provide("dojo._base.event"); // For IE and Safari: some ctrl-key combinations (mostly w/punctuation) do not emit a char code in IE // we map those virtual key codes to ascii here // not valid for all (non-US) keyboards, so maybe we shouldn't bother - _punctMap: { - 106:42, - 111:47, - 186:59, - 187:43, - 188:44, - 189:45, - 190:46, - 191:47, - 192:96, - 219:91, - 220:92, - 221:93, - 222:39 + _punctMap: { + 106:42, + 111:47, + 186:59, + 187:43, + 188:44, + 189:45, + 190:46, + 191:47, + 192:96, + 219:91, + 220:92, + 221:93, + 222:39 } }); // DOM events - + dojo.fixEvent = function(/*Event*/ evt, /*DOMNode*/ sender){ // summary: // normalizes properties on the event object including event @@ -4765,7 +4765,7 @@ dojo.provide("dojo._base.event"); // the default listener to use on dontFix nodes, overriden for IE var node_listener = dojo._listener; - + // Unify connect and event listeners dojo._connect = function(obj, event, context, method, dontFix){ // FIXME: need a more strict test @@ -4776,7 +4776,7 @@ dojo.provide("dojo._base.event"); // create a listener var h = l.add(obj, event, dojo.hitch(context, method)); // formerly, the disconnect package contained "l" directly, but if client code - // leaks the disconnect package (by connecting it to a node), referencing "l" + // leaks the disconnect package (by connecting it to a node), referencing "l" // compounds the problem. // instead we return a listener id, which requires custom _disconnect below. // return disconnect package @@ -4857,9 +4857,9 @@ dojo.provide("dojo._base.event"); // virtual key mapping copyKey: dojo.isMac && !dojo.isAIR ? (dojo.isSafari ? 91 : 224 ) : 17 }; - + var evtCopyKey = dojo.isMac ? "metaKey" : "ctrlKey"; - + dojo.isCopyKey = function(e){ // summary: // Checks an event for the copy key (meta on Mac, and ctrl anywhere else) @@ -4881,7 +4881,7 @@ dojo.provide("dojo._base.event"); // RIGHT: Number // Numeric value of the right mouse button for the platform. RIGHT: 2, - + isButton: function(e, button){ // summary: // Checks an event object for a pressed button @@ -4938,9 +4938,9 @@ dojo.provide("dojo._base.event"); isRight: function(e){ return e.button == 2; } }; } - + // IE event normalization - if(dojo.isIE){ + if(dojo.isIE){ var _trySetKeyCode = function(e, code){ try{ // squelch errors when keyCode is read-only @@ -4958,7 +4958,7 @@ dojo.provide("dojo._base.event"); if(!dojo.config._allow_leaks){ // custom listener that handles leak protection for DOM events node_listener = iel = dojo._ie_listener = { - // support handler indirection: event handler functions are + // support handler indirection: event handler functions are // referenced here. Event dispatchers hold only indices. handlers: [], // add a listener to an object @@ -5011,7 +5011,7 @@ dojo.provide("dojo._base.event"); }, remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){ event = del._normalizeEventName(event); - iel.remove(node, event, handle); + iel.remove(node, event, handle); if(event=="onkeypress"){ var kd = node.onkeydown; if(--kd._stealthKeydownRefs <= 0){ @@ -5037,11 +5037,11 @@ dojo.provide("dojo._base.event"); // node to treat as "currentTarget" if(!evt){ var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window; - evt = w.event; + evt = w.event; } if(!evt){return(evt);} - evt.target = evt.srcElement; - evt.currentTarget = (sender || evt.srcElement); + evt.target = evt.srcElement; + evt.currentTarget = (sender || evt.srcElement); evt.layerX = evt.offsetX; evt.layerY = evt.offsetY; // FIXME: scroll position query is duped from dojo.html to @@ -5054,10 +5054,10 @@ dojo.provide("dojo._base.event"); var offset = dojo._getIeDocumentElementOffset(); evt.pageX = evt.clientX + dojo._fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x; evt.pageY = evt.clientY + (docBody.scrollTop || 0) - offset.y; - if(evt.type == "mouseover"){ + if(evt.type == "mouseover"){ evt.relatedTarget = evt.fromElement; } - if(evt.type == "mouseout"){ + if(evt.type == "mouseout"){ evt.relatedTarget = evt.toElement; } evt.stopPropagation = del._stopPropagation; @@ -5101,12 +5101,12 @@ dojo.provide("dojo._base.event"); var c = unprintable ? 0 : k; if(evt.ctrlKey){ if(k==3 || k==13){ - return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively - }else if(c>95 && c<106){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ c -= 48; // map CTRL-[numpad 0-9] to ASCII - }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ + }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ c += 32; // map CTRL-[A-Z] to lowercase - }else{ + }else{ c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII } } @@ -5120,13 +5120,13 @@ dojo.provide("dojo._base.event"); }, // Called in Event scope _stopPropagation: function(){ - this.cancelBubble = true; + this.cancelBubble = true; }, _preventDefault: function(){ // Setting keyCode to 0 is the only way to prevent certain keypresses (namely // ctrl-combinations that correspond to menu accelerator keys). // Otoh, it prevents upstream listeners from getting this information - // Try to split the difference here by clobbering keyCode only for ctrl + // Try to split the difference here by clobbering keyCode only for ctrl // combinations. If you still need to access the key upstream, bubbledKeyCode is // provided as a workaround. this.bubbledKeyCode = this.keyCode; @@ -5134,7 +5134,7 @@ dojo.provide("dojo._base.event"); this.returnValue = false; } }); - + // override stopEvent for IE dojo.stopEvent = function(evt){ evt = evt || window.event; @@ -5142,18 +5142,18 @@ dojo.provide("dojo._base.event"); del._preventDefault.call(evt); } } - + del._synthesizeEvent = function(evt, props){ var faux = dojo.mixin({}, evt, props); del._setKeyChar(faux); - // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); + // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); // but it throws an error when preventDefault is invoked on Safari // does Event.preventDefault not support "apply" on Safari? - faux.preventDefault = function(){ evt.preventDefault(); }; - faux.stopPropagation = function(){ evt.stopPropagation(); }; + faux.preventDefault = function(){ evt.preventDefault(); }; + faux.stopPropagation = function(){ evt.stopPropagation(); }; return faux; } - + // Opera event normalization if(dojo.isOpera){ dojo.mixin(del, { @@ -5177,7 +5177,7 @@ dojo.provide("dojo._base.event"); } }); } - + // Webkit event normalization if(dojo.isWebKit){ del._add = del.add; @@ -5203,12 +5203,12 @@ dojo.provide("dojo._base.event"); var c = unprintable ? 0 : k; if(evt.ctrlKey){ if(k==3 || k==13){ - return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively - }else if(c>95 && c<106){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ c -= 48; // map CTRL-[numpad 0-9] to ASCII - }else if(!evt.shiftKey && c>=65 && c<=90){ + }else if(!evt.shiftKey && c>=65 && c<=90){ c += 32; // map CTRL-[A-Z] to lowercase - }else{ + }else{ c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII } } @@ -5333,7 +5333,7 @@ if(dojo.isIE || dojo.isOpera){ return id; } var _d = doc || dojo.doc, te = _d.getElementById(id); - // attributes.id.value is better than just id in case the + // attributes.id.value is better than just id in case the // user has a name=id inside a form if(te && (te.attributes.id.value == id || te.id == id)){ return te; @@ -5371,7 +5371,7 @@ if(dojo.isIE || dojo.isOpera){ d.addOnWindowUnload(function(){ _destroyContainer = null; //prevent IE leak }); - + /*===== dojo._destroyElement = function(node){ // summary: @@ -5438,16 +5438,16 @@ if(dojo.isIE || dojo.isOpera){ }; dojo.setSelectable = function(/*DomNode|String*/node, /*Boolean*/selectable){ - // summary: + // summary: // Enable or disable selection on a node // node: // id or reference to node // selectable: - // state to put the node in. false indicates unselectable, true + // state to put the node in. false indicates unselectable, true // allows selection. // example: // Make the node id="bar" unselectable - // | dojo.setSelectable("bar"); + // | dojo.setSelectable("bar"); // example: // Make the node id="bar" selectable // | dojo.setSelectable("bar", true); @@ -5577,7 +5577,7 @@ if(dojo.isIE || dojo.isOpera){ dojo.boxModel = "content-box"; // We punt per-node box mode testing completely. - // If anybody cares, we can provide an additional (optional) unit + // If anybody cares, we can provide an additional (optional) unit // that overrides existing code to include per-node box sensitivity. // Opera documentation claims that Opera 9 uses border-box in BackCompat mode. @@ -5589,7 +5589,7 @@ if(dojo.isIE || dojo.isOpera){ // client code may have to adjust if compatMode varies across iframes d.boxModel = document.compatMode == "BackCompat" ? "border-box" : "content-box"; } - + // ============================= // Style Functions // ============================= @@ -5597,10 +5597,10 @@ if(dojo.isIE || dojo.isOpera){ // getComputedStyle drives most of the style code. // Wherever possible, reuse the returned object. // - // API functions below that need to access computed styles accept an + // API functions below that need to access computed styles accept an // optional computedStyle parameter. // If this parameter is omitted, the functions will call getComputedStyle themselves. - // This way, calling code can access computedStyle once, and then pass the reference to + // This way, calling code can access computedStyle once, and then pass the reference to // multiple API functions. /*===== @@ -5639,7 +5639,7 @@ if(dojo.isIE || dojo.isOpera){ // Although we normally eschew argument validation at this // level, here we test argument 'node' for (duck)type, // by testing nodeType, ecause 'document' is the 'parentNode' of 'body' - // it is frequently sent to this function even + // it is frequently sent to this function even // though it is not Element. var gcs; if(d.isWebKit){ @@ -5824,7 +5824,7 @@ if(dojo.isIE || dojo.isOpera){ // Also when getting values, use specific style names, // like "borderBottomWidth" instead of "border" since compound values like // "border" are not necessarily reflected as expected. - // If you want to get node dimensions, use `dojo.marginBox()`, + // If you want to get node dimensions, use `dojo.marginBox()`, // `dojo.contentBox()` or `dojo.position()`. // node: // id or reference to node to get/set style for @@ -5906,13 +5906,13 @@ if(dojo.isIE || dojo.isOpera){ // description: // Returns an object with `w`, `h`, `l`, `t` properties: // | l/t = left/top padding (respectively) - // | w = the total of the left and right padding + // | w = the total of the left and right padding // | h = the total of the top and bottom padding // If 'node' has position, l/t forms the origin for child nodes. // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var + var s = computedStyle||gcs(n), l = px(n, s.paddingLeft), t = px(n, s.paddingTop); @@ -5936,7 +5936,7 @@ if(dojo.isIE || dojo.isOpera){ // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var + var ne = "none", s = computedStyle||gcs(n), bl = (s.borderLeftStyle != ne ? px(n, s.borderLeftWidth) : 0), @@ -5961,7 +5961,7 @@ if(dojo.isIE || dojo.isOpera){ // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var + var s = computedStyle||gcs(n), p = d._getPadExtents(n, s), b = d._getBorderExtents(n, s); @@ -5985,7 +5985,7 @@ if(dojo.isIE || dojo.isOpera){ // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var + var s = computedStyle||gcs(n), l = px(n, s.marginLeft), t = px(n, s.marginTop), @@ -5993,9 +5993,9 @@ if(dojo.isIE || dojo.isOpera){ b = px(n, s.marginBottom); if(d.isWebKit && (s.position != "absolute")){ // FIXME: Safari's version of the computed right margin - // is the space between our right edge and the right edge + // is the space between our right edge and the right edge // of our offsetParent. - // What we are looking for is the actual margin value as + // What we are looking for is the actual margin value as // determined by CSS. // Hack solution is to assume left/right margins are the same. r = l; @@ -6014,10 +6014,10 @@ if(dojo.isIE || dojo.isOpera){ // They do *not* work for display: inline objects that have padding styles // because the user agent ignores padding (it's bogus styling in any case) // - // Be careful with IMGs because they are inline or block depending on + // Be careful with IMGs because they are inline or block depending on // browser and browser mode. - // Although it would be easier to read, there are not separate versions of + // Although it would be easier to read, there are not separate versions of // _getMarginBox for each browser because: // 1. the branching is not expensive // 2. factoring the shared code wastes cycles (function call overhead) @@ -6061,7 +6061,7 @@ if(dojo.isIE || dojo.isOpera){ l: l, t: t, w: node.offsetWidth + me.w, - h: node.offsetHeight + me.h + h: node.offsetHeight + me.h }; } @@ -6116,12 +6116,12 @@ if(dojo.isIE || dojo.isOpera){ // Beware of display: inline objects that have padding styles // because the user agent ignores padding (it's a bogus setup anyway) // - // Be careful with IMGs because they are inline or block depending on + // Be careful with IMGs because they are inline or block depending on // browser and browser mode. // // Elements other than DIV may have special quirks, like built-in // margins or padding, or values not detectable via computedStyle. - // In particular, margins on TABLE do not seems to appear + // In particular, margins on TABLE do not seems to appear // at all in computedStyle on Mozilla. dojo._setBox = function(/*DomNode*/node, /*Number?*/l, /*Number?*/t, /*Number?*/w, /*Number?*/h, /*String?*/u){ @@ -6245,7 +6245,7 @@ if(dojo.isIE || dojo.isOpera){ // Set a node's marginbox to the size of another node // | var box = dojo.marginBox("someNodeId"); // | dojo.marginBox("someOtherNode", box); - + var n = byId(node), s = gcs(n), b = box; return !b ? d._getMarginBox(n, s) : d._setMarginBox(n, b.l, b.t, b.w, b.h, s); // Object } @@ -6273,7 +6273,7 @@ if(dojo.isIE || dojo.isOpera){ } // ============================= - // Positioning + // Positioning // ============================= var _sumAncestorProperties = function(node, prop){ @@ -6304,7 +6304,7 @@ if(dojo.isIE || dojo.isOpera){ dojo._isBodyLtr = function(){ return "_bodyLtr" in d? d._bodyLtr : - d._bodyLtr = (d.body().dir || d.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean + d._bodyLtr = (d.body().dir || d.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean } dojo._getIeDocumentElementOffset = function(){ @@ -6326,7 +6326,7 @@ if(dojo.isIE || dojo.isOpera){ //NOTE: assumes we're being called in an IE browser - var de = d.doc.documentElement; // only deal with HTML element here, _abs handles body/quirks + var de = d.doc.documentElement; // only deal with HTML element here, _abs handles body/quirks if(d.isIE < 8){ var r = de.getBoundingClientRect(); // works well for IE6+ @@ -6349,7 +6349,7 @@ if(dojo.isIE || dojo.isOpera){ } }; - + dojo._fixIeBiDiScrollLeft = function(/*Integer*/ scrollLeft){ // In RTL direction, scrollLeft should be a negative value, but IE < 8 // returns a positive one. All codes using documentElement.scrollLeft @@ -6759,7 +6759,7 @@ if(dojo.isIE || dojo.isOpera){ // Attributes are set by passing the optional object through `dojo.attr`. // See `dojo.attr` for noted caveats and nuances, and API if applicable. //| - // Placement is done via `dojo.place`, assuming the new node to be the action + // Placement is done via `dojo.place`, assuming the new node to be the action // node, passing along the optional reference node and position. // // tag: String|DomNode @@ -6797,7 +6797,7 @@ if(dojo.isIE || dojo.isOpera){ // | var n = dojo.create("div", null, dojo.body()); // // example: - // Create an UL, and populate it with LI's. Place the list as the first-child of a + // Create an UL, and populate it with LI's. Place the list as the first-child of a // node with id="someId": // | var ul = dojo.create("ul", null, "someId", "first"); // | var items = ["one", "two", "three", "four"]; @@ -7560,7 +7560,7 @@ dojo.provide("dojo._base.NodeList"); indexOf: function(value, fromIndex){ // summary: - // see dojo.indexOf(). The primary difference is that the acted-on + // see dojo.indexOf(). The primary difference is that the acted-on // array is implicitly this NodeList // value: Object: // The value to search for. @@ -7664,12 +7664,12 @@ dojo.provide("dojo._base.NodeList"); forEach: function(callback, thisObj){ // summary: - // see `dojo.forEach()`. The primary difference is that the acted-on + // see `dojo.forEach()`. The primary difference is that the acted-on // array is implicitly this NodeList. If you want the option to break out // of the forEach loop, use every() or some() instead. d.forEach(this, callback, thisObj); // non-standard return to allow easier chaining - return this; // dojo.NodeList + return this; // dojo.NodeList }, /*===== @@ -7686,7 +7686,7 @@ dojo.provide("dojo._base.NodeList"); // summary: // Returns border-box objects (x/y/w/h) of all elements in a node list // as an Array (*not* a NodeList). Acts like `dojo.position`, though - // assumes the node passed is each node in this list. + // assumes the node passed is each node in this list. return d.map(this, d.position); // Array }, @@ -7774,7 +7774,7 @@ dojo.provide("dojo._base.NodeList"); // if 2 arguments are passed (methodName, objOrFunc), objOrFunc should // reference a function or be the name of the function in the global // namespace to attach. If 3 arguments are provided - // (methodName, objOrFunc, funcName), objOrFunc must be the scope to + // (methodName, objOrFunc, funcName), objOrFunc must be the scope to // locate the bound function in // funcName: String? // optional. A string naming the function in objOrFunc to bind to the @@ -7820,7 +7820,7 @@ dojo.provide("dojo._base.NodeList"); // by queryOrNode. Returns the original NodeList. See: `dojo.place` // queryOrNode: // may be a string representing any valid CSS3 selector or a DOM node. - // In the selector case, only the first matching element will be used + // In the selector case, only the first matching element will be used // for relative positioning. // position: // can be one of: @@ -7845,7 +7845,7 @@ dojo.provide("dojo._base.NodeList"); // anything which does not invoke a descent to evaluate but // can instead be used to test a single node is acceptable. // returns: - // `dojo.NodeList` containing the orpahned elements + // `dojo.NodeList` containing the orpahned elements return (simpleFilter ? d._filterQueryResult(this, simpleFilter) : this).forEach(orphan); // dojo.NodeList }, @@ -8088,8 +8088,8 @@ if(!dojo._hasResource["dojo._base.query"]){ //_hasResource checks added by build dojo._hasResource["dojo._base.query"] = true; if(typeof dojo != "undefined"){ dojo.provide("dojo._base.query"); - - + + } @@ -8100,7 +8100,7 @@ if(typeof dojo != "undefined"){ designed to take any valid CSS3 selector and return the nodes matching the selector. To do this quickly, it processes queries in several steps, applying caching where profitable. - + The steps (roughly in reverse order of the way they appear in the code): 1.) check to see if we already have a "query dispatcher" - if so, use that with the given parameterization. Skip to step 4. @@ -8175,7 +8175,7 @@ if(typeof dojo != "undefined"){ //////////////////////////////////////////////////////////////////////// var getQueryParts = function(query){ - // summary: + // summary: // state machine for query tokenization // description: // instead of using a brittle and slow regex-based CSS parser, @@ -8191,7 +8191,7 @@ if(typeof dojo != "undefined"){ // below. - // NOTE: + // NOTE: // this code is designed to run fast and compress well. Sacrifices // to readibility and maintainability have been made. Your best // bet when hacking the tokenizer is to put The Donnas on *really* @@ -8209,7 +8209,7 @@ if(typeof dojo != "undefined"){ } var ts = function(/*Integer*/ s, /*Integer*/ e){ - // trim and slice. + // trim and slice. // take an index to start a string slice from and an end position // and return a trimmed copy of that sub-string @@ -8217,12 +8217,12 @@ if(typeof dojo != "undefined"){ } // the overall data graph of the full query, as represented by queryPart objects - var queryParts = []; + var queryParts = []; // state keeping vars - var inBrackets = -1, inParens = -1, inMatchFor = -1, - inPseudo = -1, inClass = -1, inId = -1, inTag = -1, + var inBrackets = -1, inParens = -1, inMatchFor = -1, + inPseudo = -1, inClass = -1, inId = -1, inTag = -1, lc = "", cc = "", pStart; // iteration vars @@ -8286,9 +8286,9 @@ if(typeof dojo != "undefined"){ // needs to do any iteration. Many simple selectors don't, and // we can avoid significant construction-time work by advising // the system to skip them - currentPart.loops = ( - currentPart.pseudos.length || - currentPart.attrs.length || + currentPart.loops = ( + currentPart.pseudos.length || + currentPart.attrs.length || currentPart.classes.length ); currentPart.oquery = currentPart.query = ts(pStart, x); // save the full expression as a string @@ -8318,9 +8318,9 @@ if(typeof dojo != "undefined"){ currentPart.infixOper = queryParts.pop(); currentPart.query = currentPart.infixOper.query + " " + currentPart.query; /* - console.debug( "swapping out the infix", - currentPart.infixOper, - "and attaching it to", + console.debug( "swapping out the infix", + currentPart.infixOper, + "and attaching it to", currentPart); */ } @@ -8329,7 +8329,7 @@ if(typeof dojo != "undefined"){ currentPart = null; } - // iterate over the query, charachter by charachter, building up a + // iterate over the query, charachter by charachter, building up a // list of query part objects for(; lc=cc, cc=query.charAt(x), x < ql; x++){ // cc: the current character in the match @@ -8337,7 +8337,7 @@ if(typeof dojo != "undefined"){ // someone is trying to escape something, so don't try to match any // fragments. We assume we're inside a literal. - if(lc == "\\"){ continue; } + if(lc == "\\"){ continue; } if(!currentPart){ // a part was just ended or none has yet been created // NOTE: I hate all this alloc, but it's shorter than writing tons of if's pStart = x; @@ -8380,7 +8380,7 @@ if(typeof dojo != "undefined"){ // the beginning of a match, which should be a tag name. This // might fault a little later on, but we detect that and this // iteration will still be fine. - inTag = x; + inTag = x; } if(inBrackets >= 0){ @@ -8399,19 +8399,19 @@ if(typeof dojo != "undefined"){ var cmf = _cp.matchFor; if(cmf){ // try to strip quotes from the matchFor value. We want - // [attrName=howdy] to match the same + // [attrName=howdy] to match the same // as [attrName = 'howdy' ] if( (cmf.charAt(0) == '"') || (cmf.charAt(0) == "'") ){ _cp.matchFor = cmf.slice(1, -1); } } - // end the attribute by adding it to the list of attributes. + // end the attribute by adding it to the list of attributes. currentPart.attrs.push(_cp); _cp = null; // necessary? inBrackets = inMatchFor = -1; }else if(cc == "="){ // if the last char was an operator prefix, make sure we - // record it along with the "=" operator. + // record it along with the "=" operator. var addToCc = ("|~^$*".indexOf(lc) >=0 ) ? lc : ""; _cp.type = addToCc+cc; _cp.attr = ts(inBrackets+1, x-addToCc.length); @@ -8441,7 +8441,7 @@ if(typeof dojo != "undefined"){ endAll(); inPseudo = x; }else if(cc == "["){ - // start of an attribute match. + // start of an attribute match. endAll(); inBrackets = x; // provide a new structure for the attribute match to fill-in @@ -8455,15 +8455,15 @@ if(typeof dojo != "undefined"){ // expression if we're already inside a pseudo-selector match if(inPseudo >= 0){ // provide a new structure for the pseudo match to fill-in - _cp = { - name: ts(inPseudo+1, x), + _cp = { + name: ts(inPseudo+1, x), value: null } currentPart.pseudos.push(_cp); } inParens = x; }else if( - (cc == " ") && + (cc == " ") && // if it's a space char and the last char is too, consume the // current one without doing more work (lc != cc) @@ -8473,7 +8473,7 @@ if(typeof dojo != "undefined"){ } return queryParts; }; - + //////////////////////////////////////////////////////////////////////// // DOM query infrastructure @@ -8535,7 +8535,7 @@ if(typeof dojo != "undefined"){ } }, "$=": function(attr, value){ - // E[foo$="bar"] + // E[foo$="bar"] // an E element whose "foo" attribute value ends exactly // with the string "bar" var tval = " "+value; @@ -8545,7 +8545,7 @@ if(typeof dojo != "undefined"){ } }, "~=": function(attr, value){ - // E[foo~="bar"] + // E[foo~="bar"] // an E element whose "foo" attribute value is a list of // space-separated values, one of which is exactly equal // to "bar" @@ -8623,9 +8623,9 @@ if(typeof dojo != "undefined"){ root["_l"] = l; ci = -1; for(var te = root["firstElementChild"]||root["firstChild"]; te; te = te[_ns]){ - if(_simpleNodeTest(te)){ + if(_simpleNodeTest(te)){ te["_i"] = ++i; - if(node === te){ + if(node === te){ // NOTE: // shortcuting the return at this step in indexing works // very well for benchmarking but we avoid it here since @@ -8658,7 +8658,7 @@ if(typeof dojo != "undefined"){ "first-child": function(){ return _lookLeft; }, "last-child": function(){ return _lookRight; }, "only-child": function(name, condition){ - return function(node){ + return function(node){ if(!_lookLeft(node)){ return false; } if(!_lookRight(node)){ return false; } return true; @@ -8689,7 +8689,7 @@ if(typeof dojo != "undefined"){ }, "not": function(name, condition){ var p = getQueryParts(condition)[0]; - var ignores = { el: 1 }; + var ignores = { el: 1 }; if(p.tag != "*"){ ignores.tag = 1; } @@ -8832,7 +8832,7 @@ if(typeof dojo != "undefined"){ if(!("id" in ignores)){ if(query.id){ - ff = agree(ff, function(elem){ + ff = agree(ff, function(elem){ return (!!elem && (elem.id == query.id)); }); } @@ -8840,7 +8840,7 @@ if(typeof dojo != "undefined"){ if(!ff){ if(!("default" in ignores)){ - ff = yesman; + ff = yesman; } } return ff; @@ -8891,14 +8891,14 @@ if(typeof dojo != "undefined"){ _simpleNodeTest(te) && (!bag || _isUnique(te, bag)) && (filterFunc(te, x)) - ){ + ){ ret.push(te); } } return ret; }; }; - + /* // thanks, Dean! var itemIsAfterRoot = d.isIE ? function(item, root){ @@ -8986,7 +8986,7 @@ if(typeof dojo != "undefined"){ var filterFunc = getSimpleFilterFunc(query, { el: 1 }); var qt = query.tag; var wildcardTag = ("*" == qt); - var ecs = getDoc()["getElementsByClassName"]; + var ecs = getDoc()["getElementsByClassName"]; if(!oper){ // if there's no infix operator, then it's a descendant query. ID @@ -8996,8 +8996,8 @@ if(typeof dojo != "undefined"){ // testing shows that the overhead of yesman() is acceptable // and can save us some bytes vs. re-defining the function // everywhere. - filterFunc = (!query.loops && wildcardTag) ? - yesman : + filterFunc = (!query.loops && wildcardTag) ? + yesman : getSimpleFilterFunc(query, { el: 1, id: 1 }); retFunc = function(root, arr){ @@ -9012,9 +9012,9 @@ if(typeof dojo != "undefined"){ } } }else if( - ecs && + ecs && // isAlien check. Workaround for Prototype.js being totally evil/dumb. - /\{\s*\[native code\]\s*\}/.test(String(ecs)) && + /\{\s*\[native code\]\s*\}/.test(String(ecs)) && query.classes.length && !cssCaseBug ){ @@ -9180,8 +9180,8 @@ if(typeof dojo != "undefined"){ // We need te detect the right "internal" webkit version to make this work. var wk = "WebKit/"; var is525 = ( - d.isWebKit && - (nua.indexOf(wk) > 0) && + d.isWebKit && + (nua.indexOf(wk) > 0) && (parseFloat(nua.split(wk)[1]) > 528) ); @@ -9192,7 +9192,7 @@ if(typeof dojo != "undefined"){ var qsa = "querySelectorAll"; var qsaAvail = ( - !!getDoc()[qsa] && + !!getDoc()[qsa] && // see #5832 (!d.isSafari || (d.isSafari > 3.1) || is525 ) ); @@ -9221,7 +9221,7 @@ if(typeof dojo != "undefined"){ var domCached = _queryFuncCacheDOM[query]; if(domCached){ return domCached; } - // TODO: + // TODO: // today we're caching DOM and QSA branches separately so we // recalc useQSA every time. If we had a way to tag root+query // efficiently, we'd be in good shape to do a global cache. @@ -9235,11 +9235,11 @@ if(typeof dojo != "undefined"){ forceDOM = true; } - var useQSA = ( + var useQSA = ( qsaAvail && (!forceDOM) && // as per CSS 3, we can't currently start w/ combinator: // http://www.w3.org/TR/css3-selectors/#w3cselgrammar - (specials.indexOf(qcz) == -1) && + (specials.indexOf(qcz) == -1) && // IE's QSA impl sucks on pseudos (!d.isIE || (query.indexOf(":") == -1)) && @@ -9252,11 +9252,11 @@ if(typeof dojo != "undefined"){ // elements, even though according to spec, selected options should // match :checked. So go nonQSA for it: // http://bugs.dojotoolkit.org/ticket/5179 - (query.indexOf(":contains") == -1) && (query.indexOf(":checked") == -1) && + (query.indexOf(":contains") == -1) && (query.indexOf(":checked") == -1) && (query.indexOf("|=") == -1) // some browsers don't grok it ); - // TODO: + // TODO: // if we've got a descendant query (e.g., "> .thinger" instead of // just ".thinger") in a QSA-able doc, but are passed a child as a // root, it should be possible to give the item a synthetic ID and @@ -9265,7 +9265,7 @@ if(typeof dojo != "undefined"){ if(useQSA){ - var tq = (specials.indexOf(query.charAt(query.length-1)) >= 0) ? + var tq = (specials.indexOf(query.charAt(query.length-1)) >= 0) ? (query + " *") : query; return _queryFuncCacheQSA[query] = function(root){ try{ @@ -9292,9 +9292,9 @@ if(typeof dojo != "undefined"){ }else{ // DOM branch var parts = query.split(/\s*,\s*/); - return _queryFuncCacheDOM[query] = ((parts.length < 2) ? + return _queryFuncCacheDOM[query] = ((parts.length < 2) ? // if not a compound query (e.g., ".foo, .bar"), cache and return a dispatcher - getStepQueryFunc(query) : + getStepQueryFunc(query) : // if it *is* a complex query, break it up into its // constituent parts and return a dispatcher that will // merge the parts when run @@ -9324,7 +9324,7 @@ if(typeof dojo != "undefined"){ }else{ return node.uniqueID; } - } : + } : function(node){ return (node._uid || (node._uid = ++_zipIdx)); }; @@ -9333,7 +9333,7 @@ if(typeof dojo != "undefined"){ // to flatten a list of unique items, but rather just tell if the item in // question is already in the bag. Normally we'd just use hash lookup to do // this for us but IE's DOM is busted so we can't really count on that. On - // the upside, it gives us a built in unique ID function. + // the upside, it gives us a built in unique ID function. var _isUnique = function(node, bag){ if(!bag){ return 1; } var id = _nodeUID(node); @@ -9345,7 +9345,7 @@ if(typeof dojo != "undefined"){ // returning a list of "uniques", hopefully in doucment order var _zipIdxName = "_zipIdx"; var _zip = function(arr){ - if(arr && arr.nozip){ + if(arr && arr.nozip){ return (qlc._wrap) ? qlc._wrap(arr) : arr; } // var ret = new d._NodeListCtor(); @@ -9357,14 +9357,14 @@ if(typeof dojo != "undefined"){ if(arr.length < 2){ return ret; } _zipIdx++; - + // we have to fork here for IE and XML docs because we can't set // expandos on their nodes (apparently). *sigh* if(d.isIE && caseSensitive){ var szidx = _zipIdx+""; arr[0].setAttribute(_zipIdxName, szidx); for(var x = 1, te; te = arr[x]; x++){ - if(arr[x].getAttribute(_zipIdxName) != szidx){ + if(arr[x].getAttribute(_zipIdxName) != szidx){ ret.push(te); } te.setAttribute(_zipIdxName, szidx); @@ -9372,7 +9372,7 @@ if(typeof dojo != "undefined"){ }else if(d.isIE && arr.commentStrip){ try{ for(var x = 1, te; te = arr[x]; x++){ - if(_isElement(te)){ + if(_isElement(te)){ ret.push(te); } } @@ -9380,7 +9380,7 @@ if(typeof dojo != "undefined"){ }else{ if(arr[0]){ arr[0][_zipIdxName] = _zipIdx; } for(var x = 1, te; te = arr[x]; x++){ - if(arr[x][_zipIdxName] != _zipIdx){ + if(arr[x][_zipIdxName] != _zipIdx){ ret.push(te); } te[_zipIdxName] = _zipIdx; @@ -9410,7 +9410,7 @@ if(typeof dojo != "undefined"){ // * class selectors (e.g., `.foo`) // * node type selectors like `span` // * ` ` descendant selectors - // * `>` child element selectors + // * `>` child element selectors // * `#foo` style ID selectors // * `*` universal selector // * `~`, the immediately preceeded-by sibling selector @@ -9435,14 +9435,14 @@ if(typeof dojo != "undefined"){ // palette of selectors and when combined with functions for // manipulation presented by dojo.NodeList, many types of DOM // manipulation operations become very straightforward. - // + // // Unsupported Selectors: // ---------------------- // // While dojo.query handles many CSS3 selectors, some fall outside of // what's resaonable for a programmatic node querying engine to // handle. Currently unsupported selectors include: - // + // // * namespace-differentiated selectors of any form // * all `::` pseduo-element selectors // * certain pseduo-selectors which don't get a lot of day-to-day use: @@ -9451,10 +9451,10 @@ if(typeof dojo != "undefined"){ // | * `:root`, `:active`, `:hover`, `:visisted`, `:link`, // `:enabled`, `:disabled` // * `:*-of-type` pseudo selectors - // + // // dojo.query and XML Documents: // ----------------------------- - // + // // `dojo.query` (as of dojo 1.2) supports searching XML documents // in a case-sensitive manner. If an HTML document is served with // a doctype that forces case-sensitivity (e.g., XHTML 1.1 @@ -9564,12 +9564,12 @@ if(typeof dojo != "undefined"){ // NOTE: // Opera in XHTML mode doesn't detect case-sensitivity correctly // and it's not clear that there's any way to test for it - caseSensitive = (root.contentType && root.contentType=="application/xml") || + caseSensitive = (root.contentType && root.contentType=="application/xml") || (d.isOpera && (root.doctype || od.toString() == "[object XMLDocument]")) || - (!!od) && + (!!od) && (d.isIE ? od.xml : (root.xmlVersion||od.xmlVersion)); - // NOTE: + // NOTE: // adding "true" as the 2nd argument to getQueryFunc is useful for // testing the DOM branch without worrying about the // behavior/performance of the QSA branch. @@ -9633,7 +9633,7 @@ dojo.provide("dojo._base.xhr"); obj[name] = value; } } - + dojo.fieldToObject = function(/*DOMNode||String*/ inputNode){ // summary: // Serialize a form field to a JavaScript object. @@ -9691,7 +9691,7 @@ dojo.provide("dojo._base.xhr"); // yields this object structure as the result of a call to // formToObject(): // - // | { + // | { // | blah: "blah", // | multi: [ // | "thud", @@ -9721,7 +9721,7 @@ dojo.provide("dojo._base.xhr"); // example: // this object: // - // | { + // | { // | blah: "blah", // | multi: [ // | "thud", @@ -9730,7 +9730,7 @@ dojo.provide("dojo._base.xhr"); // | }; // // yields the following query string: - // + // // | "blah=blah&multi=thud&multi=thonk" // FIXME: need to implement encodeAscii!! @@ -9776,7 +9776,7 @@ dojo.provide("dojo._base.xhr"); // This string: // // | "foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&" - // + // // results in this object structure: // // | { @@ -9784,7 +9784,7 @@ dojo.provide("dojo._base.xhr"); // | thinger: " spaces =blah", // | zonk: "blarg" // | } - // + // // Note that spaces and other urlencoded entities are correctly // handled. @@ -9819,7 +9819,7 @@ dojo.provide("dojo._base.xhr"); // MOW: remove dojo._contentHandlers alias in 2.0 var handlers = _d._contentHandlers = dojo.contentHandlers = { - // summary: + // summary: // A map of availble XHR transport handle types. Name matches the // `handleAs` attribute passed to XHR calls. // @@ -9827,41 +9827,41 @@ dojo.provide("dojo._base.xhr"); // A map of availble XHR transport handle types. Name matches the // `handleAs` attribute passed to XHR calls. Each contentHandler is // called, passing the xhr object for manipulation. The return value - // from the contentHandler will be passed to the `load` or `handle` - // functions defined in the original xhr call. - // + // from the contentHandler will be passed to the `load` or `handle` + // functions defined in the original xhr call. + // // example: // Creating a custom content-handler: // | dojo.contentHandlers.makeCaps = function(xhr){ // | return xhr.responseText.toUpperCase(); // | } // | // and later: - // | dojo.xhrGet({ + // | dojo.xhrGet({ // | url:"foo.txt", // | handleAs:"makeCaps", // | load: function(data){ /* data is a toUpper version of foo.txt */ } // | }); - text: function(xhr){ + text: function(xhr){ // summary: A contentHandler which simply returns the plaintext response data - return xhr.responseText; + return xhr.responseText; }, json: function(xhr){ // summary: A contentHandler which returns a JavaScript object created from the response data return _d.fromJson(xhr.responseText || null); }, - "json-comment-filtered": function(xhr){ - // summary: A contentHandler which expects comment-filtered JSON. - // description: - // A contentHandler which expects comment-filtered JSON. + "json-comment-filtered": function(xhr){ + // summary: A contentHandler which expects comment-filtered JSON. + // description: + // A contentHandler which expects comment-filtered JSON. // the json-comment-filtered option was implemented to prevent // "JavaScript Hijacking", but it is less secure than standard JSON. Use // standard JSON instead. JSON prefixing can be used to subvert hijacking. - // + // // Will throw a notice suggesting to use application/json mimetype, as // json-commenting can introduce security issues. To decrease the chances of hijacking, - // use the standard `json` contentHandler, and prefix your "JSON" with: {}&& - // + // use the standard `json` contentHandler, and prefix your "JSON" with: {}&& + // // use djConfig.useCommentedJson = true to turn off the notice if(!dojo.config.useCommentedJson){ console.warn("Consider using the standard mimetype:application/json." @@ -9879,7 +9879,7 @@ dojo.provide("dojo._base.xhr"); } return _d.fromJson(value.substring(cStartIdx+2, cEndIdx)); }, - javascript: function(xhr){ + javascript: function(xhr){ // summary: A contentHandler which evaluates the response data, expecting it to be valid JavaScript // FIXME: try Moz and IE specific eval variants? @@ -9906,7 +9906,7 @@ dojo.provide("dojo._base.xhr"); return result; // DOMDocument }, "json-comment-optional": function(xhr){ - // summary: A contentHandler which checks the presence of comment-filtered JSON and + // summary: A contentHandler which checks the presence of comment-filtered JSON and // alternates between the `json` and `json-comment-filtered` contentHandlers. if(xhr.responseText && /^[^{\[]*\/\*/.test(xhr.responseText)){ return handlers["json-comment-filtered"](xhr); @@ -10083,7 +10083,7 @@ dojo.provide("dojo._base.xhr"); /*Function*/canceller, /*Function*/okHandler, /*Function*/errHandler){ - // summary: + // summary: // sets up the Deferred and ioArgs property on the Deferred so it // can be used in an io call. // args: @@ -10099,25 +10099,25 @@ dojo.provide("dojo._base.xhr"); // object returned from this function. // errHandler: // The first error callback to be registered with Deferred. It has the opportunity - // to do cleanup on an error. It will receive two arguments: error (the + // to do cleanup on an error. It will receive two arguments: error (the // Error object) and dfd, the Deferred object returned from this function. var ioArgs = {args: args, url: args.url}; //Get values from form if requestd. var formObject = null; - if(args.form){ + if(args.form){ var form = _d.byId(args.form); - //IE requires going through getAttributeNode instead of just getAttribute in some form cases, + //IE requires going through getAttributeNode instead of just getAttribute in some form cases, //so use it for all. See #2844 var actnNode = form.getAttributeNode("action"); - ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); + ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); formObject = _d.formToObject(form); } // set up the query params var miArgs = [{}]; - + if(formObject){ // potentially over-ride url-provided params w/ form values miArgs.push(formObject); @@ -10130,7 +10130,7 @@ dojo.provide("dojo._base.xhr"); miArgs.push({"dojo.preventCache": new Date().valueOf()}); } ioArgs.query = _d.objectToQuery(_d.mixin.apply(null, miArgs)); - + // .. and the real work of getting the deferred in order, etc. ioArgs.handleAs = args.handleAs || "text"; var d = new _d.Deferred(canceller); @@ -10180,7 +10180,7 @@ dojo.provide("dojo._base.xhr"); } d.ioArgs = ioArgs; - + // FIXME: need to wire up the xhr object's abort method to something // analagous in the Deferred return d; @@ -10188,7 +10188,7 @@ dojo.provide("dojo._base.xhr"); var _deferredCancel = function(/*Deferred*/dfd){ // summary: canceller function for dojo._ioSetArgs call. - + dfd.canceled = true; var xhr = dfd.ioArgs.xhr; var _at = typeof xhr.abort; @@ -10221,8 +10221,8 @@ dojo.provide("dojo._base.xhr"); // something fierece if we don't use unified loops. var _inFlightIntvl = null; var _inFlight = []; - - + + //Use a separate count for knowing if we are starting/stopping io calls. //Cannot use _inFlight.length since it can change at a different time than //when we want to do this kind of test. We only want to decrement the count @@ -10239,10 +10239,10 @@ dojo.provide("dojo._base.xhr"); }; var _watchInFlight = function(){ - //summary: + //summary: // internal method that checks each inflight XMLHttpRequest to see // if it has completed or if the timeout situation applies. - + var now = (new Date()).getTime(); // make sure sync calls stay thread safe, if this callback is called // during a sync call and this results in another sync call before the @@ -10254,7 +10254,7 @@ dojo.provide("dojo._base.xhr"); var dfd = tif.dfd; var func = function(){ if(!dfd || dfd.canceled || !tif.validCheck(dfd)){ - _inFlight.splice(i--, 1); + _inFlight.splice(i--, 1); _pubCount -= 1; }else if(tif.ioCheck(dfd)){ _inFlight.splice(i--, 1); @@ -10311,7 +10311,7 @@ dojo.provide("dojo._base.xhr"); if(_d.isIE){ _d.addOnWindowUnload(_d._ioCancelAll); } - + _d._ioNotifyStart = function(/*Deferred*/dfd){ // summary: // If dojo.publish is available, publish topics @@ -10330,7 +10330,7 @@ dojo.provide("dojo._base.xhr"); } _d._ioWatch = function(dfd, validCheck, ioCheck, resHandle){ - // summary: + // summary: // Watches the io request represented by dfd to see if it completes. // dfd: Deferred // The Deferred object to watch. @@ -10347,7 +10347,7 @@ dojo.provide("dojo._base.xhr"); if(args.timeout){ dfd.startTime = (new Date()).getTime(); } - + _inFlight.push({dfd: dfd, validCheck: validCheck, ioCheck: ioCheck, resHandle: resHandle}); if(!_inFlightIntvl){ _inFlightIntvl = setInterval(_watchInFlight, 50); @@ -10388,7 +10388,7 @@ dojo.provide("dojo._base.xhr"); if(ioArgs.query.length){ ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query; ioArgs.query = null; - } + } } /*===== @@ -10493,7 +10493,7 @@ dojo.provide("dojo._base.xhr"); } dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){ - // summary: + // summary: // Sends an HTTP GET request to the server. return _d.xhr("GET", args); // dojo.Deferred } @@ -10546,13 +10546,13 @@ dojo.provide("dojo._base.fx"); /* - Animation loosely package based on Dan Pupius' work, contributed under CLA: + Animation loosely package based on Dan Pupius' work, contributed under CLA: http://pupius.co.uk/js/Toolkit.Drawing.js */ -(function(){ +(function(){ var d = dojo; var _mixin = d._mixin; - + dojo._Line = function(/*int*/ start, /*int*/ end){ // summary: // dojo._Line is the object used to generate values from a start value @@ -10564,17 +10564,17 @@ dojo.provide("dojo._base.fx"); this.start = start; this.end = end; }; - + dojo._Line.prototype.getValue = function(/*float*/ n){ // summary: Returns the point on the line // n: a floating point number greater than 0 and less than 1 return ((this.end - this.start) * n) + this.start; // Decimal }; - + dojo.Animation = function(args){ // summary: // A generic animation class that fires callbacks into its handlers - // object at various states. + // object at various states. // description: // A generic animation class that fires callbacks into its handlers // object at various states. Nearly all dojo animation functions @@ -10584,80 +10584,80 @@ dojo.provide("dojo._base.fx"); // returned. // args: Object // The 'magic argument', mixing all the properties into this - // animation instance. - + // animation instance. + _mixin(this, args); if(d.isArray(this.curve)){ this.curve = new d._Line(this.curve[0], this.curve[1]); } - + }; - + // Alias to drop come 2.0: d._Animation = d.Animation; - + d.extend(dojo.Animation, { // duration: Integer // The time in milliseonds the animation will take to run duration: 350, - + /*===== // curve: dojo._Line|Array // A two element array of start and end values, or a `dojo._Line` instance to be - // used in the Animation. + // used in the Animation. curve: null, - + // easing: Function? - // A Function to adjust the acceleration (or deceleration) of the progress + // A Function to adjust the acceleration (or deceleration) of the progress // across a dojo._Line easing: null, =====*/ - + // repeat: Integer? // The number of times to loop the animation repeat: 0, - + // rate: Integer? - // the time in milliseconds to wait before advancing to next frame + // the time in milliseconds to wait before advancing to next frame // (used as a fps timer: 1000/rate = fps) rate: 20 /* 50 fps */, - - /*===== + + /*===== // delay: Integer? - // The time in milliseconds to wait before starting animation after it + // The time in milliseconds to wait before starting animation after it // has been .play()'ed delay: null, - + // beforeBegin: Event? // Synthetic event fired before a dojo.Animation begins playing (synchronous) beforeBegin: null, - + // onBegin: Event? // Synthetic event fired as a dojo.Animation begins playing (useful?) onBegin: null, - + // onAnimate: Event? // Synthetic event fired at each interval of a `dojo.Animation` onAnimate: null, - + // onEnd: Event? // Synthetic event fired after the final frame of a `dojo.Animation` onEnd: null, - + // onPlay: Event? // Synthetic event fired any time a `dojo.Animation` is play()'ed onPlay: null, - + // onPause: Event? // Synthetic event fired when a `dojo.Animation` is paused onPause: null, - + // onStop: Event // Synthetic event fires when a `dojo.Animation` is stopped onStop: null, - + =====*/ - + _percent: 0, _startRepeatCount: 0, @@ -10674,7 +10674,7 @@ dojo.provide("dojo._base.fx"); // description: // Convenience function. Fire event "evt" and pass it the // arguments specified in "args". - // Fires the callback in the scope of the `dojo.Animation` + // Fires the callback in the scope of the `dojo.Animation` // instance. // evt: // The event to fire. @@ -10721,12 +10721,12 @@ dojo.provide("dojo._base.fx"); }else if(_t._active && !_t._paused){ return _t; } - + _t._fire("beforeBegin", [_t.node]); - + var de = delay || _t.delay, _p = dojo.hitch(_t, "_play", gotoStart); - + if(de > 0){ _t._delayTimer = setTimeout(_p, de); return _t; @@ -10734,7 +10734,7 @@ dojo.provide("dojo._base.fx"); _p(); return _t; }, - + _play: function(gotoStart){ var _t = this; if(_t._delayTimer){ _t._clearTimer(); } @@ -10743,7 +10743,7 @@ dojo.provide("dojo._base.fx"); _t._startTime -= _t.duration * _t._percent; } _t._endTime = _t._startTime + _t.duration; - + _t._active = true; _t._paused = false; var value = _t.curve.getValue(_t._getStep()); @@ -10753,13 +10753,13 @@ dojo.provide("dojo._base.fx"); } _t._fire("onBegin", [value]); } - + _t._fire("onPlay", [value]); - + _t._cycle(); return _t; // dojo.Animation }, - + pause: function(){ // summary: Pauses a running animation. var _t = this; @@ -10770,7 +10770,7 @@ dojo.provide("dojo._base.fx"); _t._fire("onPause", [_t.curve.getValue(_t._getStep())]); return _t; // dojo.Animation }, - + gotoPercent: function(/*Decimal*/ percent, /*Boolean?*/ andPlay){ // summary: // Sets the progress of the animation. @@ -10785,7 +10785,7 @@ dojo.provide("dojo._base.fx"); if(andPlay){ _t.play(); } return _t; // dojo.Animation }, - + stop: function(/*boolean?*/ gotoEnd){ // summary: Stops a running animation. // gotoEnd: If true, the animation will end. @@ -10800,9 +10800,9 @@ dojo.provide("dojo._base.fx"); _t._active = _t._paused = false; return _t; // dojo.Animation }, - + status: function(){ - // summary: + // summary: // Returns a string token representation of the status of // the animation, one of: "paused", "playing", "stopped" if(this._active){ @@ -10810,30 +10810,30 @@ dojo.provide("dojo._base.fx"); } return "stopped"; // String }, - + _cycle: function(){ var _t = this; if(_t._active){ var curr = new Date().valueOf(); var step = (curr - _t._startTime) / (_t._endTime - _t._startTime); - + if(step >= 1){ step = 1; } _t._percent = step; - + // Perform easing if(_t.easing){ step = _t.easing(step); } - + _t._fire("onAnimate", [_t.curve.getValue(step)]); - + if(_t._percent < 1){ _t._startTimer(); }else{ _t._active = false; - + if(_t.repeat > 0){ _t.repeat--; _t.play(null, true); @@ -10852,13 +10852,13 @@ dojo.provide("dojo._base.fx"); } return _t; // dojo.Animation }, - + _clearTimer: function(){ // summary: Clear the play delay timer clearTimeout(this._delayTimer); delete this._delayTimer; } - + }); // the local timer, stubbed into all Animation instances @@ -10896,7 +10896,7 @@ dojo.provide("dojo._base.fx"); }); - var _makeFadeable = + var _makeFadeable = d.isIE ? function(node){ // only set the zoom if the "tickle" value would be the same as the // default @@ -10906,11 +10906,11 @@ dojo.provide("dojo._base.fx"); if(!ns.width.length && d.style(node, "width") == "auto"){ ns.width = "auto"; } - } : + } : function(){}; dojo._fade = function(/*Object*/ args){ - // summary: + // summary: // Returns an animation that will fade the node defined by // args.node from the start to end values passed (args.start // args.end) (end is mandatory, start is optional) @@ -10918,10 +10918,10 @@ dojo.provide("dojo._base.fx"); args.node = d.byId(args.node); var fArgs = _mixin({ properties: {} }, args), props = (fArgs.properties.opacity = {}); - + props.start = !("start" in fArgs) ? - function(){ - return +d.style(fArgs.node, "opacity")||0; + function(){ + return +d.style(fArgs.node, "opacity")||0; } : fArgs.start; props.end = fArgs.end; @@ -10946,14 +10946,14 @@ dojo.provide("dojo._base.fx"); =====*/ dojo.fadeIn = function(/*dojo.__FadeArgs*/ args){ - // summary: + // summary: // Returns an animation that will fade node defined in 'args' from // its current opacity to fully opaque. return d._fade(_mixin({ end: 1 }, args)); // dojo.Animation }; dojo.fadeOut = function(/*dojo.__FadeArgs*/ args){ - // summary: + // summary: // Returns an animation that will fade node defined in 'args' // from its current opacity to fully transparent. return d._fade(_mixin({ end: 0 }, args)); // dojo.Animation @@ -10999,13 +10999,13 @@ dojo.provide("dojo._base.fx"); // A hash map of style properties to Objects describing the transition, // such as the properties of dojo._Line with an additional 'units' property properties: {} - + //TODOC: add event callbacks }); =====*/ dojo.animateProperty = function(/*dojo.__AnimArgs*/ args){ - // summary: + // summary: // Returns an animation that will transition the properties of // node defined in `args` depending how they are defined in // `args.properties` @@ -11015,10 +11015,10 @@ dojo.provide("dojo._base.fx"); // animations. It takes an object of "properties" corresponding to // style properties, and animates them in parallel over a set // duration. - // + // // example: // A simple animation that changes the width of the specified node. - // | dojo.animateProperty({ + // | dojo.animateProperty({ // | node: "nodeId", // | properties: { width: 400 }, // | }).play(); @@ -11034,18 +11034,18 @@ dojo.provide("dojo._base.fx"); // | properties: { // | width: { start: '200', end: '400', units:"px" }, // | height: { start:'200', end: '400', units:"px" }, - // | paddingTop: { start:'5', end:'50', units:"px" } + // | paddingTop: { start:'5', end:'50', units:"px" } // | } // | }).play(); // Note 'paddingTop' is used over 'padding-top'. Multi-name CSS properties // are written using "mixed case", as the hyphen is illegal as an object key. - // + // // example: // Plug in a different easing function and register a callback for // when the animation ends. Easing functions accept values between // zero and one and return a value on that basis. In this case, an // exponential-in curve. - // | dojo.animateProperty({ + // | dojo.animateProperty({ // | node: "nodeId", // | // dojo figures out the start value // | properties: { width: { end: 400 } }, @@ -11087,7 +11087,7 @@ dojo.provide("dojo._base.fx"); // | }, // | width:{ // | start:function(node){ return 100; }, - // | end:function(node){ return 200; } + // | end:function(node){ return 200; } // | } // | } // | }).play(); @@ -11146,10 +11146,10 @@ dojo.provide("dojo._base.fx"); return anim; // dojo.Animation }; - dojo.anim = function( /*DOMNode|String*/ node, - /*Object*/ properties, - /*Integer?*/ duration, - /*Function?*/ easing, + dojo.anim = function( /*DOMNode|String*/ node, + /*Object*/ properties, + /*Integer?*/ duration, + /*Function?*/ easing, /*Function?*/ onEnd, /*Integer?*/ delay){ // summary: @@ -11195,7 +11195,7 @@ dojo.provide("dojo._base.fx"); duration: duration || d.Animation.prototype.duration, properties: properties, easing: easing, - onEnd: onEnd + onEnd: onEnd }).play(delay || 0); }; })(); diff --git a/tests/javascript/frameworks/dojo/dojo-1.5.0.js b/tests/javascript/frameworks/dojo/dojo-1.5.0.js index 07593d88e017059fabfc11b13fdfddafda3e8091..8b7cc207f328032a9ef7c61aa50b81b525522c16 100644 --- a/tests/javascript/frameworks/dojo/dojo-1.5.0.js +++ b/tests/javascript/frameworks/dojo/dojo-1.5.0.js @@ -19,7 +19,7 @@ ["dojo", "fojo"], ["dijit", "fijit"], ["dojox", "fojox"] - + ] */ @@ -122,7 +122,7 @@ djConfig = { // of calling `dojo.registerModulePath("foo", "../../bar");`. Multiple // modules may be configured via `djConfig.modulePaths`. modulePaths: {}, - // afterOnLoad: Boolean + // afterOnLoad: Boolean // Indicates Dojo was added to the page after the page load. In this case // Dojo will not wait for the page DOMContentLoad/load events and fire // its dojo.addOnLoad callbacks after making sure all outstanding @@ -149,7 +149,7 @@ djConfig = { // dojoBlankHtmlUrl: String // Used by some modules to configure an empty iframe. Used by dojo.io.iframe and // dojo.back, and dijit popup support in IE where an iframe is needed to make sure native - // controls do not bleed through the popups. Normally this configuration variable + // controls do not bleed through the popups. Normally this configuration variable // does not need to be set, except when using cross-domain/CDN Dojo builds. // Save dojo/resources/blank.html to your domain and set `djConfig.dojoBlankHtmlUrl` // to the path on your domain your copy of blank.html. @@ -306,7 +306,7 @@ dojo.global = { if(typeof OpenAjax != "undefined"){ OpenAjax.hub.registerLibrary(dojo._scopeName, "http://dojotoolkit.org", d.version.toString()); } - + var extraNames, extraLen, empty = {}; for(var i in {toString: 1}){ extraNames = []; break; } dojo._extraNames = extraNames = extraNames || ["hasOwnProperty", "valueOf", "isPrototypeOf", @@ -369,7 +369,7 @@ dojo.global = { // | constructor: function(properties){ // | // property configuration: // | dojo.mixin(this, properties); - // | + // | // | console.log(this.quip); // | // ... // | }, @@ -390,7 +390,7 @@ dojo.global = { // | name: "Carl Brutanananadilewski" // | } // | ); - // | + // | // | // will print "Carl Brutanananadilewski" // | console.log(flattened.name); // | // will print "true" @@ -587,11 +587,11 @@ dojo.global = { _loadedUrls: [], - //WARNING: + //WARNING: // This variable is referenced by packages outside of bootstrap: // FloatingPane.js and undo/browser.js _postLoad: false, - + //Egad! Lots of test files push on this directly instead of using dojo.addOnLoad. _loaders: [], _unloaders: [], @@ -610,13 +610,13 @@ dojo.global = { // not caught by us, so the caller will see it. We return a true // value if and only if the script is found. // - // relpath: + // relpath: // A relative path to a script (no leading '/', and typically ending // in '.js'). - // module: + // module: // A module whose existance to check for after loading a path. Can be // used to determine success or failure of the load. - // cb: + // cb: // a callback function to pass the result of evaluating the script var uri = ((relpath.charAt(0) == '/' || relpath.match(/^\w+:/)) ? "" : d.baseUrl) + relpath; @@ -637,7 +637,7 @@ dojo.global = { // it succeeded. Returns false if the URI reading failed. Throws if // the evaluation throws. // uri: a uri which points at the script to be loaded - // cb: + // cb: // a callback function to process the result of evaluating the script // as an expression, typically used by the resource bundle loader to // load JSON-style resources @@ -663,23 +663,23 @@ dojo.global = { } // Check to see if we need to call _callLoaded() due to an addOnLoad() that arrived while we were busy downloading if(--d._inFlightCount == 0 && d._postLoad && d._loaders.length){ - // We shouldn't be allowed to get here but Firefox allows an event - // (mouse, keybd, async xhrGet) to interrupt a synchronous xhrGet. + // We shouldn't be allowed to get here but Firefox allows an event + // (mouse, keybd, async xhrGet) to interrupt a synchronous xhrGet. // If the current script block contains multiple require() statements, then after each // require() returns, inFlightCount == 0, but we want to hold the _callLoaded() until // all require()s are done since the out-of-sequence addOnLoad() presumably needs them all. // setTimeout allows the next require() to start (if needed), and then we check this again. - setTimeout(function(){ - // If inFlightCount > 0, then multiple require()s are running sequentially and + setTimeout(function(){ + // If inFlightCount > 0, then multiple require()s are running sequentially and // the next require() started after setTimeout() was executed but before we got here. - if(d._inFlightCount == 0){ + if(d._inFlightCount == 0){ d._callLoaded(); } }, 0); } return !!contents; // Boolean: contents? true : false } - + // FIXME: probably need to add logging to this method dojo._loadUriAndCheck = function(/*String*/uri, /*String*/moduleName, /*Function?*/cb){ // summary: calls loadUri then findModule and returns true if both succeed @@ -695,10 +695,10 @@ dojo.global = { dojo.loaded = function(){ // summary: // signal fired when initial environment and package loading is - // complete. You should use dojo.addOnLoad() instead of doing a + // complete. You should use dojo.addOnLoad() instead of doing a // direct dojo.connect() to this method in order to handle // initialization tasks that require the environment to be - // initialized. In a browser host, declarative widgets will + // initialized. In a browser host, declarative widgets will // be constructed when this function finishes runing. d._loadNotifying = true; d._postLoad = true; @@ -713,7 +713,7 @@ dojo.global = { } d._loadNotifying = false; - + //Make sure nothing else got added to the onload queue //after this first run. If something did, and we are not waiting for any //more inflight resources, run again. @@ -725,8 +725,8 @@ dojo.global = { dojo.unloaded = function(){ // summary: // signal fired by impending environment destruction. You should use - // dojo.addOnUnload() instead of doing a direct dojo.connect() to this - // method to perform page/application cleanup methods. See + // dojo.addOnUnload() instead of doing a direct dojo.connect() to this + // method to perform page/application cleanup methods. See // dojo.addOnUnload for more info. var mll = d._unloaders; while(mll.length){ @@ -745,13 +745,13 @@ dojo.global = { dojo.ready = dojo.addOnLoad = function(/*Object*/obj, /*String|Function?*/functionName){ // summary: - // Registers a function to be triggered after the DOM and dojo.require() calls + // Registers a function to be triggered after the DOM and dojo.require() calls // have finished loading. // // description: // Registers a function to be triggered after the DOM has finished - // loading and `dojo.require` modules have loaded. Widgets declared in markup - // have been instantiated if `djConfig.parseOnLoad` is true when this fires. + // loading and `dojo.require` modules have loaded. Widgets declared in markup + // have been instantiated if `djConfig.parseOnLoad` is true when this fires. // // Images and CSS files may or may not have finished downloading when // the specified function is called. (Note that widgets' CSS and HTML @@ -794,7 +794,7 @@ dojo.global = { dojo._modulesLoaded = function(){ if(d._postLoad){ return; } - if(d._inFlightCount > 0){ + if(d._inFlightCount > 0){ console.warn("files still in flight!"); return; } @@ -826,8 +826,8 @@ dojo.global = { var syms = modulename.split("."); for(var i = syms.length; i>0; i--){ var parentModule = syms.slice(0, i).join("."); - if(i == 1 && !d._moduleHasPrefix(parentModule)){ - // Support default module directory (sibling of dojo) for top-level modules + if(i == 1 && !d._moduleHasPrefix(parentModule)){ + // Support default module directory (sibling of dojo) for top-level modules syms[0] = "../" + syms[0]; }else{ var parentModulePath = d._getModulePrefix(parentModule); @@ -881,28 +881,28 @@ dojo.global = { // custom build that specified loader=xdomain and the module lives on a modulePath // that is a whole URL, with protocol and a domain. The versions of Dojo that are on // the Google and AOL CDNs use the xdomain loader. - // + // // If the module is loaded via the xdomain loader, it is an asynchronous load, since // the module is added via a dynamically created script tag. This - // means that dojo.require() can return before the module has loaded. However, this + // means that dojo.require() can return before the module has loaded. However, this // should only happen in the case where you do dojo.require calls in the top-level // HTML page, or if you purposely avoid the loader checking for dojo.require // dependencies in your module by using a syntax like dojo["require"] to load the module. - // + // // Sometimes it is useful to not have the loader detect the dojo.require calls in the // module so that you can dynamically load the modules as a result of an action on the // page, instead of right at module load time. - // + // // Also, for script blocks in an HTML page, the loader does not pre-process them, so // it does not know to download the modules before the dojo.require calls occur. - // + // // So, in those two cases, when you want on-the-fly module loading or for script blocks // in the HTML page, special care must be taken if the dojo.required code is loaded // asynchronously. To make sure you can execute code that depends on the dojo.required // modules, be sure to add the code that depends on the modules in a dojo.addOnLoad() // callback. dojo.addOnLoad waits for all outstanding modules to finish loading before // executing. Example: - // + // // | <script type="text/javascript"> // | dojo.require("foo"); // | dojo.require("bar"); @@ -910,36 +910,36 @@ dojo.global = { // | //you can now safely do something with foo and bar // | }); // | </script> - // + // // This type of syntax works with both xdomain and normal loaders, so it is good // practice to always use this idiom for on-the-fly code loading and in HTML script // blocks. If at some point you change loaders and where the code is loaded from, // it will all still work. - // + // // More on how dojo.require // `dojo.require("A.B")` first checks to see if symbol A.B is // defined. If it is, it is simply returned (nothing to do). - // + // // If it is not defined, it will look for `A/B.js` in the script root // directory. - // + // // `dojo.require` throws an excpetion if it cannot find a file // to load, or if the symbol `A.B` is not defined after loading. - // + // // It returns the object `A.B`, but note the caveats above about on-the-fly loading and // HTML script blocks when the xdomain loader is loading a module. - // + // // `dojo.require()` does nothing about importing symbols into // the current namespace. It is presumed that the caller will // take care of that. For example, to import all symbols into a // local block, you might write: - // + // // | with (dojo.require("A.B")) { // | ... // | } - // + // // And to import just the leaf symbol to a local variable: - // + // // | var B = dojo.require("A.B"); // | ... // returns: the required namespace object @@ -967,7 +967,7 @@ dojo.global = { // pass in false so we can give better error module = d._loadedModules[moduleName]; if(!module){ - throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); + throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); } } @@ -988,14 +988,14 @@ dojo.global = { // the file name. For example, `js/dojo/foo.js` must have // `dojo.provide("dojo.foo");` before any calls to // `dojo.require()` are made. - // + // // For backwards compatibility reasons, in addition to registering // the resource, `dojo.provide()` also ensures that the javascript // object for the module exists. For example, // `dojo.provide("dojox.data.FlickrStore")`, in addition to // registering that `FlickrStore.js` is a resource for the // `dojox.data` module, will ensure that the `dojox.data` - // javascript object exists, so that calls like + // javascript object exists, so that calls like // `dojo.data.foo = function(){ ... }` don't fail. // // In the case of a build where multiple javascript source files @@ -1004,11 +1004,11 @@ dojo.global = { // note that it includes multiple resources. // // resourceName: String - // A dot-sperated string identifying a resource. + // A dot-sperated string identifying a resource. // // example: // Safely create a `my` object, and make dojo.require("my.CustomModule") work - // | dojo.provide("my.CustomModule"); + // | dojo.provide("my.CustomModule"); //Make sure we have a string. resourceName = resourceName + ""; @@ -1061,11 +1061,11 @@ dojo.global = { // // example: // | dojo.requireIf(dojo.isBrowser, "my.special.Module"); - + if(condition === true){ // FIXME: why do we support chained require()'s here? does the build system? var args = []; - for(var i = 1; i < arguments.length; i++){ + for(var i = 1; i < arguments.length; i++){ args.push(arguments[i]); } d.require.apply(d, args); @@ -1075,13 +1075,13 @@ dojo.global = { dojo.requireAfterIf = d.requireIf; dojo.registerModulePath = function(/*String*/module, /*String*/prefix){ - // summary: + // summary: // Maps a module name to a path - // description: + // description: // An unregistered module is given the default path of ../[module], // relative to Dojo root. For example, module acme is mapped to // ../acme. If you want to use a different module name, use - // dojo.registerModulePath. + // dojo.registerModulePath. // example: // If your dojo.js is located at this location in the web root: // | /myapp/js/dojo/dojo/dojo.js @@ -1094,7 +1094,7 @@ dojo.global = { // At which point you can then use dojo.require() to load the // modules (assuming they provide() the same things which are // required). The full code might be: - // | <script type="text/javascript" + // | <script type="text/javascript" // | src="/myapp/js/dojo/dojo/dojo.js"></script> // | <script type="text/javascript"> // | dojo.registerModulePath("foo", "../../foo"); @@ -1115,7 +1115,7 @@ dojo.global = { // description: // Load translated resource bundles provided underneath the "nls" // directory within a package. Translated resources may be located in - // different packages throughout the source tree. + // different packages throughout the source tree. // // Each directory is named for a locale as specified by RFC 3066, // (http://www.ietf.org/rfc/rfc3066.txt), normalized in lowercase. @@ -1130,21 +1130,21 @@ dojo.global = { // preload the bundles to avoid data redundancy and the multiple // network hits normally required to load these resources. // - // moduleName: + // moduleName: // name of the package containing the "nls" directory in which the // bundle is found // - // bundleName: + // bundleName: // bundle name, i.e. the filename without the '.js' suffix. Using "nls" as a // a bundle name is not supported, since "nls" is the name of the folder // that holds bundles. Using "nls" as the bundle name will cause problems // with the custom build. // - // locale: + // locale: // the locale to load (optional) By default, the browser's user // locale as defined by dojo.locale // - // availableFlatLocales: + // availableFlatLocales: // A comma-separated list of the available, flattened locales for this // bundle. This argument should only be set by the build process. // @@ -1186,11 +1186,11 @@ dojo.global = { ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"); dojo._Url = function(/*dojo._Url|String...*/){ - // summary: + // summary: // Constructor to create an object representing a URL. // It is marked as private, since we might consider removing // or simplifying it. - // description: + // description: // Each argument is evaluated in order relative to the next until // a canonical uri is produced. To get an absolute Uri relative to // the current document use: @@ -1257,7 +1257,7 @@ dojo.global = { } uri = []; - if(relobj.scheme){ + if(relobj.scheme){ uri.push(relobj.scheme, ":"); } if(relobj.authority){ @@ -1297,7 +1297,7 @@ dojo.global = { dojo._Url.prototype.toString = function(){ return this.uri; }; dojo.moduleUrl = function(/*String*/module, /*dojo._Url||String*/url){ - // summary: + // summary: // Returns a `dojo._Url` object relative to a module. // example: // | var pngPath = dojo.moduleUrl("acme","images/small.png"); @@ -1305,10 +1305,10 @@ dojo.global = { // | // create an image and set it's source to pngPath's value: // | var img = document.createElement("img"); // | // NOTE: we assign the string representation of the url object - // | img.src = pngPath.toString(); + // | img.src = pngPath.toString(); // | // add our image to the document // | dojo.body().appendChild(img); - // example: + // example: // you may de-reference as far as you like down the package // hierarchy. This is sometimes handy to avoid lenghty relative // urls or for building portable sub-packages. In this example, @@ -1319,9 +1319,9 @@ dojo.global = { // | // somewhere in a configuration block // | dojo.registerModulePath("acme.widget", "../../acme/widget"); // | dojo.registerModulePath("acme.util", "../../util"); - // | + // | // | // ... - // | + // | // | // code in a module using acme resources // | var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html"); // | var dataPath = dojo.moduleUrl("acme.util","resources/data.json"); @@ -1331,7 +1331,7 @@ dojo.global = { if(loc.lastIndexOf("/") != loc.length-1){ loc += "/"; } - + //If the path is an absolute path (starts with a / or is on another //domain/xdomain) then don't add the baseUrl. var colonIndex = loc.indexOf(":"); @@ -1364,9 +1364,9 @@ dojo.isIE = { dojo.isSafari = { // example: // | if(dojo.isSafari){ ... } - // example: + // example: // Detect iPhone: - // | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ + // | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ // | // we are iPhone. Note, iPod touch reports "iPod" above and fails this test. // | } }; @@ -1500,7 +1500,7 @@ if(typeof window != 'undefined'){ if(dojo.isIE && window.location.protocol === "file:"){ dojo.config.ieForceActiveXXhr=true; } - + d.isQuirks = document.compatMode == "BackCompat"; // TODO: is the HTML LANG attribute relevant? @@ -1508,9 +1508,9 @@ if(typeof window != 'undefined'){ // These are in order of decreasing likelihood; this will change in time. d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; - + d._xhrObj = function(){ - // summary: + // summary: // does the work of portably generating a new XMLHTTPRequest object. var http, last_e; if(!dojo.isIE || !dojo.config.ieForceActiveXXhr){ @@ -1531,7 +1531,7 @@ if(typeof window != 'undefined'){ } } } - + if(!http){ throw new Error("XMLHTTP not available: "+last_e); } @@ -1601,7 +1601,7 @@ if(typeof window != 'undefined'){ } return http.responseText; // String } - + var _w = window; var _handleNodeEvent = function(/*String*/evtName, /*Function*/fp){ @@ -1619,7 +1619,7 @@ if(typeof window != 'undefined'){ d._windowUnloaders = []; - + d.windowUnloaded = function(){ // summary: // signal fired by impending window destruction. You may use @@ -1641,7 +1641,7 @@ if(typeof window != 'undefined'){ d.addOnWindowUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){ // summary: // registers a function to be triggered when window.onunload - // fires. + // fires. // description: // The first time that addOnWindowUnload is called Dojo // will register a page listener to trigger your unload @@ -1672,7 +1672,7 @@ if(typeof window != 'undefined'){ // description: // The first time that addOnUnload is called Dojo will // register a page listener to trigger your unload handler - // with. + // with. // // In a browser enviroment, the functions will be triggered // during the window.onbeforeunload event. Be careful of doing @@ -1685,7 +1685,7 @@ if(typeof window != 'undefined'){ // // Further note that calling dojo.addOnUnload will prevent // browsers from using a "fast back" cache to make page - // loading via back button instantaneous. + // loading via back button instantaneous. // example: // | dojo.addOnUnload(functionPointer) // | dojo.addOnUnload(object, "functionName") @@ -1722,7 +1722,7 @@ if(typeof window != 'undefined'){ } } - if(!dojo.config.afterOnLoad){ + if(!dojo.config.afterOnLoad){ if(document.addEventListener){ //Standards. Hooray! Assumption here that if standards based, //it knows about DOMContentLoaded. It is OK if it does not, the fall through @@ -1739,10 +1739,10 @@ if(typeof window != 'undefined'){ if(!dojo.config.skipIeDomLoaded && self === self.top){ dojo._scrollIntervalId = setInterval(function (){ try{ - //When dojo is loaded into an iframe in an IE HTML Application + //When dojo is loaded into an iframe in an IE HTML Application //(HTA), such as in a selenium test, javascript in the iframe //can't see anything outside of it, so self===self.top is true, - //but the iframe is not the top window and doScroll will be + //but the iframe is not the top window and doScroll will be //available before document.body is set. Test document.body //before trying the doScroll trick if(document.body){ @@ -1903,7 +1903,7 @@ dojo.provide("dojo._base.lang"); // This allows for easy use of object member functions // in callbacks and other places in which the "this" keyword may // otherwise not reference the expected scope. - // Any number of default positional arguments may be passed as parameters + // Any number of default positional arguments may be passed as parameters // beyond "method". // Each of these values will be used to "placehold" (similar to curry) // for the hitched function. @@ -1929,7 +1929,7 @@ dojo.provide("dojo._base.lang"); // | var foo = { bar: 2 }; // | dojo.hitch(foo, function(){ this.bar = 10; })(); // execute an anonymous function in scope of foo - + if(arguments.length > 2){ return d._hitchArgs.apply(d, arguments); // Function } @@ -2020,7 +2020,7 @@ dojo.provide("dojo._base.lang"); } return arr; }; - + dojo._toArray = d.isIE ? function(obj){ return ((obj.item) ? slow : efficient).apply(this, arguments); @@ -2123,7 +2123,7 @@ dojo.provide("dojo._base.lang"); dojo.replace = function(tmpl, map, pattern){ // summary: // Performs parameterized substitutions on a string. Throws an - // exception if any parameter is unmatched. + // exception if any parameter is unmatched. // tmpl: String // String to be used as a template. // map: Object|Function @@ -2204,8 +2204,8 @@ dojo.provide("dojo._base.array"); (function(){ var _getParts = function(arr, obj, cb){ - return [ - (typeof arr == "string") ? arr.split("") : arr, + return [ + (typeof arr == "string") ? arr.split("") : arr, obj || dojo.global, // FIXME: cache the anonymous functions we create here? (typeof cb == "string") ? new Function("item", "index", "array", cb) : cb @@ -2224,7 +2224,7 @@ dojo.provide("dojo._base.array"); }; dojo.mixin(dojo, { - indexOf: function( /*Array*/ array, + indexOf: function( /*Array*/ array, /*Object*/ value, /*Integer?*/ fromIndex, /*Boolean?*/ findLast){ @@ -2233,7 +2233,7 @@ dojo.provide("dojo._base.array"); // passed array. If the value is not found, -1 is returned. // description: // This method corresponds to the JavaScript 1.6 Array.indexOf method, with one difference: when - // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript + // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript // 1.6's indexOf skips the holes in the sparse array. // For details on this method, see: // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf @@ -2258,7 +2258,7 @@ dojo.provide("dojo._base.array"); // array. If the value is not found, -1 is returned. // description: // This method corresponds to the JavaScript 1.6 Array.lastIndexOf method, with one difference: when - // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript + // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript // 1.6's lastIndexOf skips the holes in the sparse array. // For details on this method, see: // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/lastIndexOf @@ -2277,7 +2277,7 @@ dojo.provide("dojo._base.array"); // thisObject: // may be used to scope the call to callback // description: - // This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when + // This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when // run over sparse arrays, this implemenation passes the "holes" in the sparse array to // the callback function with a value of undefined. JavaScript 1.6's forEach skips the holes in the sparse array. // For more details, see: @@ -2300,21 +2300,21 @@ dojo.provide("dojo._base.array"); // | ); // example: // | // use a scoped object member as the callback - // | + // | // | var obj = { - // | prefix: "logged via obj.callback:", + // | prefix: "logged via obj.callback:", // | callback: function(item){ // | console.log(this.prefix, item); // | } // | }; - // | + // | // | // specifying the scope function executes the callback in that scope // | dojo.forEach( // | [ "thinger", "blah", "howdy", 10 ], // | obj.callback, // | obj // | ); - // | + // | // | // alternately, we can accomplish the same thing with dojo.hitch() // | dojo.forEach( // | [ "thinger", "blah", "howdy", 10 ], @@ -2327,7 +2327,7 @@ dojo.provide("dojo._base.array"); // FIXME: there are several ways of handilng thisObject. Is // dojo.global always the default context? var _p = _getParts(arr, thisObject, callback); arr = _p[0]; - for(var i=0,l=arr.length; i<l; ++i){ + for(var i=0,l=arr.length; i<l; ++i){ _p[2].call(_p[1], arr[i], i, arr); } }, @@ -2344,7 +2344,7 @@ dojo.provide("dojo._base.array"); // thisObject: // may be used to scope the call to callback // description: - // This function corresponds to the JavaScript 1.6 Array.every() method, with one difference: when + // This function corresponds to the JavaScript 1.6 Array.every() method, with one difference: when // run over sparse arrays, this implemenation passes the "holes" in the sparse array to // the callback function with a value of undefined. JavaScript 1.6's every skips the holes in the sparse array. // For more details, see: @@ -2353,7 +2353,7 @@ dojo.provide("dojo._base.array"); // | // returns false // | dojo.every([1, 2, 3, 4], function(item){ return item>1; }); // example: - // | // returns true + // | // returns true // | dojo.every([1, 2, 3, 4], function(item){ return item>0; }); return everyOrSome(true, arr, callback, thisObject); // Boolean }, @@ -2370,7 +2370,7 @@ dojo.provide("dojo._base.array"); // thisObject: // may be used to scope the call to callback // description: - // This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when + // This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when // run over sparse arrays, this implemenation passes the "holes" in the sparse array to // the callback function with a value of undefined. JavaScript 1.6's some skips the holes in the sparse array. // For more details, see: @@ -2397,7 +2397,7 @@ dojo.provide("dojo._base.array"); // thisObject: // may be used to scope the call to callback // description: - // This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when + // This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when // run over sparse arrays, this implemenation passes the "holes" in the sparse array to // the callback function with a value of undefined. JavaScript 1.6's map skips the holes in the sparse array. // For more details, see: @@ -2428,9 +2428,9 @@ dojo.provide("dojo._base.array"); // thisObject: // may be used to scope the call to callback // description: - // This function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when + // This function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when // run over sparse arrays, this implemenation passes the "holes" in the sparse array to - // the callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array. + // the callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array. // For more details, see: // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter // example: @@ -3506,11 +3506,11 @@ dojo.provide("dojo._base.connect"); dojo._listener = { // create a dispatcher function getDispatcher: function(){ - // following comments pulled out-of-line to prevent cloning them + // following comments pulled out-of-line to prevent cloning them // in the returned function. - // - indices (i) that are really in the array of listeners (ls) will + // - indices (i) that are really in the array of listeners (ls) will // not be in Array.prototype. This is the 'sparse array' trick - // that keeps us safe from libs that take liberties with built-in + // that keeps us safe from libs that take liberties with built-in // objects // - listener is invoked with current scope (this) return function(){ @@ -3520,7 +3520,7 @@ dojo._listener = { // make local copy of listener array so it is immutable during processing var i, lls; lls = [].concat(ls); - + // invoke listeners after target function for(i in lls){ if(!(i in ap)){ @@ -3534,12 +3534,12 @@ dojo._listener = { // add a listener to an object add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){ // Whenever 'method' is invoked, 'listener' will have the same scope. - // Trying to supporting a context object for the listener led to - // complexity. + // Trying to supporting a context object for the listener led to + // complexity. // Non trivial to provide 'once' functionality here // because listener could be the result of a dojo.hitch call, // in which case two references to the same hitch target would not - // be equivalent. + // be equivalent. source = source || dojo.global; // The source method is either null, a dispatcher, or some other function var f = source[method]; @@ -3549,15 +3549,15 @@ dojo._listener = { // original target function is special d.target = f; // dispatcher holds a list of listeners - d._listeners = []; + d._listeners = []; // redirect source to dispatcher f = source[method] = d; } - // The contract is that a handle is returned that can - // identify this listener for disconnect. + // The contract is that a handle is returned that can + // identify this listener for disconnect. // - // The type of the handle is private. Here is it implemented as Integer. - // DOM event code has this same contract but handle is Function + // The type of the handle is private. Here is it implemented as Integer. + // DOM event code has this same contract but handle is Function // in non-IE browsers. // // We could have separate lists of before and after listeners. @@ -3579,9 +3579,9 @@ dojo._listener = { // and dontFix argument here to help the autodocs. Actual DOM aware code is in // event.js. -dojo.connect = function(/*Object|null*/ obj, - /*String*/ event, - /*Object|null*/ context, +dojo.connect = function(/*Object|null*/ obj, + /*String*/ event, + /*Object|null*/ context, /*String|Function*/ method, /*Boolean?*/ dontFix){ // summary: @@ -3616,37 +3616,37 @@ dojo.connect = function(/*Object|null*/ obj, // arguments may simply be omitted such that fewer than 4 arguments // may be required to set up a connection See the examples for details. // - // The return value is a handle that is needed to + // The return value is a handle that is needed to // remove this connection with `dojo.disconnect`. // - // obj: - // The source object for the event function. + // obj: + // The source object for the event function. // Defaults to `dojo.global` if null. - // If obj is a DOM node, the connection is delegated + // If obj is a DOM node, the connection is delegated // to the DOM event manager (unless dontFix is true). // // event: - // String name of the event function in obj. + // String name of the event function in obj. // I.e. identifies a property `obj[event]`. // - // context: + // context: // The object that method will receive as "this". // // If context is null and method is a function, then method // inherits the context of event. - // - // If method is a string then context must be the source + // + // If method is a string then context must be the source // object object for method (context[method]). If context is null, // dojo.global is used. // // method: - // A function reference, or name of a function in context. - // The function identified by method fires after event does. + // A function reference, or name of a function in context. + // The function identified by method fires after event does. // method receives the same arguments as the event. // See context argument comments for information on method's scope. // // dontFix: - // If obj is a DOM node, set dontFix to true to prevent delegation + // If obj is a DOM node, set dontFix to true to prevent delegation // of this connection to the DOM event manager. // // example: @@ -3696,7 +3696,7 @@ dojo.connect = function(/*Object|null*/ obj, // used by non-browser hostenvs. always overriden by event.js dojo._connect = function(obj, event, context, method){ - var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method)); + var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method)); return [obj, event, h, l]; // Handle } @@ -3734,7 +3734,7 @@ dojo.subscribe = function(/*String*/ topic, /*Object|null*/ context, /*String|Fu // is invoked when topic is published. // example: // | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }); - // | dojo.publish("alerts", [ "read this", "hello world" ]); + // | dojo.publish("alerts", [ "read this", "hello world" ]); // support for 2 argument invocation (omitting context) depends on hitch return [topic, dojo._listener.add(dojo._topics, topic, dojo.hitch(context, method))]; /*Handle*/ @@ -3742,7 +3742,7 @@ dojo.subscribe = function(/*String*/ topic, /*Object|null*/ context, /*String|Fu dojo.unsubscribe = function(/*Handle*/ handle){ // summary: - // Remove a topic listener. + // Remove a topic listener. // handle: // The handle returned from a call to subscribe. // example: @@ -3760,11 +3760,11 @@ dojo.publish = function(/*String*/ topic, /*Array*/ args){ // topic: // The name of the topic to publish. // args: - // An array of arguments. The arguments will be applied + // An array of arguments. The arguments will be applied // to each topic subscriber (as first class parameters, via apply). // example: // | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }; - // | dojo.publish("alerts", [ "read this", "hello world" ]); + // | dojo.publish("alerts", [ "read this", "hello world" ]); // Note that args is an array, which is more efficient vs variable length // argument list. Ideally, var args would be implemented via Array @@ -3775,8 +3775,8 @@ dojo.publish = function(/*String*/ topic, /*Array*/ args){ } } -dojo.connectPublisher = function( /*String*/ topic, - /*Object|null*/ obj, +dojo.connectPublisher = function( /*String*/ topic, + /*Object|null*/ obj, /*String*/ event){ // summary: // Ensure that every time obj.event() is called, a message is published @@ -3785,11 +3785,11 @@ dojo.connectPublisher = function( /*String*/ topic, // the topic. // topic: // The name of the topic to publish. - // obj: + // obj: // The source object for the event function. Defaults to dojo.global // if null. // event: - // The name of the event function in obj. + // The name of the event function in obj. // I.e. identifies a property obj[event]. // example: // | dojo.connectPublisher("/ajax/start", dojo, "xhrGet"); @@ -3805,41 +3805,41 @@ dojo.provide("dojo._base.Deferred"); (function(){ - var mutator = function(){}; + var mutator = function(){}; var freeze = Object.freeze || function(){}; // A deferred provides an API for creating and resolving a promise. dojo.Deferred = function(/*Function?*/canceller){ // summary: // Deferreds provide a generic means for encapsulating an asynchronous - // operation and notifying users of the completion and result of the operation. + // operation and notifying users of the completion and result of the operation. // description: // The dojo.Deferred API is based on the concept of promises that provide a // generic interface into the eventual completion of an asynchronous action. - // The motivation for promises fundamentally is about creating a - // separation of concerns that allows one to achieve the same type of - // call patterns and logical data flow in asynchronous code as can be - // achieved in synchronous code. Promises allows one - // to be able to call a function purely with arguments needed for - // execution, without conflating the call with concerns of whether it is - // sync or async. One shouldn't need to alter a call's arguments if the - // implementation switches from sync to async (or vice versa). By having - // async functions return promises, the concerns of making the call are - // separated from the concerns of asynchronous interaction (which are + // The motivation for promises fundamentally is about creating a + // separation of concerns that allows one to achieve the same type of + // call patterns and logical data flow in asynchronous code as can be + // achieved in synchronous code. Promises allows one + // to be able to call a function purely with arguments needed for + // execution, without conflating the call with concerns of whether it is + // sync or async. One shouldn't need to alter a call's arguments if the + // implementation switches from sync to async (or vice versa). By having + // async functions return promises, the concerns of making the call are + // separated from the concerns of asynchronous interaction (which are // handled by the promise). - // - // The dojo.Deferred is a type of promise that provides methods for fulfilling the - // promise with a successful result or an error. The most important method for - // working with Dojo's promises is the then() method, which follows the + // + // The dojo.Deferred is a type of promise that provides methods for fulfilling the + // promise with a successful result or an error. The most important method for + // working with Dojo's promises is the then() method, which follows the // CommonJS proposed promise API. An example of using a Dojo promise: - // + // // | var resultingPromise = someAsyncOperation.then(function(result){ // | ... handle result ... // | }, // | function(error){ // | ... handle error ... // | }); - // - // The .then() call returns a new promise that represents the result of the + // + // The .then() call returns a new promise that represents the result of the // execution of the callback. The callbacks will never affect the original promises value. // // The dojo.Deferred instances also provide the following functions for backwards compatibility: @@ -3909,7 +3909,7 @@ dojo.provide("dojo._base.Deferred"); // | renderDataitem(data[x]); // | } // | d.callback(true); - // | }catch(e){ + // | }catch(e){ // | d.errback(new Error("rendering failed")); // | } // | return d; @@ -3936,7 +3936,7 @@ dojo.provide("dojo._base.Deferred"); // | renderDataitem(data[x]); // | } // | d.callback(true); - // | }catch(e){ + // | }catch(e){ // | d.errback(new Error("rendering failed")); // | } // | }, 100); @@ -3952,10 +3952,10 @@ dojo.provide("dojo._base.Deferred"); // handle the asynchronous case. var result, finished, isError, head, nextListener; var promise = this.promise = {}; - + function complete(value){ if(finished){ - throw new Error("This deferred has already been resolved"); + throw new Error("This deferred has already been resolved"); } result = value; finished = true; @@ -3990,7 +3990,7 @@ dojo.provide("dojo._base.Deferred"); listener.deferred.resolve(result); } } - } + } } // calling resolve will resolve the promise this.resolve = this.callback = function(value){ @@ -4000,12 +4000,12 @@ dojo.provide("dojo._base.Deferred"); this.results = [value, null]; complete(value); }; - - + + // calling error will indicate that the promise failed this.reject = this.errback = function(error){ // summary: - // Fulfills the Deferred instance as an error with the provided error + // Fulfills the Deferred instance as an error with the provided error isError = true; this.fired = 1; complete(error); @@ -4022,7 +4022,7 @@ dojo.provide("dojo._base.Deferred"); while(listener){ var progress = listener.progress; progress && progress(update); - listener = listener.next; + listener = listener.next; } }; this.addCallbacks = function(/*Function?*/callback, /*Function?*/errback){ @@ -4032,34 +4032,34 @@ dojo.provide("dojo._base.Deferred"); // provide the implementation of the promise this.then = promise.then = function(/*Function?*/resolvedCallback, /*Function?*/errorCallback, /*Function?*/progressCallback){ // summary - // Adds a fulfilledHandler, errorHandler, and progressHandler to be called for - // completion of a promise. The fulfilledHandler is called when the promise - // is fulfilled. The errorHandler is called when a promise fails. The - // progressHandler is called for progress events. All arguments are optional - // and non-function values are ignored. The progressHandler is not only an - // optional argument, but progress events are purely optional. Promise + // Adds a fulfilledHandler, errorHandler, and progressHandler to be called for + // completion of a promise. The fulfilledHandler is called when the promise + // is fulfilled. The errorHandler is called when a promise fails. The + // progressHandler is called for progress events. All arguments are optional + // and non-function values are ignored. The progressHandler is not only an + // optional argument, but progress events are purely optional. Promise // providers are not required to ever create progress events. - // - // This function will return a new promise that is fulfilled when the given - // fulfilledHandler or errorHandler callback is finished. This allows promise - // operations to be chained together. The value returned from the callback - // handler is the fulfillment value for the returned promise. If the callback + // + // This function will return a new promise that is fulfilled when the given + // fulfilledHandler or errorHandler callback is finished. This allows promise + // operations to be chained together. The value returned from the callback + // handler is the fulfillment value for the returned promise. If the callback // throws an error, the returned promise will be moved to failed state. - // + // // example: // An example of using a CommonJS compliant promise: // | asyncComputeTheAnswerToEverything(). // | then(addTwo). // | then(printResult, onError); - // | >44 - // + // | >44 + // var returnDeferred = progressCallback == mutator ? this : new dojo.Deferred(promise.cancel); var listener = { - resolved: resolvedCallback, - error: errorCallback, - progress: progressCallback, + resolved: resolvedCallback, + error: errorCallback, + progress: progressCallback, deferred: returnDeferred - }; + }; if(nextListener){ head = head.next = listener; } @@ -4092,11 +4092,11 @@ dojo.provide("dojo._base.Deferred"); addCallback: function (/*Function*/callback) { return this.addCallbacks(dojo.hitch.apply(dojo, arguments)); }, - + addErrback: function (/*Function*/errback) { return this.addCallbacks(null, dojo.hitch.apply(dojo, arguments)); }, - + addBoth: function (/*Function*/callback) { var enclosed = dojo.hitch.apply(dojo, arguments); return this.addCallbacks(enclosed, enclosed); @@ -4106,7 +4106,7 @@ dojo.provide("dojo._base.Deferred"); })(); dojo.when = function(promiseOrValue, /*Function?*/callback, /*Function?*/errback, /*Function?*/progressHandler){ // summary: - // This provides normalization between normal synchronous values and + // This provides normalization between normal synchronous values and // asynchronous promises, so you can interact with them in a common way // example: // | function printFirstAndList(items){ @@ -4126,7 +4126,7 @@ dojo.when = function(promiseOrValue, /*Function?*/callback, /*Function?*/errback // And now all three of his functions can be used sync or async. // | printFirstAndLast([1,2,3,4]) will work just as well as // | printFirstAndLast(dojo.xhrGet(...)); - + if(promiseOrValue && typeof promiseOrValue.then === "function"){ return promiseOrValue.then(callback, errback, progressHandler); } @@ -4146,7 +4146,7 @@ dojo.fromJson = function(/*String*/ json){ // Throws for invalid JSON strings, but it does not use a strict JSON parser. It // delegates to eval(). The content passed to this method must therefore come // from a trusted source. - // json: + // json: // a string literal of a JSON item, for instance: // `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'` @@ -4205,8 +4205,8 @@ dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _ind if(it === null){ return "null"; } - if(dojo.isString(it)){ - return dojo._escapeString(it); + if(dojo.isString(it)){ + return dojo._escapeString(it); } // recurse var recurse = arguments.callee; @@ -4477,7 +4477,7 @@ dojo.provide("dojo._base.Color"); // Builds a `dojo.Color` from a 3 or 4 element array, mapping each // element in sequence to the rgb(a) values of the color. // example: - // | var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha + // | var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha // returns: // A dojo.Color object. If obj is passed, it will be the return value. var t = obj || new d.Color(); @@ -4560,9 +4560,9 @@ dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocu dojo.doc = globalDocument; }; -dojo.withGlobal = function( /*Object*/globalObject, - /*Function*/callback, - /*Object?*/thisObject, +dojo.withGlobal = function( /*Object*/globalObject, + /*Function*/callback, + /*Object?*/thisObject, /*Array?*/cbArguments){ // summary: // Invoke callback with globalObject as dojo.global and @@ -4583,9 +4583,9 @@ dojo.withGlobal = function( /*Object*/globalObject, } } -dojo.withDoc = function( /*DocumentElement*/documentObject, - /*Function*/callback, - /*Object?*/thisObject, +dojo.withDoc = function( /*DocumentElement*/documentObject, + /*Function*/callback, + /*Object?*/thisObject, /*Array?*/cbArguments){ // summary: // Invoke callback with documentObject as dojo.doc. @@ -4616,7 +4616,7 @@ dojo.withDoc = function( /*DocumentElement*/documentObject, dojo.isQuirks = oldQ; } }; - + } @@ -4631,12 +4631,12 @@ dojo.provide("dojo._base.event"); // DOM event listener machinery var del = (dojo._event_listener = { add: function(/*DOMNode*/ node, /*String*/ name, /*Function*/ fp){ - if(!node){return;} + if(!node){return;} name = del._normalizeEventName(name); fp = del._fixCallback(name, fp); var oname = name; if( - !dojo.isIE && + !dojo.isIE && (name == "mouseenter" || name == "mouseleave") ){ var ofp = fp; @@ -4645,7 +4645,7 @@ dojo.provide("dojo._base.event"); fp = function(e){ if(!dojo.isDescendant(e.relatedTarget, node)){ // e.type = oname; // FIXME: doesn't take? SJM: event.type is generally immutable. - return ofp.call(this, e); + return ofp.call(this, e); } } } @@ -4686,7 +4686,7 @@ dojo.provide("dojo._base.event"); }, _fixEvent: function(evt, sender){ // _fixCallback only attaches us to keypress. - // Switch on evt.type anyway because we might + // Switch on evt.type anyway because we might // be called directly from dojo.fixEvent. switch(evt.type){ case "keypress": @@ -4702,25 +4702,25 @@ dojo.provide("dojo._base.event"); // For IE and Safari: some ctrl-key combinations (mostly w/punctuation) do not emit a char code in IE // we map those virtual key codes to ascii here // not valid for all (non-US) keyboards, so maybe we shouldn't bother - _punctMap: { - 106:42, - 111:47, - 186:59, - 187:43, - 188:44, - 189:45, - 190:46, - 191:47, - 192:96, - 219:91, - 220:92, - 221:93, - 222:39 + _punctMap: { + 106:42, + 111:47, + 186:59, + 187:43, + 188:44, + 189:45, + 190:46, + 191:47, + 192:96, + 219:91, + 220:92, + 221:93, + 222:39 } }); // DOM events - + dojo.fixEvent = function(/*Event*/ evt, /*DOMNode*/ sender){ // summary: // normalizes properties on the event object including event @@ -4745,7 +4745,7 @@ dojo.provide("dojo._base.event"); // the default listener to use on dontFix nodes, overriden for IE var node_listener = dojo._listener; - + // Unify connect and event listeners dojo._connect = function(obj, event, context, method, dontFix){ // FIXME: need a more strict test @@ -4756,7 +4756,7 @@ dojo.provide("dojo._base.event"); // create a listener var h = l.add(obj, event, dojo.hitch(context, method)); // formerly, the disconnect package contained "l" directly, but if client code - // leaks the disconnect package (by connecting it to a node), referencing "l" + // leaks the disconnect package (by connecting it to a node), referencing "l" // compounds the problem. // instead we return a listener id, which requires custom _disconnect below. // return disconnect package @@ -4837,9 +4837,9 @@ dojo.provide("dojo._base.event"); // virtual key mapping copyKey: dojo.isMac && !dojo.isAIR ? (dojo.isSafari ? 91 : 224 ) : 17 }; - + var evtCopyKey = dojo.isMac ? "metaKey" : "ctrlKey"; - + dojo.isCopyKey = function(e){ // summary: // Checks an event for the copy key (meta on Mac, and ctrl anywhere else) @@ -4861,7 +4861,7 @@ dojo.provide("dojo._base.event"); // RIGHT: Number // Numeric value of the right mouse button for the platform. RIGHT: 2, - + isButton: function(e, button){ // summary: // Checks an event object for a pressed button @@ -4918,9 +4918,9 @@ dojo.provide("dojo._base.event"); isRight: function(e){ return e.button == 2; } }; } - + // IE event normalization - if(dojo.isIE){ + if(dojo.isIE){ var _trySetKeyCode = function(e, code){ try{ // squelch errors when keyCode is read-only @@ -4938,7 +4938,7 @@ dojo.provide("dojo._base.event"); if(!dojo.config._allow_leaks){ // custom listener that handles leak protection for DOM events node_listener = iel = dojo._ie_listener = { - // support handler indirection: event handler functions are + // support handler indirection: event handler functions are // referenced here. Event dispatchers hold only indices. handlers: [], // add a listener to an object @@ -4991,7 +4991,7 @@ dojo.provide("dojo._base.event"); }, remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){ event = del._normalizeEventName(event); - iel.remove(node, event, handle); + iel.remove(node, event, handle); if(event=="onkeypress"){ var kd = node.onkeydown; if(--kd._stealthKeydownRefs <= 0){ @@ -5017,11 +5017,11 @@ dojo.provide("dojo._base.event"); // node to treat as "currentTarget" if(!evt){ var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window; - evt = w.event; + evt = w.event; } if(!evt){return(evt);} - evt.target = evt.srcElement; - evt.currentTarget = (sender || evt.srcElement); + evt.target = evt.srcElement; + evt.currentTarget = (sender || evt.srcElement); evt.layerX = evt.offsetX; evt.layerY = evt.offsetY; // FIXME: scroll position query is duped from dojo.html to @@ -5034,10 +5034,10 @@ dojo.provide("dojo._base.event"); var offset = dojo._getIeDocumentElementOffset(); evt.pageX = evt.clientX + dojo._fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x; evt.pageY = evt.clientY + (docBody.scrollTop || 0) - offset.y; - if(evt.type == "mouseover"){ + if(evt.type == "mouseover"){ evt.relatedTarget = evt.fromElement; } - if(evt.type == "mouseout"){ + if(evt.type == "mouseout"){ evt.relatedTarget = evt.toElement; } evt.stopPropagation = del._stopPropagation; @@ -5081,12 +5081,12 @@ dojo.provide("dojo._base.event"); var c = unprintable ? 0 : k; if(evt.ctrlKey){ if(k==3 || k==13){ - return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively - }else if(c>95 && c<106){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ c -= 48; // map CTRL-[numpad 0-9] to ASCII - }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ + }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ c += 32; // map CTRL-[A-Z] to lowercase - }else{ + }else{ c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII } } @@ -5100,13 +5100,13 @@ dojo.provide("dojo._base.event"); }, // Called in Event scope _stopPropagation: function(){ - this.cancelBubble = true; + this.cancelBubble = true; }, _preventDefault: function(){ // Setting keyCode to 0 is the only way to prevent certain keypresses (namely // ctrl-combinations that correspond to menu accelerator keys). // Otoh, it prevents upstream listeners from getting this information - // Try to split the difference here by clobbering keyCode only for ctrl + // Try to split the difference here by clobbering keyCode only for ctrl // combinations. If you still need to access the key upstream, bubbledKeyCode is // provided as a workaround. this.bubbledKeyCode = this.keyCode; @@ -5114,7 +5114,7 @@ dojo.provide("dojo._base.event"); this.returnValue = false; } }); - + // override stopEvent for IE dojo.stopEvent = function(evt){ evt = evt || window.event; @@ -5122,18 +5122,18 @@ dojo.provide("dojo._base.event"); del._preventDefault.call(evt); } } - + del._synthesizeEvent = function(evt, props){ var faux = dojo.mixin({}, evt, props); del._setKeyChar(faux); - // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); + // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); // but it throws an error when preventDefault is invoked on Safari // does Event.preventDefault not support "apply" on Safari? - faux.preventDefault = function(){ evt.preventDefault(); }; - faux.stopPropagation = function(){ evt.stopPropagation(); }; + faux.preventDefault = function(){ evt.preventDefault(); }; + faux.stopPropagation = function(){ evt.stopPropagation(); }; return faux; } - + // Opera event normalization if(dojo.isOpera){ dojo.mixin(del, { @@ -5157,7 +5157,7 @@ dojo.provide("dojo._base.event"); } }); } - + // Webkit event normalization if(dojo.isWebKit){ del._add = del.add; @@ -5183,12 +5183,12 @@ dojo.provide("dojo._base.event"); var c = unprintable ? 0 : k; if(evt.ctrlKey){ if(k==3 || k==13){ - return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively - }else if(c>95 && c<106){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ c -= 48; // map CTRL-[numpad 0-9] to ASCII - }else if(!evt.shiftKey && c>=65 && c<=90){ + }else if(!evt.shiftKey && c>=65 && c<=90){ c += 32; // map CTRL-[A-Z] to lowercase - }else{ + }else{ c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII } } @@ -5313,7 +5313,7 @@ if(dojo.isIE || dojo.isOpera){ return id; } var _d = doc || dojo.doc, te = _d.getElementById(id); - // attributes.id.value is better than just id in case the + // attributes.id.value is better than just id in case the // user has a name=id inside a form if(te && (te.attributes.id.value == id || te.id == id)){ return te; @@ -5351,7 +5351,7 @@ if(dojo.isIE || dojo.isOpera){ d.addOnWindowUnload(function(){ _destroyContainer = null; //prevent IE leak }); - + /*===== dojo._destroyElement = function(node){ // summary: @@ -5418,16 +5418,16 @@ if(dojo.isIE || dojo.isOpera){ }; dojo.setSelectable = function(/*DomNode|String*/node, /*Boolean*/selectable){ - // summary: + // summary: // Enable or disable selection on a node // node: // id or reference to node // selectable: - // state to put the node in. false indicates unselectable, true + // state to put the node in. false indicates unselectable, true // allows selection. // example: // Make the node id="bar" unselectable - // | dojo.setSelectable("bar"); + // | dojo.setSelectable("bar"); // example: // Make the node id="bar" selectable // | dojo.setSelectable("bar", true); @@ -5557,7 +5557,7 @@ if(dojo.isIE || dojo.isOpera){ dojo.boxModel = "content-box"; // We punt per-node box mode testing completely. - // If anybody cares, we can provide an additional (optional) unit + // If anybody cares, we can provide an additional (optional) unit // that overrides existing code to include per-node box sensitivity. // Opera documentation claims that Opera 9 uses border-box in BackCompat mode. @@ -5569,7 +5569,7 @@ if(dojo.isIE || dojo.isOpera){ // client code may have to adjust if compatMode varies across iframes d.boxModel = document.compatMode == "BackCompat" ? "border-box" : "content-box"; } - + // ============================= // Style Functions // ============================= @@ -5577,10 +5577,10 @@ if(dojo.isIE || dojo.isOpera){ // getComputedStyle drives most of the style code. // Wherever possible, reuse the returned object. // - // API functions below that need to access computed styles accept an + // API functions below that need to access computed styles accept an // optional computedStyle parameter. // If this parameter is omitted, the functions will call getComputedStyle themselves. - // This way, calling code can access computedStyle once, and then pass the reference to + // This way, calling code can access computedStyle once, and then pass the reference to // multiple API functions. /*===== @@ -5619,7 +5619,7 @@ if(dojo.isIE || dojo.isOpera){ // Although we normally eschew argument validation at this // level, here we test argument 'node' for (duck)type, // by testing nodeType, ecause 'document' is the 'parentNode' of 'body' - // it is frequently sent to this function even + // it is frequently sent to this function even // though it is not Element. var gcs; if(d.isWebKit){ @@ -5807,7 +5807,7 @@ if(dojo.isIE || dojo.isOpera){ // Also when getting values, use specific style names, // like "borderBottomWidth" instead of "border" since compound values like // "border" are not necessarily reflected as expected. - // If you want to get node dimensions, use `dojo.marginBox()`, + // If you want to get node dimensions, use `dojo.marginBox()`, // `dojo.contentBox()` or `dojo.position()`. // node: // id or reference to node to get/set style for @@ -5889,13 +5889,13 @@ if(dojo.isIE || dojo.isOpera){ // description: // Returns an object with `w`, `h`, `l`, `t` properties: // | l/t = left/top padding (respectively) - // | w = the total of the left and right padding + // | w = the total of the left and right padding // | h = the total of the top and bottom padding // If 'node' has position, l/t forms the origin for child nodes. // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var + var s = computedStyle||gcs(n), l = px(n, s.paddingLeft), t = px(n, s.paddingTop); @@ -5919,7 +5919,7 @@ if(dojo.isIE || dojo.isOpera){ // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var + var ne = "none", s = computedStyle||gcs(n), bl = (s.borderLeftStyle != ne ? px(n, s.borderLeftWidth) : 0), @@ -5944,7 +5944,7 @@ if(dojo.isIE || dojo.isOpera){ // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var + var s = computedStyle||gcs(n), p = d._getPadExtents(n, s), b = d._getBorderExtents(n, s); @@ -5968,7 +5968,7 @@ if(dojo.isIE || dojo.isOpera){ // The w/h are used for calculating boxes. // Normally application code will not need to invoke this // directly, and will use the ...box... functions instead. - var + var s = computedStyle||gcs(n), l = px(n, s.marginLeft), t = px(n, s.marginTop), @@ -5976,9 +5976,9 @@ if(dojo.isIE || dojo.isOpera){ b = px(n, s.marginBottom); if(d.isWebKit && (s.position != "absolute")){ // FIXME: Safari's version of the computed right margin - // is the space between our right edge and the right edge + // is the space between our right edge and the right edge // of our offsetParent. - // What we are looking for is the actual margin value as + // What we are looking for is the actual margin value as // determined by CSS. // Hack solution is to assume left/right margins are the same. r = l; @@ -5997,10 +5997,10 @@ if(dojo.isIE || dojo.isOpera){ // They do *not* work for display: inline objects that have padding styles // because the user agent ignores padding (it's bogus styling in any case) // - // Be careful with IMGs because they are inline or block depending on + // Be careful with IMGs because they are inline or block depending on // browser and browser mode. - // Although it would be easier to read, there are not separate versions of + // Although it would be easier to read, there are not separate versions of // _getMarginBox for each browser because: // 1. the branching is not expensive // 2. factoring the shared code wastes cycles (function call overhead) @@ -6044,7 +6044,7 @@ if(dojo.isIE || dojo.isOpera){ l: l, t: t, w: node.offsetWidth + me.w, - h: node.offsetHeight + me.h + h: node.offsetHeight + me.h }; } @@ -6099,12 +6099,12 @@ if(dojo.isIE || dojo.isOpera){ // Beware of display: inline objects that have padding styles // because the user agent ignores padding (it's a bogus setup anyway) // - // Be careful with IMGs because they are inline or block depending on + // Be careful with IMGs because they are inline or block depending on // browser and browser mode. // // Elements other than DIV may have special quirks, like built-in // margins or padding, or values not detectable via computedStyle. - // In particular, margins on TABLE do not seems to appear + // In particular, margins on TABLE do not seems to appear // at all in computedStyle on Mozilla. dojo._setBox = function(/*DomNode*/node, /*Number?*/l, /*Number?*/t, /*Number?*/w, /*Number?*/h, /*String?*/u){ @@ -6228,7 +6228,7 @@ if(dojo.isIE || dojo.isOpera){ // Set a node's marginbox to the size of another node // | var box = dojo.marginBox("someNodeId"); // | dojo.marginBox("someOtherNode", box); - + var n = byId(node), s = gcs(n), b = box; return !b ? d._getMarginBox(n, s) : d._setMarginBox(n, b.l, b.t, b.w, b.h, s); // Object } @@ -6259,7 +6259,7 @@ if(dojo.isIE || dojo.isOpera){ } // ============================= - // Positioning + // Positioning // ============================= var _sumAncestorProperties = function(node, prop){ @@ -6290,7 +6290,7 @@ if(dojo.isIE || dojo.isOpera){ dojo._isBodyLtr = function(){ return "_bodyLtr" in d? d._bodyLtr : - d._bodyLtr = (d.body().dir || d.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean + d._bodyLtr = (d.body().dir || d.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean } dojo._getIeDocumentElementOffset = function(){ @@ -6312,7 +6312,7 @@ if(dojo.isIE || dojo.isOpera){ //NOTE: assumes we're being called in an IE browser - var de = d.doc.documentElement; // only deal with HTML element here, _abs handles body/quirks + var de = d.doc.documentElement; // only deal with HTML element here, _abs handles body/quirks if(d.isIE < 8){ var r = de.getBoundingClientRect(); // works well for IE6+ @@ -6335,7 +6335,7 @@ if(dojo.isIE || dojo.isOpera){ } }; - + dojo._fixIeBiDiScrollLeft = function(/*Integer*/ scrollLeft){ // In RTL direction, scrollLeft should be a negative value, but IE < 8 // returns a positive one. All codes using documentElement.scrollLeft @@ -6745,7 +6745,7 @@ if(dojo.isIE || dojo.isOpera){ // Attributes are set by passing the optional object through `dojo.attr`. // See `dojo.attr` for noted caveats and nuances, and API if applicable. //| - // Placement is done via `dojo.place`, assuming the new node to be the action + // Placement is done via `dojo.place`, assuming the new node to be the action // node, passing along the optional reference node and position. // // tag: String|DomNode @@ -6783,7 +6783,7 @@ if(dojo.isIE || dojo.isOpera){ // | var n = dojo.create("div", null, dojo.body()); // // example: - // Create an UL, and populate it with LI's. Place the list as the first-child of a + // Create an UL, and populate it with LI's. Place the list as the first-child of a // node with id="someId": // | var ul = dojo.create("ul", null, "someId", "first"); // | var items = ["one", "two", "three", "four"]; @@ -7550,7 +7550,7 @@ dojo.provide("dojo._base.NodeList"); indexOf: function(value, fromIndex){ // summary: - // see dojo.indexOf(). The primary difference is that the acted-on + // see dojo.indexOf(). The primary difference is that the acted-on // array is implicitly this NodeList // value: Object: // The value to search for. @@ -7654,12 +7654,12 @@ dojo.provide("dojo._base.NodeList"); forEach: function(callback, thisObj){ // summary: - // see `dojo.forEach()`. The primary difference is that the acted-on + // see `dojo.forEach()`. The primary difference is that the acted-on // array is implicitly this NodeList. If you want the option to break out // of the forEach loop, use every() or some() instead. d.forEach(this, callback, thisObj); // non-standard return to allow easier chaining - return this; // dojo.NodeList + return this; // dojo.NodeList }, /*===== @@ -7676,7 +7676,7 @@ dojo.provide("dojo._base.NodeList"); // summary: // Returns border-box objects (x/y/w/h) of all elements in a node list // as an Array (*not* a NodeList). Acts like `dojo.position`, though - // assumes the node passed is each node in this list. + // assumes the node passed is each node in this list. return d.map(this, d.position); // Array }, @@ -7764,7 +7764,7 @@ dojo.provide("dojo._base.NodeList"); // if 2 arguments are passed (methodName, objOrFunc), objOrFunc should // reference a function or be the name of the function in the global // namespace to attach. If 3 arguments are provided - // (methodName, objOrFunc, funcName), objOrFunc must be the scope to + // (methodName, objOrFunc, funcName), objOrFunc must be the scope to // locate the bound function in // funcName: String? // optional. A string naming the function in objOrFunc to bind to the @@ -7810,7 +7810,7 @@ dojo.provide("dojo._base.NodeList"); // by queryOrNode. Returns the original NodeList. See: `dojo.place` // queryOrNode: // may be a string representing any valid CSS3 selector or a DOM node. - // In the selector case, only the first matching element will be used + // In the selector case, only the first matching element will be used // for relative positioning. // position: // can be one of: @@ -7835,7 +7835,7 @@ dojo.provide("dojo._base.NodeList"); // anything which does not invoke a descent to evaluate but // can instead be used to test a single node is acceptable. // returns: - // `dojo.NodeList` containing the orpahned elements + // `dojo.NodeList` containing the orpahned elements return (simpleFilter ? d._filterQueryResult(this, simpleFilter) : this).forEach(orphan); // dojo.NodeList }, @@ -8025,11 +8025,11 @@ dojo.provide("dojo._base.NodeList"); // index: Integer... // One or more 0-based indices of items in the current // NodeList. A negative index will start at the end of the - // list and go backwards. + // list and go backwards. // // example: // Shorten the list to the first, second, and third elements - // | dojo.query("a").at(0, 1, 2).forEach(fn); + // | dojo.query("a").at(0, 1, 2).forEach(fn); // // example: // Retrieve the first and last elements of a unordered list: @@ -8039,13 +8039,13 @@ dojo.provide("dojo._base.NodeList"); // Do something for the first element only, but end() out back to // the original list and continue chaining: // | dojo.query("a").at(0).onclick(fn).end().forEach(function(n){ - // | console.log(n); // all anchors on the page. - // | }) + // | console.log(n); // all anchors on the page. + // | }) // // returns: // dojo.NodeList var t = new this._NodeListCtor(); - d.forEach(arguments, function(i){ + d.forEach(arguments, function(i){ if(i < 0){ i = this.length + i } if(this[i]){ t.push(this[i]); } }, this); @@ -8060,7 +8060,7 @@ dojo.provide("dojo._base.NodeList"); "keyup", "load", "mousedown", "mouseenter", "mouseleave", "mousemove", "mouseout", "mouseover", "mouseup", "submit" ]; - + // FIXME: pseudo-doc the above automatically generated on-event functions // syntactic sugar for DOM events @@ -8101,8 +8101,8 @@ if(!dojo._hasResource["dojo._base.query"]){ //_hasResource checks added by build dojo._hasResource["dojo._base.query"] = true; if(typeof dojo != "undefined"){ dojo.provide("dojo._base.query"); - - + + } @@ -8113,7 +8113,7 @@ if(typeof dojo != "undefined"){ designed to take any valid CSS3 selector and return the nodes matching the selector. To do this quickly, it processes queries in several steps, applying caching where profitable. - + The steps (roughly in reverse order of the way they appear in the code): 1.) check to see if we already have a "query dispatcher" - if so, use that with the given parameterization. Skip to step 4. @@ -8188,7 +8188,7 @@ if(typeof dojo != "undefined"){ //////////////////////////////////////////////////////////////////////// var getQueryParts = function(query){ - // summary: + // summary: // state machine for query tokenization // description: // instead of using a brittle and slow regex-based CSS parser, @@ -8204,7 +8204,7 @@ if(typeof dojo != "undefined"){ // below. - // NOTE: + // NOTE: // this code is designed to run fast and compress well. Sacrifices // to readibility and maintainability have been made. Your best // bet when hacking the tokenizer is to put The Donnas on *really* @@ -8222,7 +8222,7 @@ if(typeof dojo != "undefined"){ } var ts = function(/*Integer*/ s, /*Integer*/ e){ - // trim and slice. + // trim and slice. // take an index to start a string slice from and an end position // and return a trimmed copy of that sub-string @@ -8230,12 +8230,12 @@ if(typeof dojo != "undefined"){ } // the overall data graph of the full query, as represented by queryPart objects - var queryParts = []; + var queryParts = []; // state keeping vars - var inBrackets = -1, inParens = -1, inMatchFor = -1, - inPseudo = -1, inClass = -1, inId = -1, inTag = -1, + var inBrackets = -1, inParens = -1, inMatchFor = -1, + inPseudo = -1, inClass = -1, inId = -1, inTag = -1, lc = "", cc = "", pStart; // iteration vars @@ -8299,9 +8299,9 @@ if(typeof dojo != "undefined"){ // needs to do any iteration. Many simple selectors don't, and // we can avoid significant construction-time work by advising // the system to skip them - currentPart.loops = ( - currentPart.pseudos.length || - currentPart.attrs.length || + currentPart.loops = ( + currentPart.pseudos.length || + currentPart.attrs.length || currentPart.classes.length ); currentPart.oquery = currentPart.query = ts(pStart, x); // save the full expression as a string @@ -8331,9 +8331,9 @@ if(typeof dojo != "undefined"){ currentPart.infixOper = queryParts.pop(); currentPart.query = currentPart.infixOper.query + " " + currentPart.query; /* - console.debug( "swapping out the infix", - currentPart.infixOper, - "and attaching it to", + console.debug( "swapping out the infix", + currentPart.infixOper, + "and attaching it to", currentPart); */ } @@ -8342,7 +8342,7 @@ if(typeof dojo != "undefined"){ currentPart = null; } - // iterate over the query, charachter by charachter, building up a + // iterate over the query, charachter by charachter, building up a // list of query part objects for(; lc=cc, cc=query.charAt(x), x < ql; x++){ // cc: the current character in the match @@ -8350,7 +8350,7 @@ if(typeof dojo != "undefined"){ // someone is trying to escape something, so don't try to match any // fragments. We assume we're inside a literal. - if(lc == "\\"){ continue; } + if(lc == "\\"){ continue; } if(!currentPart){ // a part was just ended or none has yet been created // NOTE: I hate all this alloc, but it's shorter than writing tons of if's pStart = x; @@ -8393,7 +8393,7 @@ if(typeof dojo != "undefined"){ // the beginning of a match, which should be a tag name. This // might fault a little later on, but we detect that and this // iteration will still be fine. - inTag = x; + inTag = x; } if(inBrackets >= 0){ @@ -8412,19 +8412,19 @@ if(typeof dojo != "undefined"){ var cmf = _cp.matchFor; if(cmf){ // try to strip quotes from the matchFor value. We want - // [attrName=howdy] to match the same + // [attrName=howdy] to match the same // as [attrName = 'howdy' ] if( (cmf.charAt(0) == '"') || (cmf.charAt(0) == "'") ){ _cp.matchFor = cmf.slice(1, -1); } } - // end the attribute by adding it to the list of attributes. + // end the attribute by adding it to the list of attributes. currentPart.attrs.push(_cp); _cp = null; // necessary? inBrackets = inMatchFor = -1; }else if(cc == "="){ // if the last char was an operator prefix, make sure we - // record it along with the "=" operator. + // record it along with the "=" operator. var addToCc = ("|~^$*".indexOf(lc) >=0 ) ? lc : ""; _cp.type = addToCc+cc; _cp.attr = ts(inBrackets+1, x-addToCc.length); @@ -8454,7 +8454,7 @@ if(typeof dojo != "undefined"){ endAll(); inPseudo = x; }else if(cc == "["){ - // start of an attribute match. + // start of an attribute match. endAll(); inBrackets = x; // provide a new structure for the attribute match to fill-in @@ -8468,15 +8468,15 @@ if(typeof dojo != "undefined"){ // expression if we're already inside a pseudo-selector match if(inPseudo >= 0){ // provide a new structure for the pseudo match to fill-in - _cp = { - name: ts(inPseudo+1, x), + _cp = { + name: ts(inPseudo+1, x), value: null } currentPart.pseudos.push(_cp); } inParens = x; }else if( - (cc == " ") && + (cc == " ") && // if it's a space char and the last char is too, consume the // current one without doing more work (lc != cc) @@ -8486,7 +8486,7 @@ if(typeof dojo != "undefined"){ } return queryParts; }; - + //////////////////////////////////////////////////////////////////////// // DOM query infrastructure @@ -8548,7 +8548,7 @@ if(typeof dojo != "undefined"){ } }, "$=": function(attr, value){ - // E[foo$="bar"] + // E[foo$="bar"] // an E element whose "foo" attribute value ends exactly // with the string "bar" var tval = " "+value; @@ -8558,7 +8558,7 @@ if(typeof dojo != "undefined"){ } }, "~=": function(attr, value){ - // E[foo~="bar"] + // E[foo~="bar"] // an E element whose "foo" attribute value is a list of // space-separated values, one of which is exactly equal // to "bar" @@ -8636,9 +8636,9 @@ if(typeof dojo != "undefined"){ root["_l"] = l; ci = -1; for(var te = root["firstElementChild"]||root["firstChild"]; te; te = te[_ns]){ - if(_simpleNodeTest(te)){ + if(_simpleNodeTest(te)){ te["_i"] = ++i; - if(node === te){ + if(node === te){ // NOTE: // shortcuting the return at this step in indexing works // very well for benchmarking but we avoid it here since @@ -8671,7 +8671,7 @@ if(typeof dojo != "undefined"){ "first-child": function(){ return _lookLeft; }, "last-child": function(){ return _lookRight; }, "only-child": function(name, condition){ - return function(node){ + return function(node){ if(!_lookLeft(node)){ return false; } if(!_lookRight(node)){ return false; } return true; @@ -8702,7 +8702,7 @@ if(typeof dojo != "undefined"){ }, "not": function(name, condition){ var p = getQueryParts(condition)[0]; - var ignores = { el: 1 }; + var ignores = { el: 1 }; if(p.tag != "*"){ ignores.tag = 1; } @@ -8845,7 +8845,7 @@ if(typeof dojo != "undefined"){ if(!("id" in ignores)){ if(query.id){ - ff = agree(ff, function(elem){ + ff = agree(ff, function(elem){ return (!!elem && (elem.id == query.id)); }); } @@ -8853,7 +8853,7 @@ if(typeof dojo != "undefined"){ if(!ff){ if(!("default" in ignores)){ - ff = yesman; + ff = yesman; } } return ff; @@ -8904,14 +8904,14 @@ if(typeof dojo != "undefined"){ _simpleNodeTest(te) && (!bag || _isUnique(te, bag)) && (filterFunc(te, x)) - ){ + ){ ret.push(te); } } return ret; }; }; - + /* // thanks, Dean! var itemIsAfterRoot = d.isIE ? function(item, root){ @@ -8999,7 +8999,7 @@ if(typeof dojo != "undefined"){ var filterFunc = getSimpleFilterFunc(query, { el: 1 }); var qt = query.tag; var wildcardTag = ("*" == qt); - var ecs = getDoc()["getElementsByClassName"]; + var ecs = getDoc()["getElementsByClassName"]; if(!oper){ // if there's no infix operator, then it's a descendant query. ID @@ -9009,8 +9009,8 @@ if(typeof dojo != "undefined"){ // testing shows that the overhead of yesman() is acceptable // and can save us some bytes vs. re-defining the function // everywhere. - filterFunc = (!query.loops && wildcardTag) ? - yesman : + filterFunc = (!query.loops && wildcardTag) ? + yesman : getSimpleFilterFunc(query, { el: 1, id: 1 }); retFunc = function(root, arr){ @@ -9025,9 +9025,9 @@ if(typeof dojo != "undefined"){ } } }else if( - ecs && + ecs && // isAlien check. Workaround for Prototype.js being totally evil/dumb. - /\{\s*\[native code\]\s*\}/.test(String(ecs)) && + /\{\s*\[native code\]\s*\}/.test(String(ecs)) && query.classes.length && !cssCaseBug ){ @@ -9193,8 +9193,8 @@ if(typeof dojo != "undefined"){ // We need te detect the right "internal" webkit version to make this work. var wk = "WebKit/"; var is525 = ( - d.isWebKit && - (nua.indexOf(wk) > 0) && + d.isWebKit && + (nua.indexOf(wk) > 0) && (parseFloat(nua.split(wk)[1]) > 528) ); @@ -9205,7 +9205,7 @@ if(typeof dojo != "undefined"){ var qsa = "querySelectorAll"; var qsaAvail = ( - !!getDoc()[qsa] && + !!getDoc()[qsa] && // see #5832 (!d.isSafari || (d.isSafari > 3.1) || is525 ) ); @@ -9234,7 +9234,7 @@ if(typeof dojo != "undefined"){ var domCached = _queryFuncCacheDOM[query]; if(domCached){ return domCached; } - // TODO: + // TODO: // today we're caching DOM and QSA branches separately so we // recalc useQSA every time. If we had a way to tag root+query // efficiently, we'd be in good shape to do a global cache. @@ -9248,11 +9248,11 @@ if(typeof dojo != "undefined"){ forceDOM = true; } - var useQSA = ( + var useQSA = ( qsaAvail && (!forceDOM) && // as per CSS 3, we can't currently start w/ combinator: // http://www.w3.org/TR/css3-selectors/#w3cselgrammar - (specials.indexOf(qcz) == -1) && + (specials.indexOf(qcz) == -1) && // IE's QSA impl sucks on pseudos (!d.isIE || (query.indexOf(":") == -1)) && @@ -9265,11 +9265,11 @@ if(typeof dojo != "undefined"){ // elements, even though according to spec, selected options should // match :checked. So go nonQSA for it: // http://bugs.dojotoolkit.org/ticket/5179 - (query.indexOf(":contains") == -1) && (query.indexOf(":checked") == -1) && + (query.indexOf(":contains") == -1) && (query.indexOf(":checked") == -1) && (query.indexOf("|=") == -1) // some browsers don't grok it ); - // TODO: + // TODO: // if we've got a descendant query (e.g., "> .thinger" instead of // just ".thinger") in a QSA-able doc, but are passed a child as a // root, it should be possible to give the item a synthetic ID and @@ -9278,7 +9278,7 @@ if(typeof dojo != "undefined"){ if(useQSA){ - var tq = (specials.indexOf(query.charAt(query.length-1)) >= 0) ? + var tq = (specials.indexOf(query.charAt(query.length-1)) >= 0) ? (query + " *") : query; return _queryFuncCacheQSA[query] = function(root){ try{ @@ -9305,9 +9305,9 @@ if(typeof dojo != "undefined"){ }else{ // DOM branch var parts = query.split(/\s*,\s*/); - return _queryFuncCacheDOM[query] = ((parts.length < 2) ? + return _queryFuncCacheDOM[query] = ((parts.length < 2) ? // if not a compound query (e.g., ".foo, .bar"), cache and return a dispatcher - getStepQueryFunc(query) : + getStepQueryFunc(query) : // if it *is* a complex query, break it up into its // constituent parts and return a dispatcher that will // merge the parts when run @@ -9337,7 +9337,7 @@ if(typeof dojo != "undefined"){ }else{ return node.uniqueID; } - } : + } : function(node){ return (node._uid || (node._uid = ++_zipIdx)); }; @@ -9346,7 +9346,7 @@ if(typeof dojo != "undefined"){ // to flatten a list of unique items, but rather just tell if the item in // question is already in the bag. Normally we'd just use hash lookup to do // this for us but IE's DOM is busted so we can't really count on that. On - // the upside, it gives us a built in unique ID function. + // the upside, it gives us a built in unique ID function. var _isUnique = function(node, bag){ if(!bag){ return 1; } var id = _nodeUID(node); @@ -9358,7 +9358,7 @@ if(typeof dojo != "undefined"){ // returning a list of "uniques", hopefully in doucment order var _zipIdxName = "_zipIdx"; var _zip = function(arr){ - if(arr && arr.nozip){ + if(arr && arr.nozip){ return (qlc._wrap) ? qlc._wrap(arr) : arr; } // var ret = new d._NodeListCtor(); @@ -9370,14 +9370,14 @@ if(typeof dojo != "undefined"){ if(arr.length < 2){ return ret; } _zipIdx++; - + // we have to fork here for IE and XML docs because we can't set // expandos on their nodes (apparently). *sigh* if(d.isIE && caseSensitive){ var szidx = _zipIdx+""; arr[0].setAttribute(_zipIdxName, szidx); for(var x = 1, te; te = arr[x]; x++){ - if(arr[x].getAttribute(_zipIdxName) != szidx){ + if(arr[x].getAttribute(_zipIdxName) != szidx){ ret.push(te); } te.setAttribute(_zipIdxName, szidx); @@ -9385,7 +9385,7 @@ if(typeof dojo != "undefined"){ }else if(d.isIE && arr.commentStrip){ try{ for(var x = 1, te; te = arr[x]; x++){ - if(_isElement(te)){ + if(_isElement(te)){ ret.push(te); } } @@ -9393,7 +9393,7 @@ if(typeof dojo != "undefined"){ }else{ if(arr[0]){ arr[0][_zipIdxName] = _zipIdx; } for(var x = 1, te; te = arr[x]; x++){ - if(arr[x][_zipIdxName] != _zipIdx){ + if(arr[x][_zipIdxName] != _zipIdx){ ret.push(te); } te[_zipIdxName] = _zipIdx; @@ -9423,7 +9423,7 @@ if(typeof dojo != "undefined"){ // * class selectors (e.g., `.foo`) // * node type selectors like `span` // * ` ` descendant selectors - // * `>` child element selectors + // * `>` child element selectors // * `#foo` style ID selectors // * `*` universal selector // * `~`, the immediately preceeded-by sibling selector @@ -9448,14 +9448,14 @@ if(typeof dojo != "undefined"){ // palette of selectors and when combined with functions for // manipulation presented by dojo.NodeList, many types of DOM // manipulation operations become very straightforward. - // + // // Unsupported Selectors: // ---------------------- // // While dojo.query handles many CSS3 selectors, some fall outside of // what's resaonable for a programmatic node querying engine to // handle. Currently unsupported selectors include: - // + // // * namespace-differentiated selectors of any form // * all `::` pseduo-element selectors // * certain pseduo-selectors which don't get a lot of day-to-day use: @@ -9464,10 +9464,10 @@ if(typeof dojo != "undefined"){ // | * `:root`, `:active`, `:hover`, `:visisted`, `:link`, // `:enabled`, `:disabled` // * `:*-of-type` pseudo selectors - // + // // dojo.query and XML Documents: // ----------------------------- - // + // // `dojo.query` (as of dojo 1.2) supports searching XML documents // in a case-sensitive manner. If an HTML document is served with // a doctype that forces case-sensitivity (e.g., XHTML 1.1 @@ -9577,12 +9577,12 @@ if(typeof dojo != "undefined"){ // NOTE: // Opera in XHTML mode doesn't detect case-sensitivity correctly // and it's not clear that there's any way to test for it - caseSensitive = (root.contentType && root.contentType=="application/xml") || + caseSensitive = (root.contentType && root.contentType=="application/xml") || (d.isOpera && (root.doctype || od.toString() == "[object XMLDocument]")) || - (!!od) && + (!!od) && (d.isIE ? od.xml : (root.xmlVersion||od.xmlVersion)); - // NOTE: + // NOTE: // adding "true" as the 2nd argument to getQueryFunc is useful for // testing the DOM branch without worrying about the // behavior/performance of the QSA branch. @@ -9646,7 +9646,7 @@ dojo.provide("dojo._base.xhr"); obj[name] = value; } } - + dojo.fieldToObject = function(/*DOMNode||String*/ inputNode){ // summary: // Serialize a form field to a JavaScript object. @@ -9704,7 +9704,7 @@ dojo.provide("dojo._base.xhr"); // yields this object structure as the result of a call to // formToObject(): // - // | { + // | { // | blah: "blah", // | multi: [ // | "thud", @@ -9734,7 +9734,7 @@ dojo.provide("dojo._base.xhr"); // example: // this object: // - // | { + // | { // | blah: "blah", // | multi: [ // | "thud", @@ -9743,7 +9743,7 @@ dojo.provide("dojo._base.xhr"); // | }; // // yields the following query string: - // + // // | "blah=blah&multi=thud&multi=thonk" // FIXME: need to implement encodeAscii!! @@ -9789,7 +9789,7 @@ dojo.provide("dojo._base.xhr"); // This string: // // | "foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&" - // + // // results in this object structure: // // | { @@ -9797,7 +9797,7 @@ dojo.provide("dojo._base.xhr"); // | thinger: " spaces =blah", // | zonk: "blarg" // | } - // + // // Note that spaces and other urlencoded entities are correctly // handled. @@ -9832,7 +9832,7 @@ dojo.provide("dojo._base.xhr"); // MOW: remove dojo._contentHandlers alias in 2.0 var handlers = _d._contentHandlers = dojo.contentHandlers = { - // summary: + // summary: // A map of availble XHR transport handle types. Name matches the // `handleAs` attribute passed to XHR calls. // @@ -9840,41 +9840,41 @@ dojo.provide("dojo._base.xhr"); // A map of availble XHR transport handle types. Name matches the // `handleAs` attribute passed to XHR calls. Each contentHandler is // called, passing the xhr object for manipulation. The return value - // from the contentHandler will be passed to the `load` or `handle` - // functions defined in the original xhr call. - // + // from the contentHandler will be passed to the `load` or `handle` + // functions defined in the original xhr call. + // // example: // Creating a custom content-handler: // | dojo.contentHandlers.makeCaps = function(xhr){ // | return xhr.responseText.toUpperCase(); // | } // | // and later: - // | dojo.xhrGet({ + // | dojo.xhrGet({ // | url:"foo.txt", // | handleAs:"makeCaps", // | load: function(data){ /* data is a toUpper version of foo.txt */ } // | }); - text: function(xhr){ + text: function(xhr){ // summary: A contentHandler which simply returns the plaintext response data - return xhr.responseText; + return xhr.responseText; }, json: function(xhr){ // summary: A contentHandler which returns a JavaScript object created from the response data return _d.fromJson(xhr.responseText || null); }, - "json-comment-filtered": function(xhr){ - // summary: A contentHandler which expects comment-filtered JSON. - // description: - // A contentHandler which expects comment-filtered JSON. + "json-comment-filtered": function(xhr){ + // summary: A contentHandler which expects comment-filtered JSON. + // description: + // A contentHandler which expects comment-filtered JSON. // the json-comment-filtered option was implemented to prevent // "JavaScript Hijacking", but it is less secure than standard JSON. Use // standard JSON instead. JSON prefixing can be used to subvert hijacking. - // + // // Will throw a notice suggesting to use application/json mimetype, as // json-commenting can introduce security issues. To decrease the chances of hijacking, - // use the standard `json` contentHandler, and prefix your "JSON" with: {}&& - // + // use the standard `json` contentHandler, and prefix your "JSON" with: {}&& + // // use djConfig.useCommentedJson = true to turn off the notice if(!dojo.config.useCommentedJson){ console.warn("Consider using the standard mimetype:application/json." @@ -9892,7 +9892,7 @@ dojo.provide("dojo._base.xhr"); } return _d.fromJson(value.substring(cStartIdx+2, cEndIdx)); }, - javascript: function(xhr){ + javascript: function(xhr){ // summary: A contentHandler which evaluates the response data, expecting it to be valid JavaScript // FIXME: try Moz and IE specific eval variants? @@ -9919,7 +9919,7 @@ dojo.provide("dojo._base.xhr"); return result; // DOMDocument }, "json-comment-optional": function(xhr){ - // summary: A contentHandler which checks the presence of comment-filtered JSON and + // summary: A contentHandler which checks the presence of comment-filtered JSON and // alternates between the `json` and `json-comment-filtered` contentHandlers. if(xhr.responseText && /^[^{\[]*\/\*/.test(xhr.responseText)){ return handlers["json-comment-filtered"](xhr); @@ -10096,7 +10096,7 @@ dojo.provide("dojo._base.xhr"); /*Function*/canceller, /*Function*/okHandler, /*Function*/errHandler){ - // summary: + // summary: // sets up the Deferred and ioArgs property on the Deferred so it // can be used in an io call. // args: @@ -10112,25 +10112,25 @@ dojo.provide("dojo._base.xhr"); // object returned from this function. // errHandler: // The first error callback to be registered with Deferred. It has the opportunity - // to do cleanup on an error. It will receive two arguments: error (the + // to do cleanup on an error. It will receive two arguments: error (the // Error object) and dfd, the Deferred object returned from this function. var ioArgs = {args: args, url: args.url}; //Get values from form if requestd. var formObject = null; - if(args.form){ + if(args.form){ var form = _d.byId(args.form); - //IE requires going through getAttributeNode instead of just getAttribute in some form cases, + //IE requires going through getAttributeNode instead of just getAttribute in some form cases, //so use it for all. See #2844 var actnNode = form.getAttributeNode("action"); - ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); + ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); formObject = _d.formToObject(form); } // set up the query params var miArgs = [{}]; - + if(formObject){ // potentially over-ride url-provided params w/ form values miArgs.push(formObject); @@ -10143,7 +10143,7 @@ dojo.provide("dojo._base.xhr"); miArgs.push({"dojo.preventCache": new Date().valueOf()}); } ioArgs.query = _d.objectToQuery(_d.mixin.apply(null, miArgs)); - + // .. and the real work of getting the deferred in order, etc. ioArgs.handleAs = args.handleAs || "text"; var d = new _d.Deferred(canceller); @@ -10193,7 +10193,7 @@ dojo.provide("dojo._base.xhr"); } d.ioArgs = ioArgs; - + // FIXME: need to wire up the xhr object's abort method to something // analagous in the Deferred return d; @@ -10201,7 +10201,7 @@ dojo.provide("dojo._base.xhr"); var _deferredCancel = function(/*Deferred*/dfd){ // summary: canceller function for dojo._ioSetArgs call. - + dfd.canceled = true; var xhr = dfd.ioArgs.xhr; var _at = typeof xhr.abort; @@ -10234,8 +10234,8 @@ dojo.provide("dojo._base.xhr"); // something fierece if we don't use unified loops. var _inFlightIntvl = null; var _inFlight = []; - - + + //Use a separate count for knowing if we are starting/stopping io calls. //Cannot use _inFlight.length since it can change at a different time than //when we want to do this kind of test. We only want to decrement the count @@ -10252,10 +10252,10 @@ dojo.provide("dojo._base.xhr"); }; var _watchInFlight = function(){ - //summary: + //summary: // internal method that checks each inflight XMLHttpRequest to see // if it has completed or if the timeout situation applies. - + var now = (new Date()).getTime(); // make sure sync calls stay thread safe, if this callback is called // during a sync call and this results in another sync call before the @@ -10267,7 +10267,7 @@ dojo.provide("dojo._base.xhr"); var dfd = tif.dfd; var func = function(){ if(!dfd || dfd.canceled || !tif.validCheck(dfd)){ - _inFlight.splice(i--, 1); + _inFlight.splice(i--, 1); _pubCount -= 1; }else if(tif.ioCheck(dfd)){ _inFlight.splice(i--, 1); @@ -10324,7 +10324,7 @@ dojo.provide("dojo._base.xhr"); if(_d.isIE){ _d.addOnWindowUnload(_d._ioCancelAll); } - + _d._ioNotifyStart = function(/*Deferred*/dfd){ // summary: // If dojo.publish is available, publish topics @@ -10343,7 +10343,7 @@ dojo.provide("dojo._base.xhr"); } _d._ioWatch = function(dfd, validCheck, ioCheck, resHandle){ - // summary: + // summary: // Watches the io request represented by dfd to see if it completes. // dfd: Deferred // The Deferred object to watch. @@ -10360,7 +10360,7 @@ dojo.provide("dojo._base.xhr"); if(args.timeout){ dfd.startTime = (new Date()).getTime(); } - + _inFlight.push({dfd: dfd, validCheck: validCheck, ioCheck: ioCheck, resHandle: resHandle}); if(!_inFlightIntvl){ _inFlightIntvl = setInterval(_watchInFlight, 50); @@ -10401,7 +10401,7 @@ dojo.provide("dojo._base.xhr"); if(ioArgs.query.length){ ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query; ioArgs.query = null; - } + } } /*===== @@ -10506,7 +10506,7 @@ dojo.provide("dojo._base.xhr"); } dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){ - // summary: + // summary: // Sends an HTTP GET request to the server. return _d.xhr("GET", args); // dojo.Deferred } diff --git a/tests/javascript/frameworks/dojo/dojo-1.6.0.js b/tests/javascript/frameworks/dojo/dojo-1.6.0.js index 4f47e7dacd4a2ae35f302cc04d14d98edbe54213..9c763d4fe270f9e536f3a23136bf6c0ae824949b 100644 --- a/tests/javascript/frameworks/dojo/dojo-1.6.0.js +++ b/tests/javascript/frameworks/dojo/dojo-1.6.0.js @@ -19,7 +19,7 @@ ["dojo", "fojo"], ["dijit", "fijit"], ["dojox", "fojox"] - + ] */ @@ -258,7 +258,7 @@ dojo.global = { // FIXME: 2.0, drop djConfig support. Use dojoConfig exclusively for global config. var cfg = typeof djConfig != "undefined" ? djConfig : typeof dojoConfig != "undefined" ? dojoConfig : null; - + if(cfg){ for(var c in cfg){ d.config[c] = cfg[c]; @@ -310,7 +310,7 @@ dojo.global = { if(typeof OpenAjax != "undefined"){ OpenAjax.hub.registerLibrary(dojo._scopeName, "http://dojotoolkit.org", d.version.toString()); } - + var extraNames, extraLen, empty = {}; for(var i in {toString: 1}){ extraNames = []; break; } dojo._extraNames = extraNames = extraNames || ["hasOwnProperty", "valueOf", "isPrototypeOf", @@ -683,7 +683,7 @@ dojo.global = { } return !!contents; // Boolean: contents? true : false } - + // FIXME: probably need to add logging to this method dojo._loadUriAndCheck = function(/*String*/uri, /*String*/moduleName, /*Function?*/cb){ // summary: calls loadUri then findModule and returns true if both succeed @@ -717,7 +717,7 @@ dojo.global = { } d._loadNotifying = false; - + //Make sure nothing else got added to the onload queue //after this first run. If something did, and we are not waiting for any //more inflight resources, run again. @@ -1071,7 +1071,7 @@ dojo.global = { // // example: // | dojo.requireIf(dojo.isBrowser, "my.special.Module"); - + if(condition === true){ // FIXME: why do we support chained require()'s here? does the build system? var args = []; @@ -1114,7 +1114,7 @@ dojo.global = { // | </script> d._modulePrefixes[module] = { name: module, value: prefix }; }; - + dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){ // summary: // Declares translated resources and loads them if necessary, in the @@ -1341,7 +1341,7 @@ dojo.global = { if(loc.lastIndexOf("/") != loc.length-1){ loc += "/"; } - + //If the path is an absolute path (starts with a / or is on another //domain/xdomain) then don't add the baseUrl. var colonIndex = loc.indexOf(":"); @@ -1512,7 +1512,7 @@ if(typeof window != 'undefined'){ if(dojo.isIE && window.location.protocol === "file:"){ dojo.config.ieForceActiveXXhr=true; } - + d.isQuirks = document.compatMode == "BackCompat"; // TODO: is the HTML LANG attribute relevant? @@ -1520,7 +1520,7 @@ if(typeof window != 'undefined'){ // These are in order of decreasing likelihood; this will change in time. d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; - + d._xhrObj = function(){ // summary: // does the work of portably generating a new XMLHTTPRequest object. @@ -1543,7 +1543,7 @@ if(typeof window != 'undefined'){ } } } - + if(!http){ throw new Error("XMLHTTP not available: "+last_e); } @@ -1612,7 +1612,7 @@ if(typeof window != 'undefined'){ } return http.responseText; // String } - + var _w = window; var _handleNodeEvent = function(/*String*/evtName, /*Function*/fp){ @@ -1630,7 +1630,7 @@ if(typeof window != 'undefined'){ d._windowUnloaders = []; - + d.windowUnloaded = function(){ // summary: // signal fired by impending window destruction. You may use @@ -1944,7 +1944,7 @@ dojo.provide("dojo._base.lang"); // | var foo = { bar: 2 }; // | dojo.hitch(foo, function(){ this.bar = 10; })(); // execute an anonymous function in scope of foo - + if(arguments.length > 2){ return d._hitchArgs.apply(d, arguments); // Function } @@ -2035,7 +2035,7 @@ dojo.provide("dojo._base.lang"); } return arr; }; - + dojo._toArray = d.isIE ? function(obj){ return ((obj.item) ? slow : efficient).apply(this, arguments); @@ -3974,7 +3974,7 @@ dojo.provide("dojo._base.Deferred"); // handle the asynchronous case. var result, finished, isError, head, nextListener; var promise = (this.promise = {}); - + function complete(value){ if(finished){ throw new Error("This deferred has already been resolved"); @@ -4025,8 +4025,8 @@ dojo.provide("dojo._base.Deferred"); this.results = [value, null]; complete(value); }; - - + + // calling error will indicate that the promise failed this.reject = this.errback = function(error){ // summary: @@ -4117,11 +4117,11 @@ dojo.provide("dojo._base.Deferred"); addCallback: function (/*Function*/callback) { return this.addCallbacks(dojo.hitch.apply(dojo, arguments)); }, - + addErrback: function (/*Function*/errback) { return this.addCallbacks(null, dojo.hitch.apply(dojo, arguments)); }, - + addBoth: function (/*Function*/callback) { var enclosed = dojo.hitch.apply(dojo, arguments); return this.addCallbacks(enclosed, enclosed); @@ -4151,7 +4151,7 @@ dojo.when = function(promiseOrValue, /*Function?*/callback, /*Function?*/errback // And now all three of his functions can be used sync or async. // | printFirstAndLast([1,2,3,4]) will work just as well as // | printFirstAndLast(dojo.xhrGet(...)); - + if(promiseOrValue && typeof promiseOrValue.then === "function"){ return promiseOrValue.then(callback, errback, progressHandler); } @@ -4734,7 +4734,7 @@ dojo.provide("dojo._base.event"); }); // DOM events - + dojo.fixEvent = function(/*Event*/ evt, /*DOMNode*/ sender){ // summary: // normalizes properties on the event object including event @@ -4759,7 +4759,7 @@ dojo.provide("dojo._base.event"); // the default listener to use on dontFix nodes, overriden for IE var node_listener = dojo._listener; - + // Unify connect and event listeners dojo._connect = function(obj, event, context, method, dontFix){ // FIXME: need a more strict test @@ -4851,9 +4851,9 @@ dojo.provide("dojo._base.event"); // virtual key mapping copyKey: dojo.isMac && !dojo.isAIR ? (dojo.isSafari ? 91 : 224 ) : 17 }; - + var evtCopyKey = dojo.isMac ? "metaKey" : "ctrlKey"; - + dojo.isCopyKey = function(e){ // summary: // Checks an event for the copy key (meta on Mac, and ctrl anywhere else) @@ -4875,7 +4875,7 @@ dojo.provide("dojo._base.event"); // RIGHT: Number // Numeric value of the right mouse button for the platform. RIGHT: 2, - + isButton: function(e, button){ // summary: // Checks an event object for a pressed button @@ -4932,7 +4932,7 @@ dojo.provide("dojo._base.event"); isRight: function(e){ return e.button == 2; } }; } - + // IE event normalization if(dojo.isIE){ var _trySetKeyCode = function(e, code){ @@ -5130,7 +5130,7 @@ dojo.provide("dojo._base.event"); this.returnValue = false; } }); - + // override stopEvent for IE dojo.stopEvent = (dojo.isIE < 9 || dojo.isQuirks) ? function(evt){ evt = evt || window.event; @@ -5138,7 +5138,7 @@ dojo.provide("dojo._base.event"); del._preventDefault.call(evt); } : dojo.stopEvent; } - + del._synthesizeEvent = function(evt, props){ var faux = dojo.mixin({}, evt, props); del._setKeyChar(faux); @@ -5149,7 +5149,7 @@ dojo.provide("dojo._base.event"); faux.stopPropagation = function(){ evt.stopPropagation(); }; return faux; }; - + // Opera event normalization if(dojo.isOpera){ dojo.mixin(del, { @@ -5173,7 +5173,7 @@ dojo.provide("dojo._base.event"); } }); } - + // Webkit event normalization if(dojo.isWebKit){ del._add = del.add; @@ -5369,7 +5369,7 @@ if(dojo.isIE){ d.addOnWindowUnload(function(){ _destroyContainer = null; //prevent IE leak }); - + /*===== dojo._destroyElement = function(node){ // summary: @@ -5587,7 +5587,7 @@ if(dojo.isIE){ // client code may have to adjust if compatMode varies across iframes d.boxModel = document.compatMode == "BackCompat" ? "border-box" : "content-box"; } - + // ============================= // Style Functions // ============================= @@ -6065,7 +6065,7 @@ if(dojo.isIE){ h: node.offsetHeight + me.h }; } - + dojo._getMarginSize = function(/*DomNode*/node, /*Object*/computedStyle){ // summary: // returns an object that encodes the width and height of @@ -6260,7 +6260,7 @@ if(dojo.isIE){ // Set a node's marginbox to the size of another node // | var box = dojo.marginBox("someNodeId"); // | dojo.marginBox("someOtherNode", box); - + var n = byId(node), s = gcs(n), b = box; return !b ? d._getMarginBox(n, s) : d._setMarginBox(n, b.l, b.t, b.w, b.h, s); // Object }; @@ -6367,7 +6367,7 @@ if(dojo.isIE){ } }; - + dojo._fixIeBiDiScrollLeft = function(/*Integer*/ scrollLeft){ // In RTL direction, scrollLeft should be a negative value, but IE // returns a positive one. All codes using documentElement.scrollLeft @@ -8075,7 +8075,7 @@ dojo.provide("dojo._base.NodeList"); "keyup", "load", "mousedown", "mouseenter", "mouseleave", "mousemove", "mouseout", "mouseover", "mouseup", "submit" ]; - + // FIXME: pseudo-doc the above automatically generated on-event functions // syntactic sugar for DOM events @@ -8123,7 +8123,7 @@ dojo._hasResource["dojo._base.query"] = true; designed to take any valid CSS3 selector and return the nodes matching the selector. To do this quickly, it processes queries in several steps, applying caching where profitable. - + The steps (roughly in reverse order of the way they appear in the code): 1.) check to see if we already have a "query dispatcher" - if so, use that with the given parameterization. Skip to step 4. @@ -8496,7 +8496,7 @@ var defineQuery= function(d){ } return queryParts; }; - + //////////////////////////////////////////////////////////////////////// // DOM query infrastructure @@ -8921,7 +8921,7 @@ var defineQuery= function(d){ return ret; }; }; - + /* // thanks, Dean! var itemIsAfterRoot = d.isIE ? function(item, root){ @@ -9380,7 +9380,7 @@ var defineQuery= function(d){ if(arr.length < 2){ return ret; } _zipIdx++; - + // we have to fork here for IE and XML docs because we can't set // expandos on their nodes (apparently). *sigh* if(d.isIE && caseSensitive){ @@ -9693,8 +9693,8 @@ var defineAcme= function(){ //prefers queryPortability, then acme, then dojo if(this["dojo"]){ dojo.provide("dojo._base.query"); - - + + defineQuery(this["queryPortability"]||this["acme"]||dojo); }else{ defineQuery(this["queryPortability"]||this["acme"]||defineAcme()); @@ -9739,7 +9739,7 @@ dojo.provide("dojo._base.xhr"); obj[name] = value; } } - + dojo.fieldToObject = function(/*DOMNode||String*/ inputNode){ // summary: // Serialize a form field to a JavaScript object. @@ -10223,7 +10223,7 @@ dojo.provide("dojo._base.xhr"); // set up the query params var miArgs = [{}]; - + if(formObject){ // potentially over-ride url-provided params w/ form values miArgs.push(formObject); @@ -10236,7 +10236,7 @@ dojo.provide("dojo._base.xhr"); miArgs.push({"dojo.preventCache": new Date().valueOf()}); } ioArgs.query = _d.objectToQuery(_d.mixin.apply(null, miArgs)); - + // .. and the real work of getting the deferred in order, etc. ioArgs.handleAs = args.handleAs || "text"; var d = new _d.Deferred(canceller); @@ -10286,7 +10286,7 @@ dojo.provide("dojo._base.xhr"); } d.ioArgs = ioArgs; - + // FIXME: need to wire up the xhr object's abort method to something // analagous in the Deferred return d; @@ -10294,7 +10294,7 @@ dojo.provide("dojo._base.xhr"); var _deferredCancel = function(/*Deferred*/dfd){ // summary: canceller function for dojo._ioSetArgs call. - + dfd.canceled = true; var xhr = dfd.ioArgs.xhr; var _at = typeof xhr.abort; @@ -10327,8 +10327,8 @@ dojo.provide("dojo._base.xhr"); // something fierece if we don't use unified loops. var _inFlightIntvl = null; var _inFlight = []; - - + + //Use a separate count for knowing if we are starting/stopping io calls. //Cannot use _inFlight.length since it can change at a different time than //when we want to do this kind of test. We only want to decrement the count @@ -10348,7 +10348,7 @@ dojo.provide("dojo._base.xhr"); //summary: // internal method that checks each inflight XMLHttpRequest to see // if it has completed or if the timeout situation applies. - + var now = (new Date()).getTime(); // make sure sync calls stay thread safe, if this callback is called // during a sync call and this results in another sync call before the @@ -10417,7 +10417,7 @@ dojo.provide("dojo._base.xhr"); if(_d.isIE){ _d.addOnWindowUnload(_d._ioCancelAll); } - + _d._ioNotifyStart = function(/*Deferred*/dfd){ // summary: // If dojo.publish is available, publish topics @@ -10453,7 +10453,7 @@ dojo.provide("dojo._base.xhr"); if(args.timeout){ dfd.startTime = (new Date()).getTime(); } - + _inFlight.push({dfd: dfd, validCheck: validCheck, ioCheck: ioCheck, resHandle: resHandle}); if(!_inFlightIntvl){ _inFlightIntvl = setInterval(_watchInFlight, 50); diff --git a/tests/javascript/frameworks/ext/ext-all-2.3.0.js b/tests/javascript/frameworks/ext/ext-all-2.3.0.js index 2e00aaef4398d00eb56504966268cbfbec851ca9..90fde1bd39e87d67ddc9dd2c09a4348176f5db4b 100644 --- a/tests/javascript/frameworks/ext/ext-all-2.3.0.js +++ b/tests/javascript/frameworks/ext/ext-all-2.3.0.js @@ -5,7 +5,7 @@ Ext.lib={}; * Ext JS Library 2.3.0 * Copyright(c) 2006-2009, Ext JS, LLC. * licensing@extjs.com - * + * * http://extjs.com/license */ diff --git a/tests/javascript/frameworks/ext/ext-all-3.3.1.js b/tests/javascript/frameworks/ext/ext-all-3.3.1.js index 342138fd084989385acc68cc1c7582cce56554ca..51a87b99028a855d552e06a36e5502964ad7e05f 100644 --- a/tests/javascript/frameworks/ext/ext-all-3.3.1.js +++ b/tests/javascript/frameworks/ext/ext-all-3.3.1.js @@ -5,7 +5,7 @@ * http://www.sencha.com/license */ (function(){var h=Ext.util,k=Ext.each,g=true,i=false;h.Observable=function(){var l=this,m=l.events;if(l.listeners){l.on(l.listeners);delete l.listeners}l.events=m||{}};h.Observable.prototype={filterOptRe:/^(?:scope|delay|buffer|single)$/,fireEvent:function(){var l=Array.prototype.slice.call(arguments,0),n=l[0].toLowerCase(),o=this,m=g,r=o.events[n],t,p,s;if(o.eventsSuspended===g){if(p=o.eventQueue){p.push(l)}}else{if(typeof r=="object"){if(r.bubble){if(r.fire.apply(r,l.slice(1))===i){return i}s=o.getBubbleTarget&&o.getBubbleTarget();if(s&&s.enableBubble){t=s.events[n];if(!t||typeof t!="object"||!t.bubble){s.enableBubble(n)}return s.fireEvent.apply(s,l)}}else{l.shift();m=r.fire.apply(r,l)}}}return m},addListener:function(l,n,m,s){var p=this,r,t,q;if(typeof l=="object"){s=l;for(r in s){t=s[r];if(!p.filterOptRe.test(r)){p.addListener(r,t.fn||t,t.scope||s.scope,t.fn?t:s)}}}else{l=l.toLowerCase();q=p.events[l]||g;if(typeof q=="boolean"){p.events[l]=q=new h.Event(p,l)}q.addListener(n,m,typeof s=="object"?s:{})}},removeListener:function(l,n,m){var o=this.events[l.toLowerCase()];if(typeof o=="object"){o.removeListener(n,m)}},purgeListeners:function(){var n=this.events,l,m;for(m in n){l=n[m];if(typeof l=="object"){l.clearListeners()}}},addEvents:function(p){var n=this;n.events=n.events||{};if(typeof p=="string"){var l=arguments,m=l.length;while(m--){n.events[l[m]]=n.events[l[m]]||g}}else{Ext.applyIf(n.events,p)}},hasListener:function(l){var m=this.events[l.toLowerCase()];return typeof m=="object"&&m.listeners.length>0},suspendEvents:function(l){this.eventsSuspended=g;if(l&&!this.eventQueue){this.eventQueue=[]}},resumeEvents:function(){var l=this,m=l.eventQueue||[];l.eventsSuspended=i;delete l.eventQueue;k(m,function(n){l.fireEvent.apply(l,n)})}};var d=h.Observable.prototype;d.on=d.addListener;d.un=d.removeListener;h.Observable.releaseCapture=function(l){l.fireEvent=d.fireEvent};function e(m,n,l){return function(){if(n.target==arguments[0]){m.apply(l,Array.prototype.slice.call(arguments,0))}}}function b(p,q,m,n){m.task=new h.DelayedTask();return function(){m.task.delay(q.buffer,p,n,Array.prototype.slice.call(arguments,0))}}function c(n,o,m,l){return function(){o.removeListener(m,l);return n.apply(l,arguments)}}function a(p,q,m,n){return function(){var l=new h.DelayedTask(),o=Array.prototype.slice.call(arguments,0);if(!m.tasks){m.tasks=[]}m.tasks.push(l);l.delay(q.delay||10,function(){m.tasks.remove(l);p.apply(n,o)},n)}}h.Event=function(m,l){this.name=l;this.obj=m;this.listeners=[]};h.Event.prototype={addListener:function(p,o,n){var q=this,m;o=o||q.obj;if(!q.isListening(p,o)){m=q.createListener(p,o,n);if(q.firing){q.listeners=q.listeners.slice(0)}q.listeners.push(m)}},createListener:function(q,p,r){r=r||{};p=p||this.obj;var m={fn:q,scope:p,options:r},n=q;if(r.target){n=e(n,r,p)}if(r.delay){n=a(n,r,m,p)}if(r.single){n=c(n,this,q,p)}if(r.buffer){n=b(n,r,m,p)}m.fireFn=n;return m},findListener:function(p,o){var q=this.listeners,n=q.length,m;o=o||this.obj;while(n--){m=q[n];if(m){if(m.fn==p&&m.scope==o){return n}}}return -1},isListening:function(m,l){return this.findListener(m,l)!=-1},removeListener:function(r,q){var p,m,n,s=this,o=i;if((p=s.findListener(r,q))!=-1){if(s.firing){s.listeners=s.listeners.slice(0)}m=s.listeners[p];if(m.task){m.task.cancel();delete m.task}n=m.tasks&&m.tasks.length;if(n){while(n--){m.tasks[n].cancel()}delete m.tasks}s.listeners.splice(p,1);o=g}return o},clearListeners:function(){var o=this,m=o.listeners,n=m.length;while(n--){o.removeListener(m[n].fn,m[n].scope)}},fire:function(){var r=this,q=r.listeners,m=q.length,p=0,n;if(m>0){r.firing=g;var o=Array.prototype.slice.call(arguments,0);for(;p<m;p++){n=q[p];if(n&&n.fireFn.apply(n.scope||r.obj||window,o)===i){return(r.firing=i)}}}r.firing=i;return g}}})();Ext.DomHelper=function(){var x=null,l=/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i,n=/^table|tbody|tr|td$/i,d=/tag|children|cn|html$/i,t=/td|tr|tbody/i,p=/([a-z0-9-]+)\s*:\s*([^;\s]+(?:\s*[^;\s]+)*);?/gi,v=/end/i,s,o="afterbegin",q="afterend",c="beforebegin",r="beforeend",a="<table>",i="</table>",b=a+"<tbody>",k="</tbody>"+i,m=b+"<tr>",w="</tr>"+k;function h(B,D,C,E,A,y){var z=s.insertHtml(E,Ext.getDom(B),u(D));return C?Ext.get(z,true):z}function u(D){var z="",y,C,B,E;if(typeof D=="string"){z=D}else{if(Ext.isArray(D)){for(var A=0;A<D.length;A++){if(D[A]){z+=u(D[A])}}}else{z+="<"+(D.tag=D.tag||"div");for(y in D){C=D[y];if(!d.test(y)){if(typeof C=="object"){z+=" "+y+'="';for(B in C){z+=B+":"+C[B]+";"}z+='"'}else{z+=" "+({cls:"class",htmlFor:"for"}[y]||y)+'="'+C+'"'}}}if(l.test(D.tag)){z+="/>"}else{z+=">";if((E=D.children||D.cn)){z+=u(E)}else{if(D.html){z+=D.html}}z+="</"+D.tag+">"}}}return z}function g(F,C,B,D){x.innerHTML=[C,B,D].join("");var y=-1,A=x,z;while(++y<F){A=A.firstChild}if(z=A.nextSibling){var E=document.createDocumentFragment();while(A){z=A.nextSibling;E.appendChild(A);A=z}A=E}return A}function e(y,z,B,A){var C,D;x=x||document.createElement("div");if(y=="td"&&(z==o||z==r)||!t.test(y)&&(z==c||z==q)){return}D=z==c?B:z==q?B.nextSibling:z==o?B.firstChild:null;if(z==c||z==q){B=B.parentNode}if(y=="td"||(y=="tr"&&(z==r||z==o))){C=g(4,m,A,w)}else{if((y=="tbody"&&(z==r||z==o))||(y=="tr"&&(z==c||z==q))){C=g(3,b,A,k)}else{C=g(2,a,A,i)}}B.insertBefore(C,D);return C}s={markup:function(y){return u(y)},applyStyles:function(y,z){if(z){var A;y=Ext.fly(y);if(typeof z=="function"){z=z.call()}if(typeof z=="string"){p.lastIndex=0;while((A=p.exec(z))){y.setStyle(A[1],A[2])}}else{if(typeof z=="object"){y.setStyle(z)}}}},insertHtml:function(D,y,E){var C={},A,G,F,H,B,z;D=D.toLowerCase();C[c]=["BeforeBegin","previousSibling"];C[q]=["AfterEnd","nextSibling"];if(y.insertAdjacentHTML){if(n.test(y.tagName)&&(z=e(y.tagName.toLowerCase(),D,y,E))){return z}C[o]=["AfterBegin","firstChild"];C[r]=["BeforeEnd","lastChild"];if((A=C[D])){y.insertAdjacentHTML(A[0],E);return y[A[1]]}}else{F=y.ownerDocument.createRange();G="setStart"+(v.test(D)?"After":"Before");if(C[D]){F[G](y);H=F.createContextualFragment(E);y.parentNode.insertBefore(H,D==c?y:y.nextSibling);return y[(D==c?"previous":"next")+"Sibling"]}else{B=(D==o?"first":"last")+"Child";if(y.firstChild){F[G](y[B]);H=F.createContextualFragment(E);if(D==o){y.insertBefore(H,y.firstChild)}else{y.appendChild(H)}}else{y.innerHTML=E}return y[B]}}throw'Illegal insertion point -> "'+D+'"'},insertBefore:function(y,A,z){return h(y,A,z,c)},insertAfter:function(y,A,z){return h(y,A,z,q,"nextSibling")},insertFirst:function(y,A,z){return h(y,A,z,o,"firstChild")},append:function(y,A,z){return h(y,A,z,r,"",true)},overwrite:function(y,A,z){y=Ext.getDom(y);y.innerHTML=u(A);return z?Ext.get(y.firstChild):y.firstChild},createHtml:u};return s}();Ext.Template=function(h){var k=this,c=arguments,e=[],d;if(Ext.isArray(h)){h=h.join("")}else{if(c.length>1){for(var g=0,b=c.length;g<b;g++){d=c[g];if(typeof d=="object"){Ext.apply(k,d)}else{e.push(d)}}h=e.join("")}}k.html=h;if(k.compiled){k.compile()}};Ext.Template.prototype={re:/\{([\w-]+)\}/g,applyTemplate:function(a){var b=this;return b.compiled?b.compiled(a):b.html.replace(b.re,function(c,d){return a[d]!==undefined?a[d]:""})},set:function(a,c){var b=this;b.html=a;b.compiled=null;return c?b.compile():b},compile:function(){var me=this,sep=Ext.isGecko?"+":",";function fn(m,name){name="values['"+name+"']";return"'"+sep+"("+name+" == undefined ? '' : "+name+")"+sep+"'"}eval("this.compiled = function(values){ return "+(Ext.isGecko?"'":"['")+me.html.replace(/\\/g,"\\\\").replace(/(\r\n|\n)/g,"\\n").replace(/'/g,"\\'").replace(this.re,fn)+(Ext.isGecko?"';};":"'].join('');};"));return me},insertFirst:function(b,a,c){return this.doInsert("afterBegin",b,a,c)},insertBefore:function(b,a,c){return this.doInsert("beforeBegin",b,a,c)},insertAfter:function(b,a,c){return this.doInsert("afterEnd",b,a,c)},append:function(b,a,c){return this.doInsert("beforeEnd",b,a,c)},doInsert:function(c,e,b,a){e=Ext.getDom(e);var d=Ext.DomHelper.insertHtml(c,e,this.applyTemplate(b));return a?Ext.get(d,true):d},overwrite:function(b,a,c){b=Ext.getDom(b);b.innerHTML=this.applyTemplate(a);return c?Ext.get(b.firstChild,true):b.firstChild}};Ext.Template.prototype.apply=Ext.Template.prototype.applyTemplate;Ext.Template.from=function(b,a){b=Ext.getDom(b);return new Ext.Template(b.value||b.innerHTML,a||"")};Ext.DomQuery=function(){var cache={},simpleCache={},valueCache={},nonSpace=/\S/,trimRe=/^\s+|\s+$/g,tplRe=/\{(\d+)\}/g,modeRe=/^(\s?[\/>+~]\s?|\s|$)/,tagTokenRe=/^(#)?([\w-\*]+)/,nthRe=/(\d*)n\+?(\d*)/,nthRe2=/\D/,isIE=window.ActiveXObject?true:false,key=30803;eval("var batch = 30803;");function child(parent,index){var i=0,n=parent.firstChild;while(n){if(n.nodeType==1){if(++i==index){return n}}n=n.nextSibling}return null}function next(n){while((n=n.nextSibling)&&n.nodeType!=1){}return n}function prev(n){while((n=n.previousSibling)&&n.nodeType!=1){}return n}function children(parent){var n=parent.firstChild,nodeIndex=-1,nextNode;while(n){nextNode=n.nextSibling;if(n.nodeType==3&&!nonSpace.test(n.nodeValue)){parent.removeChild(n)}else{n.nodeIndex=++nodeIndex}n=nextNode}return this}function byClassName(nodeSet,cls){if(!cls){return nodeSet}var result=[],ri=-1;for(var i=0,ci;ci=nodeSet[i];i++){if((" "+ci.className+" ").indexOf(cls)!=-1){result[++ri]=ci}}return result}function attrValue(n,attr){if(!n.tagName&&typeof n.length!="undefined"){n=n[0]}if(!n){return null}if(attr=="for"){return n.htmlFor}if(attr=="class"||attr=="className"){return n.className}return n.getAttribute(attr)||n[attr]}function getNodes(ns,mode,tagName){var result=[],ri=-1,cs;if(!ns){return result}tagName=tagName||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns]}if(!mode){for(var i=0,ni;ni=ns[i];i++){cs=ni.getElementsByTagName(tagName);for(var j=0,ci;ci=cs[j];j++){result[++ri]=ci}}}else{if(mode=="/"||mode==">"){var utag=tagName.toUpperCase();for(var i=0,ni,cn;ni=ns[i];i++){cn=ni.childNodes;for(var j=0,cj;cj=cn[j];j++){if(cj.nodeName==utag||cj.nodeName==tagName||tagName=="*"){result[++ri]=cj}}}}else{if(mode=="+"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(n&&(n.nodeName==utag||n.nodeName==tagName||tagName=="*")){result[++ri]=n}}}else{if(mode=="~"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)){if(n.nodeName==utag||n.nodeName==tagName||tagName=="*"){result[++ri]=n}}}}}}}return result}function concat(a,b){if(b.slice){return a.concat(b)}for(var i=0,l=b.length;i<l;i++){a[a.length]=b[i]}return a}function byTag(cs,tagName){if(cs.tagName||cs==document){cs=[cs]}if(!tagName){return cs}var result=[],ri=-1;tagName=tagName.toLowerCase();for(var i=0,ci;ci=cs[i];i++){if(ci.nodeType==1&&ci.tagName.toLowerCase()==tagName){result[++ri]=ci}}return result}function byId(cs,id){if(cs.tagName||cs==document){cs=[cs]}if(!id){return cs}var result=[],ri=-1;for(var i=0,ci;ci=cs[i];i++){if(ci&&ci.id==id){result[++ri]=ci;return result}}return result}function byAttribute(cs,attr,value,op,custom){var result=[],ri=-1,useGetStyle=custom=="{",fn=Ext.DomQuery.operators[op],a,xml,hasXml;for(var i=0,ci;ci=cs[i];i++){if(ci.nodeType!=1){continue}if(!hasXml){xml=Ext.DomQuery.isXml(ci);hasXml=true}if(!xml){if(useGetStyle){a=Ext.DomQuery.getStyle(ci,attr)}else{if(attr=="class"||attr=="className"){a=ci.className}else{if(attr=="for"){a=ci.htmlFor}else{if(attr=="href"){a=ci.getAttribute("href",2)}else{a=ci.getAttribute(attr)}}}}}else{a=ci.getAttribute(attr)}if((fn&&fn(a,value))||(!fn&&a)){result[++ri]=ci}}return result}function byPseudo(cs,name,value){return Ext.DomQuery.pseudos[name](cs,value)}function nodupIEXml(cs){var d=++key,r;cs[0].setAttribute("_nodup",d);r=[cs[0]];for(var i=1,len=cs.length;i<len;i++){var c=cs[i];if(!c.getAttribute("_nodup")!=d){c.setAttribute("_nodup",d);r[r.length]=c}}for(var i=0,len=cs.length;i<len;i++){cs[i].removeAttribute("_nodup")}return r}function nodup(cs){if(!cs){return[]}var len=cs.length,c,i,r=cs,cj,ri=-1;if(!len||typeof cs.nodeType!="undefined"||len==1){return cs}if(isIE&&typeof cs[0].selectSingleNode!="undefined"){return nodupIEXml(cs)}var d=++key;cs[0]._nodup=d;for(i=1;c=cs[i];i++){if(c._nodup!=d){c._nodup=d}else{r=[];for(var j=0;j<i;j++){r[++ri]=cs[j]}for(j=i+1;cj=cs[j];j++){if(cj._nodup!=d){cj._nodup=d;r[++ri]=cj}}return r}}return r}function quickDiffIEXml(c1,c2){var d=++key,r=[];for(var i=0,len=c1.length;i<len;i++){c1[i].setAttribute("_qdiff",d)}for(var i=0,len=c2.length;i<len;i++){if(c2[i].getAttribute("_qdiff")!=d){r[r.length]=c2[i]}}for(var i=0,len=c1.length;i<len;i++){c1[i].removeAttribute("_qdiff")}return r}function quickDiff(c1,c2){var len1=c1.length,d=++key,r=[];if(!len1){return c2}if(isIE&&typeof c1[0].selectSingleNode!="undefined"){return quickDiffIEXml(c1,c2)}for(var i=0;i<len1;i++){c1[i]._qdiff=d}for(var i=0,len=c2.length;i<len;i++){if(c2[i]._qdiff!=d){r[r.length]=c2[i]}}return r}function quickId(ns,mode,root,id){if(ns==root){var d=root.ownerDocument||root;return d.getElementById(id)}ns=getNodes(ns,mode,"*");return byId(ns,id)}return{getStyle:function(el,name){return Ext.fly(el).getStyle(name)},compile:function(path,type){type=type||"select";var fn=["var f = function(root){\n var mode; ++batch; var n = root || document;\n"],mode,lastPath,matchers=Ext.DomQuery.matchers,matchersLn=matchers.length,modeMatch,lmode=path.match(modeRe);if(lmode&&lmode[1]){fn[fn.length]='mode="'+lmode[1].replace(trimRe,"")+'";';path=path.replace(lmode[1],"")}while(path.substr(0,1)=="/"){path=path.substr(1)}while(path&&lastPath!=path){lastPath=path;var tokenMatch=path.match(tagTokenRe);if(type=="select"){if(tokenMatch){if(tokenMatch[1]=="#"){fn[fn.length]='n = quickId(n, mode, root, "'+tokenMatch[2]+'");'}else{fn[fn.length]='n = getNodes(n, mode, "'+tokenMatch[2]+'");'}path=path.replace(tokenMatch[0],"")}else{if(path.substr(0,1)!="@"){fn[fn.length]='n = getNodes(n, mode, "*");'}}}else{if(tokenMatch){if(tokenMatch[1]=="#"){fn[fn.length]='n = byId(n, "'+tokenMatch[2]+'");'}else{fn[fn.length]='n = byTag(n, "'+tokenMatch[2]+'");'}path=path.replace(tokenMatch[0],"")}}while(!(modeMatch=path.match(modeRe))){var matched=false;for(var j=0;j<matchersLn;j++){var t=matchers[j];var m=path.match(t.re);if(m){fn[fn.length]=t.select.replace(tplRe,function(x,i){return m[i]});path=path.replace(m[0],"");matched=true;break}}if(!matched){throw'Error parsing selector, parsing failed at "'+path+'"'}}if(modeMatch[1]){fn[fn.length]='mode="'+modeMatch[1].replace(trimRe,"")+'";';path=path.replace(modeMatch[1],"")}}fn[fn.length]="return nodup(n);\n}";eval(fn.join(""));return f},jsSelect:function(path,root,type){root=root||document;if(typeof root=="string"){root=document.getElementById(root)}var paths=path.split(","),results=[];for(var i=0,len=paths.length;i<len;i++){var subPath=paths[i].replace(trimRe,"");if(!cache[subPath]){cache[subPath]=Ext.DomQuery.compile(subPath);if(!cache[subPath]){throw subPath+" is not a valid selector"}}var result=cache[subPath](root);if(result&&result!=document){results=results.concat(result)}}if(paths.length>1){return nodup(results)}return results},isXml:function(el){var docEl=(el?el.ownerDocument||el:0).documentElement;return docEl?docEl.nodeName!=="HTML":false},select:document.querySelectorAll?function(path,root,type){root=root||document;if(!Ext.DomQuery.isXml(root)){try{var cs=root.querySelectorAll(path);return Ext.toArray(cs)}catch(ex){}}return Ext.DomQuery.jsSelect.call(this,path,root,type)}:function(path,root,type){return Ext.DomQuery.jsSelect.call(this,path,root,type)},selectNode:function(path,root){return Ext.DomQuery.select(path,root)[0]},selectValue:function(path,root,defaultValue){path=path.replace(trimRe,"");if(!valueCache[path]){valueCache[path]=Ext.DomQuery.compile(path,"select")}var n=valueCache[path](root),v;n=n[0]?n[0]:n;if(typeof n.normalize=="function"){n.normalize()}v=(n&&n.firstChild?n.firstChild.nodeValue:null);return((v===null||v===undefined||v==="")?defaultValue:v)},selectNumber:function(path,root,defaultValue){var v=Ext.DomQuery.selectValue(path,root,defaultValue||0);return parseFloat(v)},is:function(el,ss){if(typeof el=="string"){el=document.getElementById(el)}var isArray=Ext.isArray(el),result=Ext.DomQuery.filter(isArray?el:[el],ss);return isArray?(result.length==el.length):(result.length>0)},filter:function(els,ss,nonMatches){ss=ss.replace(trimRe,"");if(!simpleCache[ss]){simpleCache[ss]=Ext.DomQuery.compile(ss,"simple")}var result=simpleCache[ss](els);return nonMatches?quickDiff(result,els):result},matchers:[{re:/^\.([\w-]+)/,select:'n = byClassName(n, " {1} ");'},{re:/^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:'n = byPseudo(n, "{1}", "{2}");'},{re:/^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,select:'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'},{re:/^#([\w-]+)/,select:'n = byId(n, "{1}");'},{re:/^@([\w-]+)/,select:'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'}],operators:{"=":function(a,v){return a==v},"!=":function(a,v){return a!=v},"^=":function(a,v){return a&&a.substr(0,v.length)==v},"$=":function(a,v){return a&&a.substr(a.length-v.length)==v},"*=":function(a,v){return a&&a.indexOf(v)!==-1},"%=":function(a,v){return(a%v)==0},"|=":function(a,v){return a&&(a==v||a.substr(0,v.length+1)==v+"-")},"~=":function(a,v){return a&&(" "+a+" ").indexOf(" "+v+" ")!=-1}},pseudos:{"first-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.previousSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"last-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"nth-child":function(c,a){var r=[],ri=-1,m=nthRe.exec(a=="even"&&"2n"||a=="odd"&&"2n+1"||!nthRe2.test(a)&&"n+"+a||a),f=(m[1]||1)-0,l=m[2]-0;for(var i=0,n;n=c[i];i++){var pn=n.parentNode;if(batch!=pn._batch){var j=0;for(var cn=pn.firstChild;cn;cn=cn.nextSibling){if(cn.nodeType==1){cn.nodeIndex=++j}}pn._batch=batch}if(f==1){if(l==0||n.nodeIndex==l){r[++ri]=n}}else{if((n.nodeIndex+l)%f==0){r[++ri]=n}}}return r},"only-child":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(!prev(ci)&&!next(ci)){r[++ri]=ci}}return r},empty:function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var cns=ci.childNodes,j=0,cn,empty=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){empty=false;break}}if(empty){r[++ri]=ci}}return r},contains:function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if((ci.textContent||ci.innerText||"").indexOf(v)!=-1){r[++ri]=ci}}return r},nodeValue:function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[++ri]=ci}}return r},checked:function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.checked==true){r[++ri]=ci}}return r},not:function(c,ss){return Ext.DomQuery.filter(c,ss,true)},any:function(c,selectors){var ss=selectors.split("|"),r=[],ri=-1,s;for(var i=0,ci;ci=c[i];i++){for(var j=0;s=ss[j];j++){if(Ext.DomQuery.is(ci,s)){r[++ri]=ci;break}}}return r},odd:function(c){return this["nth-child"](c,"odd")},even:function(c){return this["nth-child"](c,"even")},nth:function(c,a){return c[a-1]||[]},first:function(c){return c[0]||[]},last:function(c){return c[c.length-1]||[]},has:function(c,ss){var s=Ext.DomQuery.select,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(s(ss,ci).length>0){r[++ri]=ci}}return r},next:function(c,ss){var is=Ext.DomQuery.is,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=next(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r},prev:function(c,ss){var is=Ext.DomQuery.is,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=prev(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r}}}}();Ext.query=Ext.DomQuery.select;Ext.util.DelayedTask=function(d,c,a){var e=this,g,b=function(){clearInterval(g);g=null;d.apply(c,a||[])};e.delay=function(i,l,k,h){e.cancel();d=l||d;c=k||c;a=h||a;g=setInterval(b,i)};e.cancel=function(){if(g){clearInterval(g);g=null}}};(function(){var h=document;Ext.Element=function(m,n){var o=typeof m=="string"?h.getElementById(m):m,p;if(!o){return null}p=o.id;if(!n&&p&&Ext.elCache[p]){return Ext.elCache[p].el}this.dom=o;this.id=p||Ext.id(o)};var d=Ext.DomHelper,e=Ext.Element,a=Ext.elCache;e.prototype={set:function(r,n){var p=this.dom,m,q,n=(n!==false)&&!!p.setAttribute;for(m in r){if(r.hasOwnProperty(m)){q=r[m];if(m=="style"){d.applyStyles(p,q)}else{if(m=="cls"){p.className=q}else{if(n){p.setAttribute(m,q)}else{p[m]=q}}}}}return this},defaultUnit:"px",is:function(m){return Ext.DomQuery.is(this.dom,m)},focus:function(p,o){var m=this,o=o||m.dom;try{if(Number(p)){m.focus.defer(p,null,[null,o])}else{o.focus()}}catch(n){}return m},blur:function(){try{this.dom.blur()}catch(m){}return this},getValue:function(m){var n=this.dom.value;return m?parseInt(n,10):n},addListener:function(m,p,o,n){Ext.EventManager.on(this.dom,m,p,o||this,n);return this},removeListener:function(m,o,n){Ext.EventManager.removeListener(this.dom,m,o,n||this);return this},removeAllListeners:function(){Ext.EventManager.removeAll(this.dom);return this},purgeAllListeners:function(){Ext.EventManager.purgeElement(this,true);return this},addUnits:function(m){if(m===""||m=="auto"||m===undefined){m=m||""}else{if(!isNaN(m)||!i.test(m)){m=m+(this.defaultUnit||"px")}}return m},load:function(n,o,m){Ext.Ajax.request(Ext.apply({params:o,url:n.url||n,callback:m,el:this.dom,indicatorText:n.indicatorText||""},Ext.isObject(n)?n:{}));return this},isBorderBox:function(){return Ext.isBorderBox||Ext.isForcedBorderBox||g[(this.dom.tagName||"").toLowerCase()]},remove:function(){var m=this,n=m.dom;if(n){delete m.dom;Ext.removeNode(n)}},hover:function(n,m,p,o){var q=this;q.on("mouseenter",n,p||q.dom,o);q.on("mouseleave",m,p||q.dom,o);return q},contains:function(m){return !m?false:Ext.lib.Dom.isAncestor(this.dom,m.dom?m.dom:m)},getAttributeNS:function(n,m){return this.getAttribute(m,n)},getAttribute:Ext.isIE?function(m,o){var p=this.dom,n=typeof p[o+":"+m];if(["undefined","unknown"].indexOf(n)==-1){return p[o+":"+m]}return p[m]}:function(m,n){var o=this.dom;return o.getAttributeNS(n,m)||o.getAttribute(n+":"+m)||o.getAttribute(m)||o[m]},update:function(m){if(this.dom){this.dom.innerHTML=m}return this}};var l=e.prototype;e.addMethods=function(m){Ext.apply(l,m)};l.on=l.addListener;l.un=l.removeListener;l.autoBoxAdjust=true;var i=/\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i,c;e.get=function(n){var m,q,p;if(!n){return null}if(typeof n=="string"){if(!(q=h.getElementById(n))){return null}if(a[n]&&a[n].el){m=a[n].el;m.dom=q}else{m=e.addToCache(new e(q))}return m}else{if(n.tagName){if(!(p=n.id)){p=Ext.id(n)}if(a[p]&&a[p].el){m=a[p].el;m.dom=n}else{m=e.addToCache(new e(n))}return m}else{if(n instanceof e){if(n!=c){if(Ext.isIE&&(n.id==undefined||n.id=="")){n.dom=n.dom}else{n.dom=h.getElementById(n.id)||n.dom}}return n}else{if(n.isComposite){return n}else{if(Ext.isArray(n)){return e.select(n)}else{if(n==h){if(!c){var o=function(){};o.prototype=e.prototype;c=new o();c.dom=h}return c}}}}}}return null};e.addToCache=function(m,n){n=n||m.id;a[n]={el:m,data:{},events:{}};return m};e.data=function(n,m,o){n=e.get(n);if(!n){return null}var p=a[n.id].data;if(arguments.length==2){return p[m]}else{return(p[m]=o)}};function k(){if(!Ext.enableGarbageCollector){clearInterval(e.collectorThreadId)}else{var m,p,r,q;for(m in a){q=a[m];if(q.skipGC){continue}p=q.el;r=p.dom;if(!r||!r.parentNode||(!r.offsetParent&&!h.getElementById(m))){if(Ext.enableListenerCollection){Ext.EventManager.removeAll(r)}delete a[m]}}if(Ext.isIE){var n={};for(m in a){n[m]=a[m]}a=Ext.elCache=n}}}e.collectorThreadId=setInterval(k,30000);var b=function(){};b.prototype=e.prototype;e.Flyweight=function(m){this.dom=m};e.Flyweight.prototype=new b();e.Flyweight.prototype.isFlyweight=true;e._flyweights={};e.fly=function(o,m){var n=null;m=m||"_global";if(o=Ext.getDom(o)){(e._flyweights[m]=e._flyweights[m]||new e.Flyweight()).dom=o;n=e._flyweights[m]}return n};Ext.get=e.get;Ext.fly=e.fly;var g=Ext.isStrict?{select:1}:{input:1,select:1,textarea:1};if(Ext.isIE||Ext.isGecko){g.button=1}})();Ext.Element.addMethods(function(){var d="parentNode",b="nextSibling",c="previousSibling",e=Ext.DomQuery,a=Ext.get;return{findParent:function(n,m,h){var k=this.dom,g=document.body,l=0,i;if(Ext.isGecko&&Object.prototype.toString.call(k)=="[object XULElement]"){return null}m=m||50;if(isNaN(m)){i=Ext.getDom(m);m=Number.MAX_VALUE}while(k&&k.nodeType==1&&l<m&&k!=g&&k!=i){if(e.is(k,n)){return h?a(k):k}l++;k=k.parentNode}return null},findParentNode:function(k,i,g){var h=Ext.fly(this.dom.parentNode,"_internal");return h?h.findParent(k,i,g):null},up:function(h,g){return this.findParentNode(h,g,true)},select:function(g){return Ext.Element.select(g,this.dom)},query:function(g){return e.select(g,this.dom)},child:function(g,h){var i=e.selectNode(g,this.dom);return h?i:a(i)},down:function(g,h){var i=e.selectNode(" > "+g,this.dom);return h?i:a(i)},parent:function(g,h){return this.matchNode(d,d,g,h)},next:function(g,h){return this.matchNode(b,b,g,h)},prev:function(g,h){return this.matchNode(c,c,g,h)},first:function(g,h){return this.matchNode(b,"firstChild",g,h)},last:function(g,h){return this.matchNode(c,"lastChild",g,h)},matchNode:function(h,l,g,i){var k=this.dom[l];while(k){if(k.nodeType==1&&(!g||e.is(k,g))){return !i?a(k):k}k=k[h]}return null}}}());Ext.Element.addMethods(function(){var c=Ext.getDom,a=Ext.get,b=Ext.DomHelper;return{appendChild:function(d){return a(d).appendTo(this)},appendTo:function(d){c(d).appendChild(this.dom);return this},insertBefore:function(d){(d=c(d)).parentNode.insertBefore(this.dom,d);return this},insertAfter:function(d){(d=c(d)).parentNode.insertBefore(this.dom,d.nextSibling);return this},insertFirst:function(e,d){e=e||{};if(e.nodeType||e.dom||typeof e=="string"){e=c(e);this.dom.insertBefore(e,this.dom.firstChild);return !d?a(e):e}else{return this.createChild(e,this.dom.firstChild,d)}},replace:function(d){d=a(d);this.insertBefore(d);d.remove();return this},replaceWith:function(d){var e=this;if(d.nodeType||d.dom||typeof d=="string"){d=c(d);e.dom.parentNode.insertBefore(d,e.dom)}else{d=b.insertBefore(e.dom,d)}delete Ext.elCache[e.id];Ext.removeNode(e.dom);e.id=Ext.id(e.dom=d);Ext.Element.addToCache(e.isFlyweight?new Ext.Element(e.dom):e);return e},createChild:function(e,d,g){e=e||{tag:"div"};return d?b.insertBefore(d,e,g!==true):b[!this.dom.firstChild?"overwrite":"append"](this.dom,e,g!==true)},wrap:function(d,e){var g=b.insertBefore(this.dom,d||{tag:"div"},!e);g.dom?g.dom.appendChild(this.dom):g.appendChild(this.dom);return g},insertHtml:function(e,g,d){var h=b.insertHtml(e,this.dom,g);return d?Ext.get(h):h}}}());Ext.Element.addMethods(function(){var B=Ext.supports,h={},y=/(-[a-z])/gi,t=document.defaultView,E=/alpha\(opacity=(.*)\)/i,m=/^\s+|\s+$/g,C=Ext.Element,v=/\s+/,b=/\w/g,d="padding",c="margin",z="border",u="-left",r="-right",x="-top",p="-bottom",k="-width",s=Math,A="hidden",e="isClipped",l="overflow",o="overflow-x",n="overflow-y",D="originalClip",i={l:z+u+k,r:z+r+k,t:z+x+k,b:z+p+k},g={l:d+u,r:d+r,t:d+x,b:d+p},a={l:c+u,r:c+r,t:c+x,b:c+p},F=Ext.Element.data;function q(G,H){return H.charAt(1).toUpperCase()}function w(G){return h[G]||(h[G]=G=="float"?(B.cssFloat?"cssFloat":"styleFloat"):G.replace(y,q))}return{adjustWidth:function(G){var H=this;var I=(typeof G=="number");if(I&&H.autoBoxAdjust&&!H.isBorderBox()){G-=(H.getBorderWidth("lr")+H.getPadding("lr"))}return(I&&G<0)?0:G},adjustHeight:function(G){var H=this;var I=(typeof G=="number");if(I&&H.autoBoxAdjust&&!H.isBorderBox()){G-=(H.getBorderWidth("tb")+H.getPadding("tb"))}return(I&&G<0)?0:G},addClass:function(K){var L=this,J,G,I,H=[];if(!Ext.isArray(K)){if(typeof K=="string"&&!this.hasClass(K)){L.dom.className+=" "+K}}else{for(J=0,G=K.length;J<G;J++){I=K[J];if(typeof I=="string"&&(" "+L.dom.className+" ").indexOf(" "+I+" ")==-1){H.push(I)}}if(H.length){L.dom.className+=" "+H.join(" ")}}return L},removeClass:function(L){var M=this,K,H,G,J,I;if(!Ext.isArray(L)){L=[L]}if(M.dom&&M.dom.className){I=M.dom.className.replace(m,"").split(v);for(K=0,G=L.length;K<G;K++){J=L[K];if(typeof J=="string"){J=J.replace(m,"");H=I.indexOf(J);if(H!=-1){I.splice(H,1)}}}M.dom.className=I.join(" ")}return M},radioClass:function(J){var K=this.dom.parentNode.childNodes,H,I,G;J=Ext.isArray(J)?J:[J];for(I=0,G=K.length;I<G;I++){H=K[I];if(H&&H.nodeType==1){Ext.fly(H,"_internal").removeClass(J)}}return this.addClass(J)},toggleClass:function(G){return this.hasClass(G)?this.removeClass(G):this.addClass(G)},hasClass:function(G){return G&&(" "+this.dom.className+" ").indexOf(" "+G+" ")!=-1},replaceClass:function(H,G){return this.removeClass(H).addClass(G)},isStyle:function(G,H){return this.getStyle(G)==H},getStyle:function(){return t&&t.getComputedStyle?function(L){var J=this.dom,G,I,H,K;if(J==document){return null}L=w(L);H=(G=J.style[L])?G:(I=t.getComputedStyle(J,""))?I[L]:null;if(L=="marginRight"&&H!="0px"&&!B.correctRightMargin){K=J.style.display;J.style.display="inline-block";H=t.getComputedStyle(J,"").marginRight;J.style.display=K}if(L=="backgroundColor"&&H=="rgba(0, 0, 0, 0)"&&!B.correctTransparentColor){H="transparent"}return H}:function(K){var I=this.dom,G,H;if(I==document){return null}if(K=="opacity"){if(I.style.filter.match){if(G=I.style.filter.match(E)){var J=parseFloat(G[1]);if(!isNaN(J)){return J?J/100:0}}}return 1}K=w(K);return I.style[K]||((H=I.currentStyle)?H[K]:null)}}(),getColor:function(G,H,L){var J=this.getStyle(G),I=(typeof L!="undefined")?L:"#",K;if(!J||(/transparent|inherit/.test(J))){return H}if(/^r/.test(J)){Ext.each(J.slice(4,J.length-1).split(","),function(M){K=parseInt(M,10);I+=(K<16?"0":"")+K.toString(16)})}else{J=J.replace("#","");I+=J.length==3?J.replace(/^(\w)(\w)(\w)$/,"$1$1$2$2$3$3"):J}return(I.length>5?I.toLowerCase():H)},setStyle:function(J,I){var G,H;if(typeof J!="object"){G={};G[J]=I;J=G}for(H in J){I=J[H];H=="opacity"?this.setOpacity(I):this.dom.style[w(H)]=I}return this},setOpacity:function(H,G){var K=this,I=K.dom.style;if(!G||!K.anim){if(Ext.isIE){var J=H<1?"alpha(opacity="+H*100+")":"",L=I.filter.replace(E,"").replace(m,"");I.zoom=1;I.filter=L+(L.length>0?" ":"")+J}else{I.opacity=H}}else{K.anim({opacity:{to:H}},K.preanim(arguments,1),null,0.35,"easeIn")}return K},clearOpacity:function(){var G=this.dom.style;if(Ext.isIE){if(!Ext.isEmpty(G.filter)){G.filter=G.filter.replace(E,"").replace(m,"")}}else{G.opacity=G["-moz-opacity"]=G["-khtml-opacity"]=""}return this},getHeight:function(I){var H=this,K=H.dom,J=Ext.isIE&&H.isStyle("display","none"),G=s.max(K.offsetHeight,J?0:K.clientHeight)||0;G=!I?G:G-H.getBorderWidth("tb")-H.getPadding("tb");return G<0?0:G},getWidth:function(H){var I=this,K=I.dom,J=Ext.isIE&&I.isStyle("display","none"),G=s.max(K.offsetWidth,J?0:K.clientWidth)||0;G=!H?G:G-I.getBorderWidth("lr")-I.getPadding("lr");return G<0?0:G},setWidth:function(H,G){var I=this;H=I.adjustWidth(H);!G||!I.anim?I.dom.style.width=I.addUnits(H):I.anim({width:{to:H}},I.preanim(arguments,1));return I},setHeight:function(G,H){var I=this;G=I.adjustHeight(G);!H||!I.anim?I.dom.style.height=I.addUnits(G):I.anim({height:{to:G}},I.preanim(arguments,1));return I},getBorderWidth:function(G){return this.addStyles(G,i)},getPadding:function(G){return this.addStyles(G,g)},clip:function(){var G=this,H=G.dom;if(!F(H,e)){F(H,e,true);F(H,D,{o:G.getStyle(l),x:G.getStyle(o),y:G.getStyle(n)});G.setStyle(l,A);G.setStyle(o,A);G.setStyle(n,A)}return G},unclip:function(){var G=this,I=G.dom;if(F(I,e)){F(I,e,false);var H=F(I,D);if(H.o){G.setStyle(l,H.o)}if(H.x){G.setStyle(o,H.x)}if(H.y){G.setStyle(n,H.y)}}return G},addStyles:function(N,M){var K=0,L=N.match(b),J,I,H,G=L.length;for(H=0;H<G;H++){J=L[H];I=J&&parseInt(this.getStyle(M[J]),10);if(I){K+=s.abs(I)}}return K},margins:a}}());(function(){var a=Ext.lib.Dom,b="left",g="right",d="top",i="bottom",h="position",c="static",e="relative",k="auto",l="z-index";Ext.Element.addMethods({getX:function(){return a.getX(this.dom)},getY:function(){return a.getY(this.dom)},getXY:function(){return a.getXY(this.dom)},getOffsetsTo:function(m){var p=this.getXY(),n=Ext.fly(m,"_internal").getXY();return[p[0]-n[0],p[1]-n[1]]},setX:function(m,n){return this.setXY([m,this.getY()],this.animTest(arguments,n,1))},setY:function(n,m){return this.setXY([this.getX(),n],this.animTest(arguments,m,1))},setLeft:function(m){this.setStyle(b,this.addUnits(m));return this},setTop:function(m){this.setStyle(d,this.addUnits(m));return this},setRight:function(m){this.setStyle(g,this.addUnits(m));return this},setBottom:function(m){this.setStyle(i,this.addUnits(m));return this},setXY:function(o,m){var n=this;if(!m||!n.anim){a.setXY(n.dom,o)}else{n.anim({points:{to:o}},n.preanim(arguments,1),"motion")}return n},setLocation:function(m,o,n){return this.setXY([m,o],this.animTest(arguments,n,2))},moveTo:function(m,o,n){return this.setXY([m,o],this.animTest(arguments,n,2))},getLeft:function(m){return !m?this.getX():parseInt(this.getStyle(b),10)||0},getRight:function(m){var n=this;return !m?n.getX()+n.getWidth():(n.getLeft(true)+n.getWidth())||0},getTop:function(m){return !m?this.getY():parseInt(this.getStyle(d),10)||0},getBottom:function(m){var n=this;return !m?n.getY()+n.getHeight():(n.getTop(true)+n.getHeight())||0},position:function(q,p,m,o){var n=this;if(!q&&n.isStyle(h,c)){n.setStyle(h,e)}else{if(q){n.setStyle(h,q)}}if(p){n.setStyle(l,p)}if(m||o){n.setXY([m||false,o||false])}},clearPositioning:function(m){m=m||"";this.setStyle({left:m,right:m,top:m,bottom:m,"z-index":"",position:c});return this},getPositioning:function(){var m=this.getStyle(b);var n=this.getStyle(d);return{position:this.getStyle(h),left:m,right:m?"":this.getStyle(g),top:n,bottom:n?"":this.getStyle(i),"z-index":this.getStyle(l)}},setPositioning:function(m){var o=this,n=o.dom.style;o.setStyle(m);if(m.right==k){n.right=""}if(m.bottom==k){n.bottom=""}return o},translatePoints:function(m,u){u=isNaN(m[1])?u:m[1];m=isNaN(m[0])?m:m[0];var q=this,r=q.isStyle(h,e),s=q.getXY(),n=parseInt(q.getStyle(b),10),p=parseInt(q.getStyle(d),10);n=!isNaN(n)?n:(r?0:q.dom.offsetLeft);p=!isNaN(p)?p:(r?0:q.dom.offsetTop);return{left:(m-s[0]+n),top:(u-s[1]+p)}},animTest:function(n,m,o){return !!m&&this.preanim?this.preanim(n,o):false}})})();Ext.Element.addMethods({isScrollable:function(){var a=this.dom;return a.scrollHeight>a.clientHeight||a.scrollWidth>a.clientWidth},scrollTo:function(a,b){this.dom["scroll"+(/top/i.test(a)?"Top":"Left")]=b;return this},getScroll:function(){var i=this.dom,h=document,a=h.body,c=h.documentElement,b,g,e;if(i==h||i==a){if(Ext.isIE&&Ext.isStrict){b=c.scrollLeft;g=c.scrollTop}else{b=window.pageXOffset;g=window.pageYOffset}e={left:b||(a?a.scrollLeft:0),top:g||(a?a.scrollTop:0)}}else{e={left:i.scrollLeft,top:i.scrollTop}}return e}});Ext.Element.VISIBILITY=1;Ext.Element.DISPLAY=2;Ext.Element.OFFSETS=3;Ext.Element.ASCLASS=4;Ext.Element.visibilityCls="x-hide-nosize";Ext.Element.addMethods(function(){var e=Ext.Element,q="opacity",k="visibility",g="display",d="hidden",o="offsets",l="asclass",n="none",a="nosize",b="originalDisplay",c="visibilityMode",h="isVisible",i=e.data,m=function(s){var r=i(s,b);if(r===undefined){i(s,b,r="")}return r},p=function(s){var r=i(s,c);if(r===undefined){i(s,c,r=1)}return r};return{originalDisplay:"",visibilityMode:1,setVisibilityMode:function(r){i(this.dom,c,r);return this},animate:function(s,u,t,v,r){this.anim(s,{duration:u,callback:t,easing:v},r);return this},anim:function(u,v,s,x,t,r){s=s||"run";v=v||{};var w=this,y=Ext.lib.Anim[s](w.dom,u,(v.duration||x)||0.35,(v.easing||t)||"easeOut",function(){if(r){r.call(w)}if(v.callback){v.callback.call(v.scope||w,w,v)}},w);v.anim=y;return y},preanim:function(r,s){return !r[s]?false:(typeof r[s]=="object"?r[s]:{duration:r[s+1],callback:r[s+2],easing:r[s+3]})},isVisible:function(){var r=this,t=r.dom,s=i(t,h);if(typeof s=="boolean"){return s}s=!r.isStyle(k,d)&&!r.isStyle(g,n)&&!((p(t)==e.ASCLASS)&&r.hasClass(r.visibilityCls||e.visibilityCls));i(t,h,s);return s},setVisible:function(u,r){var x=this,s,z,y,w,v=x.dom,t=p(v);if(typeof r=="string"){switch(r){case g:t=e.DISPLAY;break;case k:t=e.VISIBILITY;break;case o:t=e.OFFSETS;break;case a:case l:t=e.ASCLASS;break}x.setVisibilityMode(t);r=false}if(!r||!x.anim){if(t==e.ASCLASS){x[u?"removeClass":"addClass"](x.visibilityCls||e.visibilityCls)}else{if(t==e.DISPLAY){return x.setDisplayed(u)}else{if(t==e.OFFSETS){if(!u){x.hideModeStyles={position:x.getStyle("position"),top:x.getStyle("top"),left:x.getStyle("left")};x.applyStyles({position:"absolute",top:"-10000px",left:"-10000px"})}else{x.applyStyles(x.hideModeStyles||{position:"",top:"",left:""});delete x.hideModeStyles}}else{x.fixDisplay();v.style.visibility=u?"visible":d}}}}else{if(u){x.setOpacity(0.01);x.setVisible(true)}x.anim({opacity:{to:(u?1:0)}},x.preanim(arguments,1),null,0.35,"easeIn",function(){u||x.setVisible(false).setOpacity(1)})}i(v,h,u);return x},hasMetrics:function(){var r=this.dom;return this.isVisible()||(p(r)==e.VISIBILITY)},toggle:function(r){var s=this;s.setVisible(!s.isVisible(),s.preanim(arguments,0));return s},setDisplayed:function(r){if(typeof r=="boolean"){r=r?m(this.dom):n}this.setStyle(g,r);return this},fixDisplay:function(){var r=this;if(r.isStyle(g,n)){r.setStyle(k,d);r.setStyle(g,m(this.dom));if(r.isStyle(g,n)){r.setStyle(g,"block")}}},hide:function(r){if(typeof r=="string"){this.setVisible(false,r);return this}this.setVisible(false,this.preanim(arguments,0));return this},show:function(r){if(typeof r=="string"){this.setVisible(true,r);return this}this.setVisible(true,this.preanim(arguments,0));return this}}}());(function(){var z=null,B=undefined,l=true,u=false,k="setX",h="setY",a="setXY",o="left",m="bottom",t="top",n="right",r="height",g="width",i="points",x="hidden",A="absolute",v="visible",e="motion",p="position",s="easeOut",d=new Ext.Element.Flyweight(),w={},y=function(C){return C||{}},q=function(C){d.dom=C;d.id=Ext.id(C);return d},c=function(C){if(!w[C]){w[C]=[]}return w[C]},b=function(D,C){w[D]=C};Ext.enableFx=l;Ext.Fx={switchStatements:function(D,E,C){return E.apply(this,C[D])},slideIn:function(I,F){F=y(F);var K=this,H=K.dom,N=H.style,P,C,M,E,D,N,J,O,L,G;I=I||"t";K.queueFx(F,function(){P=q(H).getXY();q(H).fixDisplay();C=q(H).getFxRestore();M={x:P[0],y:P[1],0:P[0],1:P[1],width:H.offsetWidth,height:H.offsetHeight};M.right=M.x+M.width;M.bottom=M.y+M.height;q(H).setWidth(M.width).setHeight(M.height);E=q(H).fxWrap(C.pos,F,x);N.visibility=v;N.position=A;function Q(){q(H).fxUnwrap(E,C.pos,F);N.width=C.width;N.height=C.height;q(H).afterFx(F)}O={to:[M.x,M.y]};L={to:M.width};G={to:M.height};function R(V,S,W,T,Y,aa,ad,ac,ab,X,U){var Z={};q(V).setWidth(W).setHeight(T);if(q(V)[Y]){q(V)[Y](aa)}S[ad]=S[ac]="0";if(ab){Z.width=ab}if(X){Z.height=X}if(U){Z.points=U}return Z}J=q(H).switchStatements(I.toLowerCase(),R,{t:[E,N,M.width,0,z,z,o,m,z,G,z],l:[E,N,0,M.height,z,z,n,t,L,z,z],r:[E,N,M.width,M.height,k,M.right,o,t,z,z,O],b:[E,N,M.width,M.height,h,M.bottom,o,t,z,G,O],tl:[E,N,0,0,z,z,n,m,L,G,O],bl:[E,N,0,0,h,M.y+M.height,n,t,L,G,O],br:[E,N,0,0,a,[M.right,M.bottom],o,t,L,G,O],tr:[E,N,0,0,k,M.x+M.width,o,m,L,G,O]});N.visibility=v;q(E).show();arguments.callee.anim=q(E).fxanim(J,F,e,0.5,s,Q)});return K},slideOut:function(G,E){E=y(E);var I=this,F=I.dom,L=F.style,M=I.getXY(),D,C,J,K,H={to:0};G=G||"t";I.queueFx(E,function(){C=q(F).getFxRestore();J={x:M[0],y:M[1],0:M[0],1:M[1],width:F.offsetWidth,height:F.offsetHeight};J.right=J.x+J.width;J.bottom=J.y+J.height;q(F).setWidth(J.width).setHeight(J.height);D=q(F).fxWrap(C.pos,E,v);L.visibility=v;L.position=A;q(D).setWidth(J.width).setHeight(J.height);function N(){E.useDisplay?q(F).setDisplayed(u):q(F).hide();q(F).fxUnwrap(D,C.pos,E);L.width=C.width;L.height=C.height;q(F).afterFx(E)}function O(P,X,V,Y,T,W,S,U,R){var Q={};P[X]=P[V]="0";Q[Y]=T;if(W){Q[W]=S}if(U){Q[U]=R}return Q}K=q(F).switchStatements(G.toLowerCase(),O,{t:[L,o,m,r,H],l:[L,n,t,g,H],r:[L,o,t,g,H,i,{to:[J.right,J.y]}],b:[L,o,t,r,H,i,{to:[J.x,J.bottom]}],tl:[L,n,m,g,H,r,H],bl:[L,n,t,g,H,r,H,i,{to:[J.x,J.bottom]}],br:[L,o,t,g,H,r,H,i,{to:[J.x+J.width,J.bottom]}],tr:[L,o,m,g,H,r,H,i,{to:[J.right,J.y]}]});arguments.callee.anim=q(D).fxanim(K,E,e,0.5,s,N)});return I},puff:function(I){I=y(I);var G=this,H=G.dom,D=H.style,E,C,F;G.queueFx(I,function(){E=q(H).getWidth();C=q(H).getHeight();q(H).clearOpacity();q(H).show();F=q(H).getFxRestore();function J(){I.useDisplay?q(H).setDisplayed(u):q(H).hide();q(H).clearOpacity();q(H).setPositioning(F.pos);D.width=F.width;D.height=F.height;D.fontSize="";q(H).afterFx(I)}arguments.callee.anim=q(H).fxanim({width:{to:q(H).adjustWidth(E*2)},height:{to:q(H).adjustHeight(C*2)},points:{by:[-E*0.5,-C*0.5]},opacity:{to:0},fontSize:{to:200,unit:"%"}},I,e,0.5,s,J)});return G},switchOff:function(G){G=y(G);var E=this,F=E.dom,C=F.style,D;E.queueFx(G,function(){q(F).clearOpacity();q(F).clip();D=q(F).getFxRestore();function H(){G.useDisplay?q(F).setDisplayed(u):q(F).hide();q(F).clearOpacity();q(F).setPositioning(D.pos);C.width=D.width;C.height=D.height;q(F).afterFx(G)}q(F).fxanim({opacity:{to:0.3}},z,z,0.1,z,function(){q(F).clearOpacity();(function(){q(F).fxanim({height:{to:1},points:{by:[0,q(F).getHeight()*0.5]}},G,e,0.3,"easeIn",H)}).defer(100)})});return E},highlight:function(E,I){I=y(I);var G=this,H=G.dom,C=I.attr||"backgroundColor",D={},F;G.queueFx(I,function(){q(H).clearOpacity();q(H).show();function J(){H.style[C]=F;q(H).afterFx(I)}F=H.style[C];D[C]={from:E||"ffff9c",to:I.endColor||q(H).getColor(C)||"ffffff"};arguments.callee.anim=q(H).fxanim(D,I,"color",1,"easeIn",J)});return G},frame:function(C,F,I){I=y(I);var E=this,H=E.dom,D,G;E.queueFx(I,function(){C=C||"#C3DAF9";if(C.length==6){C="#"+C}F=F||1;q(H).show();var M=q(H).getXY(),K={x:M[0],y:M[1],0:M[0],1:M[1],width:H.offsetWidth,height:H.offsetHeight},J=function(){D=q(document.body||document.documentElement).createChild({style:{position:A,"z-index":35000,border:"0px solid "+C}});return D.queueFx({},L)};arguments.callee.anim={isAnimated:true,stop:function(){F=0;D.stopFx()}};function L(){var N=Ext.isBorderBox?2:1;G=D.anim({top:{from:K.y,to:K.y-20},left:{from:K.x,to:K.x-20},borderWidth:{from:0,to:10},opacity:{from:1,to:0},height:{from:K.height,to:K.height+20*N},width:{from:K.width,to:K.width+20*N}},{duration:I.duration||1,callback:function(){D.remove();--F>0?J():q(H).afterFx(I)}});arguments.callee.anim={isAnimated:true,stop:function(){G.stop()}}}J()});return E},pause:function(E){var D=this.dom,C;this.queueFx({},function(){C=setTimeout(function(){q(D).afterFx({})},E*1000);arguments.callee.anim={isAnimated:true,stop:function(){clearTimeout(C);q(D).afterFx({})}}});return this},fadeIn:function(E){E=y(E);var C=this,D=C.dom,F=E.endOpacity||1;C.queueFx(E,function(){q(D).setOpacity(0);q(D).fixDisplay();D.style.visibility=v;arguments.callee.anim=q(D).fxanim({opacity:{to:F}},E,z,0.5,s,function(){if(F==1){q(D).clearOpacity()}q(D).afterFx(E)})});return C},fadeOut:function(F){F=y(F);var D=this,E=D.dom,C=E.style,G=F.endOpacity||0;D.queueFx(F,function(){arguments.callee.anim=q(E).fxanim({opacity:{to:G}},F,z,0.5,s,function(){if(G==0){Ext.Element.data(E,"visibilityMode")==Ext.Element.DISPLAY||F.useDisplay?C.display="none":C.visibility=x;q(E).clearOpacity()}q(E).afterFx(F)})});return D},scale:function(C,D,E){this.shift(Ext.apply({},E,{width:C,height:D}));return this},shift:function(E){E=y(E);var D=this.dom,C={};this.queueFx(E,function(){for(var F in E){if(E[F]!=B){C[F]={to:E[F]}}}C.width?C.width.to=q(D).adjustWidth(E.width):C;C.height?C.height.to=q(D).adjustWidth(E.height):C;if(C.x||C.y||C.xy){C.points=C.xy||{to:[C.x?C.x.to:q(D).getX(),C.y?C.y.to:q(D).getY()]}}arguments.callee.anim=q(D).fxanim(C,E,e,0.35,s,function(){q(D).afterFx(E)})});return this},ghost:function(F,D){D=y(D);var H=this,E=H.dom,K=E.style,I={opacity:{to:0},points:{}},L=I.points,C,J,G;F=F||"b";H.queueFx(D,function(){C=q(E).getFxRestore();J=q(E).getWidth();G=q(E).getHeight();function M(){D.useDisplay?q(E).setDisplayed(u):q(E).hide();q(E).clearOpacity();q(E).setPositioning(C.pos);K.width=C.width;K.height=C.height;q(E).afterFx(D)}L.by=q(E).switchStatements(F.toLowerCase(),function(O,N){return[O,N]},{t:[0,-G],l:[-J,0],r:[J,0],b:[0,G],tl:[-J,-G],bl:[-J,G],br:[J,G],tr:[J,-G]});arguments.callee.anim=q(E).fxanim(I,D,e,0.5,s,M)});return H},syncFx:function(){var C=this;C.fxDefaults=Ext.apply(C.fxDefaults||{},{block:u,concurrent:l,stopFx:u});return C},sequenceFx:function(){var C=this;C.fxDefaults=Ext.apply(C.fxDefaults||{},{block:u,concurrent:u,stopFx:u});return C},nextFx:function(){var C=c(this.dom.id)[0];if(C){C.call(this)}},hasActiveFx:function(){return c(this.dom.id)[0]},stopFx:function(C){var D=this,F=D.dom.id;if(D.hasActiveFx()){var E=c(F)[0];if(E&&E.anim){if(E.anim.isAnimated){b(F,[E]);E.anim.stop(C!==undefined?C:l)}else{b(F,[])}}}return D},beforeFx:function(C){if(this.hasActiveFx()&&!C.concurrent){if(C.stopFx){this.stopFx();return l}return u}return l},hasFxBlock:function(){var C=c(this.dom.id);return C&&C[0]&&C[0].block},queueFx:function(F,C){var D=q(this.dom);if(!D.hasFxBlock()){Ext.applyIf(F,D.fxDefaults);if(!F.concurrent){var E=D.beforeFx(F);C.block=F.block;c(D.dom.id).push(C);if(E){D.nextFx()}}else{C.call(D)}}return D},fxWrap:function(I,G,E){var F=this.dom,D,C;if(!G.wrap||!(D=Ext.getDom(G.wrap))){if(G.fixPosition){C=q(F).getXY()}var H=document.createElement("div");H.style.visibility=E;D=F.parentNode.insertBefore(H,F);q(D).setPositioning(I);if(q(D).isStyle(p,"static")){q(D).position("relative")}q(F).clearPositioning("auto");q(D).clip();D.appendChild(F);if(C){q(D).setXY(C)}}return D},fxUnwrap:function(D,G,F){var E=this.dom;q(E).clearPositioning();q(E).setPositioning(G);if(!F.wrap){var C=q(D).dom.parentNode;C.insertBefore(E,D);q(D).remove()}},getFxRestore:function(){var C=this.dom.style;return{pos:this.getPositioning(),width:C.width,height:C.height}},afterFx:function(D){var C=this.dom,E=C.id;if(D.afterStyle){q(C).setStyle(D.afterStyle)}if(D.afterCls){q(C).addClass(D.afterCls)}if(D.remove==l){q(C).remove()}if(D.callback){D.callback.call(D.scope,q(C))}if(!D.concurrent){c(E).shift();q(C).nextFx()}},fxanim:function(F,G,D,H,E,C){D=D||"run";G=G||{};var I=Ext.lib.Anim[D](this.dom,F,(G.duration||H)||0.35,(G.easing||E)||s,C,this);G.anim=I;return I}};Ext.Fx.resize=Ext.Fx.scale;Ext.Element.addMethods(Ext.Fx)})();Ext.CompositeElementLite=function(b,a){this.elements=[];this.add(b,a);this.el=new Ext.Element.Flyweight()};Ext.CompositeElementLite.prototype={isComposite:true,getElement:function(a){var b=this.el;b.dom=a;b.id=a.id;return b},transformElement:function(a){return Ext.getDom(a)},getCount:function(){return this.elements.length},add:function(d,b){var e=this,g=e.elements;if(!d){return this}if(typeof d=="string"){d=Ext.Element.selectorFunction(d,b)}else{if(d.isComposite){d=d.elements}else{if(!Ext.isIterable(d)){d=[d]}}}for(var c=0,a=d.length;c<a;++c){g.push(e.transformElement(d[c]))}return e},invoke:function(g,b){var h=this,d=h.elements,a=d.length,k,c;for(c=0;c<a;c++){k=d[c];if(k){Ext.Element.prototype[g].apply(h.getElement(k),b)}}return h},item:function(b){var d=this,c=d.elements[b],a=null;if(c){a=d.getElement(c)}return a},addListener:function(b,k,h,g){var d=this.elements,a=d.length,c,l;for(c=0;c<a;c++){l=d[c];if(l){Ext.EventManager.on(l,b,k,h||l,g)}}return this},each:function(g,d){var h=this,c=h.elements,a=c.length,b,k;for(b=0;b<a;b++){k=c[b];if(k){k=this.getElement(k);if(g.call(d||k,k,h,b)===false){break}}}return h},fill:function(a){var b=this;b.elements=[];b.add(a);return b},filter:function(a){var b=[],d=this,c=Ext.isFunction(a)?a:function(e){return e.is(a)};d.each(function(h,e,g){if(c(h,g)!==false){b[b.length]=d.transformElement(h)}});d.elements=b;return d},indexOf:function(a){return this.elements.indexOf(this.transformElement(a))},replaceElement:function(e,c,a){var b=!isNaN(e)?e:this.indexOf(e),g;if(b>-1){c=Ext.getDom(c);if(a){g=this.elements[b];g.parentNode.insertBefore(c,g);Ext.removeNode(g)}this.elements.splice(b,1,c)}return this},clear:function(){this.elements=[]}};Ext.CompositeElementLite.prototype.on=Ext.CompositeElementLite.prototype.addListener;Ext.CompositeElementLite.importElementMethods=function(){var c,b=Ext.Element.prototype,a=Ext.CompositeElementLite.prototype;for(c in b){if(typeof b[c]=="function"){(function(d){a[d]=a[d]||function(){return this.invoke(d,arguments)}}).call(a,c)}}};Ext.CompositeElementLite.importElementMethods();if(Ext.DomQuery){Ext.Element.selectorFunction=Ext.DomQuery.select}Ext.Element.select=function(a,b){var c;if(typeof a=="string"){c=Ext.Element.selectorFunction(a,b)}else{if(a.length!==undefined){c=a}else{throw"Invalid selector"}}return new Ext.CompositeElementLite(c)};Ext.select=Ext.Element.select;(function(){var b="beforerequest",e="requestcomplete",d="requestexception",h=undefined,c="load",i="POST",a="GET",g=window;Ext.data.Connection=function(k){Ext.apply(this,k);this.addEvents(b,e,d);Ext.data.Connection.superclass.constructor.call(this)};Ext.extend(Ext.data.Connection,Ext.util.Observable,{timeout:30000,autoAbort:false,disableCaching:true,disableCachingParam:"_dc",request:function(q){var t=this;if(t.fireEvent(b,t,q)){if(q.el){if(!Ext.isEmpty(q.indicatorText)){t.indicatorText='<div class="loading-indicator">'+q.indicatorText+"</div>"}if(t.indicatorText){Ext.getDom(q.el).innerHTML=t.indicatorText}q.success=(Ext.isFunction(q.success)?q.success:function(){}).createInterceptor(function(o){Ext.getDom(q.el).innerHTML=o.responseText})}var m=q.params,l=q.url||t.url,k,r={success:t.handleResponse,failure:t.handleFailure,scope:t,argument:{options:q},timeout:Ext.num(q.timeout,t.timeout)},n,u;if(Ext.isFunction(m)){m=m.call(q.scope||g,q)}m=Ext.urlEncode(t.extraParams,Ext.isObject(m)?Ext.urlEncode(m):m);if(Ext.isFunction(l)){l=l.call(q.scope||g,q)}if((n=Ext.getDom(q.form))){l=l||n.action;if(q.isUpload||(/multipart\/form-data/i.test(n.getAttribute("enctype")))){return t.doFormUpload.call(t,q,m,l)}u=Ext.lib.Ajax.serializeForm(n);m=m?(m+"&"+u):u}k=q.method||t.method||((m||q.xmlData||q.jsonData)?i:a);if(k===a&&(t.disableCaching&&q.disableCaching!==false)||q.disableCaching===true){var s=q.disableCachingParam||t.disableCachingParam;l=Ext.urlAppend(l,s+"="+(new Date().getTime()))}q.headers=Ext.apply(q.headers||{},t.defaultHeaders||{});if(q.autoAbort===true||t.autoAbort){t.abort()}if((k==a||q.xmlData||q.jsonData)&&m){l=Ext.urlAppend(l,m);m=""}return(t.transId=Ext.lib.Ajax.request(k,l,r,m,q))}else{return q.callback?q.callback.apply(q.scope,[q,h,h]):null}},isLoading:function(k){return k?Ext.lib.Ajax.isCallInProgress(k):!!this.transId},abort:function(k){if(k||this.isLoading()){Ext.lib.Ajax.abort(k||this.transId)}},handleResponse:function(k){this.transId=false;var l=k.argument.options;k.argument=l?l.argument:null;this.fireEvent(e,this,k,l);if(l.success){l.success.call(l.scope,k,l)}if(l.callback){l.callback.call(l.scope,l,true,k)}},handleFailure:function(k,m){this.transId=false;var l=k.argument.options;k.argument=l?l.argument:null;this.fireEvent(d,this,k,l,m);if(l.failure){l.failure.call(l.scope,k,l)}if(l.callback){l.callback.call(l.scope,l,false,k)}},doFormUpload:function(r,k,l){var m=Ext.id(),w=document,s=w.createElement("iframe"),n=Ext.getDom(r.form),v=[],u,q="multipart/form-data",p={target:n.target,method:n.method,encoding:n.encoding,enctype:n.enctype,action:n.action};Ext.fly(s).set({id:m,name:m,cls:"x-hidden",src:Ext.SSL_SECURE_URL});w.body.appendChild(s);if(Ext.isIE){document.frames[m].name=m}Ext.fly(n).set({target:m,method:i,enctype:q,encoding:q,action:l||p.action});Ext.iterate(Ext.urlDecode(k,false),function(x,o){u=w.createElement("input");Ext.fly(u).set({type:"hidden",value:o,name:x});n.appendChild(u);v.push(u)});function t(){var y=this,x={responseText:"",responseXML:null,argument:r.argument},B,A;try{B=s.contentWindow.document||s.contentDocument||g.frames[m].document;if(B){if(B.body){if(/textarea/i.test((A=B.body.firstChild||{}).tagName)){x.responseText=A.value}else{x.responseText=B.body.innerHTML}}x.responseXML=B.XMLDocument||B}}catch(z){}Ext.EventManager.removeListener(s,c,t,y);y.fireEvent(e,y,x,r);function o(E,D,C){if(Ext.isFunction(E)){E.apply(D,C)}}o(r.success,r.scope,[x,r]);o(r.callback,r.scope,[r,true,x]);if(!y.debugUploads){setTimeout(function(){Ext.removeNode(s)},100)}}Ext.EventManager.on(s,c,t,this);n.submit();Ext.fly(n).set(p);Ext.each(v,function(o){Ext.removeNode(o)})}})})();Ext.Ajax=new Ext.data.Connection({autoAbort:false,serializeForm:function(a){return Ext.lib.Ajax.serializeForm(a)}});Ext.util.JSON=new (function(){var useHasOwn=!!{}.hasOwnProperty,isNative=function(){var useNative=null;return function(){if(useNative===null){useNative=Ext.USE_NATIVE_JSON&&window.JSON&&JSON.toString()=="[object JSON]"}return useNative}}(),pad=function(n){return n<10?"0"+n:n},doDecode=function(json){return eval("("+json+")")},doEncode=function(o){if(!Ext.isDefined(o)||o===null){return"null"}else{if(Ext.isArray(o)){return encodeArray(o)}else{if(Ext.isDate(o)){return Ext.util.JSON.encodeDate(o)}else{if(Ext.isString(o)){return encodeString(o)}else{if(typeof o=="number"){return isFinite(o)?String(o):"null"}else{if(Ext.isBoolean(o)){return String(o)}else{var a=["{"],b,i,v;for(i in o){if(!o.getElementsByTagName){if(!useHasOwn||o.hasOwnProperty(i)){v=o[i];switch(typeof v){case"undefined":case"function":case"unknown":break;default:if(b){a.push(",")}a.push(doEncode(i),":",v===null?"null":doEncode(v));b=true}}}}a.push("}");return a.join("")}}}}}}},m={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},encodeString=function(s){if(/["\\\x00-\x1f]/.test(s)){return'"'+s.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c}c=b.charCodeAt();return"\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16)})+'"'}return'"'+s+'"'},encodeArray=function(o){var a=["["],b,i,l=o.length,v;for(i=0;i<l;i+=1){v=o[i];switch(typeof v){case"undefined":case"function":case"unknown":break;default:if(b){a.push(",")}a.push(v===null?"null":Ext.util.JSON.encode(v));b=true}}a.push("]");return a.join("")};this.encodeDate=function(o){return'"'+o.getFullYear()+"-"+pad(o.getMonth()+1)+"-"+pad(o.getDate())+"T"+pad(o.getHours())+":"+pad(o.getMinutes())+":"+pad(o.getSeconds())+'"'};this.encode=function(){var ec;return function(o){if(!ec){ec=isNative()?JSON.stringify:doEncode}return ec(o)}}();this.decode=function(){var dc;return function(json){if(!dc){dc=isNative()?JSON.parse:doDecode}return dc(json)}}()})();Ext.encode=Ext.util.JSON.encode;Ext.decode=Ext.util.JSON.decode;Ext.EventManager=function(){var A,q,k=false,m=Ext.isGecko||Ext.isWebKit||Ext.isSafari,p=Ext.lib.Event,r=Ext.lib.Dom,c=document,B=window,s="DOMContentLoaded",u="complete",g=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/,v=[];function o(F){var I=false,E=0,D=v.length,G=false,H;if(F){if(F.getElementById||F.navigator){for(;E<D;++E){H=v[E];if(H.el===F){I=H.id;break}}if(!I){I=Ext.id(F);v.push({id:I,el:F});G=true}}else{I=Ext.id(F)}if(!Ext.elCache[I]){Ext.Element.addToCache(new Ext.Element(F),I);if(G){Ext.elCache[I].skipGC=true}}}return I}function n(F,H,K,G,E,M){F=Ext.getDom(F);var D=o(F),L=Ext.elCache[D].events,I;I=p.on(F,H,E);L[H]=L[H]||[];L[H].push([K,E,M,I,G]);if(F.addEventListener&&H=="mousewheel"){var J=["DOMMouseScroll",E,false];F.addEventListener.apply(F,J);Ext.EventManager.addListener(B,"unload",function(){F.removeEventListener.apply(F,J)})}if(F==c&&H=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.addListener(E)}}function d(){if(window!=top){return false}try{c.documentElement.doScroll("left")}catch(D){return false}b();return true}function C(D){if(Ext.isIE&&d()){return true}if(c.readyState==u){b();return true}k||(q=setTimeout(arguments.callee,2));return false}var l;function i(D){l||(l=Ext.query("style, link[rel=stylesheet]"));if(l.length==c.styleSheets.length){b();return true}k||(q=setTimeout(arguments.callee,2));return false}function z(D){c.removeEventListener(s,arguments.callee,false);i()}function b(D){if(!k){k=true;if(q){clearTimeout(q)}if(m){c.removeEventListener(s,b,false)}if(Ext.isIE&&C.bindIE){c.detachEvent("onreadystatechange",C)}p.un(B,"load",arguments.callee)}if(A&&!Ext.isReady){Ext.isReady=true;A.fire();A.listeners=[]}}function a(){A||(A=new Ext.util.Event());if(m){c.addEventListener(s,b,false)}if(Ext.isIE){if(!C()){C.bindIE=true;c.attachEvent("onreadystatechange",C)}}else{if(Ext.isOpera){(c.readyState==u&&i())||c.addEventListener(s,z,false)}else{if(Ext.isWebKit){C()}}}p.on(B,"load",b)}function y(D,E){return function(){var F=Ext.toArray(arguments);if(E.target==Ext.EventObject.setEvent(F[0]).target){D.apply(this,F)}}}function x(E,F,D){return function(G){D.delay(F.buffer,E,null,[new Ext.EventObjectImpl(G)])}}function t(H,G,D,F,E){return function(I){Ext.EventManager.removeListener(G,D,F,E);H(I)}}function e(E,F,D){return function(H){var G=new Ext.util.DelayedTask(E);if(!D.tasks){D.tasks=[]}D.tasks.push(G);G.delay(F.delay||10,E,null,[new Ext.EventObjectImpl(H)])}}function h(I,H,D,K,L){var E=(!D||typeof D=="boolean")?{}:D,F=Ext.getDom(I),G;K=K||E.fn;L=L||E.scope;if(!F){throw'Error listening for "'+H+'". Element "'+I+"\" doesn't exist."}function J(N){if(!Ext){return}N=Ext.EventObject.setEvent(N);var M;if(E.delegate){if(!(M=N.getTarget(E.delegate,F))){return}}else{M=N.target}if(E.stopEvent){N.stopEvent()}if(E.preventDefault){N.preventDefault()}if(E.stopPropagation){N.stopPropagation()}if(E.normalized===false){N=N.browserEvent}K.call(L||F,N,M,E)}if(E.target){J=y(J,E)}if(E.delay){J=e(J,E,K)}if(E.single){J=t(J,F,H,K,L)}if(E.buffer){G=new Ext.util.DelayedTask(J);J=x(J,E,G)}n(F,H,K,G,J,L);return J}var w={addListener:function(F,D,H,G,E){if(typeof D=="object"){var K=D,I,J;for(I in K){J=K[I];if(!g.test(I)){if(Ext.isFunction(J)){h(F,I,K,J,K.scope)}else{h(F,I,J)}}}}else{h(F,D,E,H,G)}},removeListener:function(F,J,N,O){F=Ext.getDom(F);var D=o(F),L=F&&(Ext.elCache[D].events)[J]||[],E,I,G,H,K,M;for(I=0,K=L.length;I<K;I++){if(Ext.isArray(M=L[I])&&M[0]==N&&(!O||M[2]==O)){if(M[4]){M[4].cancel()}H=N.tasks&&N.tasks.length;if(H){while(H--){N.tasks[H].cancel()}delete N.tasks}E=M[1];p.un(F,J,p.extAdapter?M[3]:E);if(E&&F.addEventListener&&J=="mousewheel"){F.removeEventListener("DOMMouseScroll",E,false)}if(E&&F==c&&J=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.removeListener(E)}L.splice(I,1);if(L.length===0){delete Ext.elCache[D].events[J]}for(H in Ext.elCache[D].events){return false}Ext.elCache[D].events={};return false}}},removeAll:function(F){F=Ext.getDom(F);var E=o(F),K=Ext.elCache[E]||{},N=K.events||{},J,I,L,G,M,H,D;for(G in N){if(N.hasOwnProperty(G)){J=N[G];for(I=0,L=J.length;I<L;I++){M=J[I];if(M[4]){M[4].cancel()}if(M[0].tasks&&(H=M[0].tasks.length)){while(H--){M[0].tasks[H].cancel()}delete M.tasks}D=M[1];p.un(F,G,p.extAdapter?M[3]:D);if(F.addEventListener&&D&&G=="mousewheel"){F.removeEventListener("DOMMouseScroll",D,false)}if(D&&F==c&&G=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.removeListener(D)}}}}if(Ext.elCache[E]){Ext.elCache[E].events={}}},getListeners:function(G,D){G=Ext.getDom(G);var I=o(G),E=Ext.elCache[I]||{},H=E.events||{},F=[];if(H&&H[D]){return H[D]}else{return null}},purgeElement:function(F,D,H){F=Ext.getDom(F);var E=o(F),K=Ext.elCache[E]||{},L=K.events||{},G,J,I;if(H){if(L&&L.hasOwnProperty(H)){J=L[H];for(G=0,I=J.length;G<I;G++){Ext.EventManager.removeListener(F,H,J[G][0])}}}else{Ext.EventManager.removeAll(F)}if(D&&F&&F.childNodes){for(G=0,I=F.childNodes.length;G<I;G++){Ext.EventManager.purgeElement(F.childNodes[G],D,H)}}},_unload:function(){var D;for(D in Ext.elCache){Ext.EventManager.removeAll(D)}delete Ext.elCache;delete Ext.Element._flyweights;var H,E,G,F=Ext.lib.Ajax;(typeof F.conn=="object")?E=F.conn:E={};for(G in E){H=E[G];if(H){F.abort({conn:H,tId:G})}}},onDocumentReady:function(F,E,D){if(Ext.isReady){A||(A=new Ext.util.Event());A.addListener(F,E,D);A.fire();A.listeners=[]}else{if(!A){a()}D=D||{};D.delay=D.delay||1;A.addListener(F,E,D)}},fireDocReady:b};w.on=w.addListener;w.un=w.removeListener;w.stoppedMouseDownEvent=new Ext.util.Event();return w}();Ext.onReady=Ext.EventManager.onDocumentReady;(function(){var a=function(){var c=document.body||document.getElementsByTagName("body")[0];if(!c){return false}var b=[" ",Ext.isIE?"ext-ie "+(Ext.isIE6?"ext-ie6":(Ext.isIE7?"ext-ie7":"ext-ie8")):Ext.isGecko?"ext-gecko "+(Ext.isGecko2?"ext-gecko2":"ext-gecko3"):Ext.isOpera?"ext-opera":Ext.isWebKit?"ext-webkit":""];if(Ext.isSafari){b.push("ext-safari "+(Ext.isSafari2?"ext-safari2":(Ext.isSafari3?"ext-safari3":"ext-safari4")))}else{if(Ext.isChrome){b.push("ext-chrome")}}if(Ext.isMac){b.push("ext-mac")}if(Ext.isLinux){b.push("ext-linux")}if(Ext.isStrict||Ext.isBorderBox){var d=c.parentNode;if(d){Ext.fly(d,"_internal").addClass(((Ext.isStrict&&Ext.isIE)||(!Ext.enableForcedBoxModel&&!Ext.isIE))?" ext-strict":" ext-border-box")}}if(Ext.enableForcedBoxModel&&!Ext.isIE){Ext.isForcedBorderBox=true;b.push("ext-forced-border-box")}Ext.fly(c,"_internal").addClass(b);return true};if(!a()){Ext.onReady(a)}})();(function(){var b=Ext.apply(Ext.supports,{correctRightMargin:true,correctTransparentColor:true,cssFloat:true});var a=function(){var g=document.createElement("div"),e=document,c,d;g.innerHTML='<div style="height:30px;width:50px;"><div style="height:20px;width:20px;"></div></div><div style="float:left;background-color:transparent;">';e.body.appendChild(g);d=g.lastChild;if((c=e.defaultView)){if(c.getComputedStyle(g.firstChild.firstChild,null).marginRight!="0px"){b.correctRightMargin=false}if(c.getComputedStyle(d,null).backgroundColor!="transparent"){b.correctTransparentColor=false}}b.cssFloat=!!d.style.cssFloat;e.body.removeChild(g)};if(Ext.isReady){a()}else{Ext.onReady(a)}})();Ext.EventObject=function(){var b=Ext.lib.Event,c=/(dbl)?click/,a={3:13,63234:37,63235:39,63232:38,63233:40,63276:33,63277:34,63272:46,63273:36,63275:35},d=Ext.isIE?{1:0,4:1,2:2}:{0:0,1:1,2:2};Ext.EventObjectImpl=function(g){if(g){this.setEvent(g.browserEvent||g)}};Ext.EventObjectImpl.prototype={setEvent:function(h){var g=this;if(h==g||(h&&h.browserEvent)){return h}g.browserEvent=h;if(h){g.button=h.button?d[h.button]:(h.which?h.which-1:-1);if(c.test(h.type)&&g.button==-1){g.button=0}g.type=h.type;g.shiftKey=h.shiftKey;g.ctrlKey=h.ctrlKey||h.metaKey||false;g.altKey=h.altKey;g.keyCode=h.keyCode;g.charCode=h.charCode;g.target=b.getTarget(h);g.xy=b.getXY(h)}else{g.button=-1;g.shiftKey=false;g.ctrlKey=false;g.altKey=false;g.keyCode=0;g.charCode=0;g.target=null;g.xy=[0,0]}return g},stopEvent:function(){var e=this;if(e.browserEvent){if(e.browserEvent.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(e)}b.stopEvent(e.browserEvent)}},preventDefault:function(){if(this.browserEvent){b.preventDefault(this.browserEvent)}},stopPropagation:function(){var e=this;if(e.browserEvent){if(e.browserEvent.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(e)}b.stopPropagation(e.browserEvent)}},getCharCode:function(){return this.charCode||this.keyCode},getKey:function(){return this.normalizeKey(this.keyCode||this.charCode)},normalizeKey:function(e){return Ext.isSafari?(a[e]||e):e},getPageX:function(){return this.xy[0]},getPageY:function(){return this.xy[1]},getXY:function(){return this.xy},getTarget:function(g,h,e){return g?Ext.fly(this.target).findParent(g,h,e):(e?Ext.get(this.target):this.target)},getRelatedTarget:function(){return this.browserEvent?b.getRelatedTarget(this.browserEvent):null},getWheelDelta:function(){var g=this.browserEvent;var h=0;if(g.wheelDelta){h=g.wheelDelta/120}else{if(g.detail){h=-g.detail/3}}return h},within:function(h,i,e){if(h){var g=this[i?"getRelatedTarget":"getTarget"]();return g&&((e?(g==Ext.getDom(h)):false)||Ext.fly(h).contains(g))}return false}};return new Ext.EventObjectImpl()}();Ext.Loader=Ext.apply({},{load:function(k,i,l,c){var l=l||this,g=document.getElementsByTagName("head")[0],b=document.createDocumentFragment(),a=k.length,h=0,e=this;var m=function(n){g.appendChild(e.buildScriptTag(k[n],d))};var d=function(){h++;if(a==h&&typeof i=="function"){i.call(l)}else{if(c===true){m(h)}}};if(c===true){m.call(this,0)}else{Ext.each(k,function(o,n){b.appendChild(this.buildScriptTag(o,d))},this);g.appendChild(b)}},buildScriptTag:function(b,c){var a=document.createElement("script");a.type="text/javascript";a.src=b;if(a.readyState){a.onreadystatechange=function(){if(a.readyState=="loaded"||a.readyState=="complete"){a.onreadystatechange=null;c()}}}else{a.onload=c}return a}});Ext.ns("Ext.grid","Ext.list","Ext.dd","Ext.tree","Ext.form","Ext.menu","Ext.state","Ext.layout","Ext.app","Ext.ux","Ext.chart","Ext.direct");Ext.apply(Ext,function(){var c=Ext,a=0,b=null;return{emptyFn:function(){},BLANK_IMAGE_URL:Ext.isIE6||Ext.isIE7||Ext.isAir?"http://www.extjs.com/s.gif":"data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==",extendX:function(d,e){return Ext.extend(d,e(d.prototype))},getDoc:function(){return Ext.get(document)},num:function(e,d){e=Number(Ext.isEmpty(e)||Ext.isArray(e)||typeof e=="boolean"||(typeof e=="string"&&e.trim().length==0)?NaN:e);return isNaN(e)?d:e},value:function(g,d,e){return Ext.isEmpty(g,e)?d:g},escapeRe:function(d){return d.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1")},sequence:function(h,d,g,e){h[d]=h[d].createSequence(g,e)},addBehaviors:function(i){if(!Ext.isReady){Ext.onReady(function(){Ext.addBehaviors(i)})}else{var e={},h,d,g;for(d in i){if((h=d.split("@"))[1]){g=h[0];if(!e[g]){e[g]=Ext.select(g)}e[g].on(h[1],i[d])}}e=null}},getScrollBarWidth:function(g){if(!Ext.isReady){return 0}if(g===true||b===null){var i=Ext.getBody().createChild('<div class="x-hide-offsets" style="width:100px;height:50px;overflow:hidden;"><div style="height:200px;"></div></div>'),h=i.child("div",true);var e=h.offsetWidth;i.setStyle("overflow",(Ext.isWebKit||Ext.isGecko)?"auto":"scroll");var d=h.offsetWidth;i.remove();b=e-d+2}return b},combine:function(){var g=arguments,e=g.length,k=[];for(var h=0;h<e;h++){var d=g[h];if(Ext.isArray(d)){k=k.concat(d)}else{if(d.length!==undefined&&!d.substr){k=k.concat(Array.prototype.slice.call(d,0))}else{k.push(d)}}}return k},copyTo:function(d,e,g){if(typeof g=="string"){g=g.split(/[,;\s]/)}Ext.each(g,function(h){if(e.hasOwnProperty(h)){d[h]=e[h]}},this);return d},destroy:function(){Ext.each(arguments,function(d){if(d){if(Ext.isArray(d)){this.destroy.apply(this,d)}else{if(typeof d.destroy=="function"){d.destroy()}else{if(d.dom){d.remove()}}}}},this)},destroyMembers:function(m,k,g,h){for(var l=1,e=arguments,d=e.length;l<d;l++){Ext.destroy(m[e[l]]);delete m[e[l]]}},clean:function(d){var e=[];Ext.each(d,function(g){if(!!g){e.push(g)}});return e},unique:function(d){var e=[],g={};Ext.each(d,function(h){if(!g[h]){e.push(h)}g[h]=true});return e},flatten:function(d){var g=[];function e(h){Ext.each(h,function(i){if(Ext.isArray(i)){e(i)}else{g.push(i)}});return g}return e(d)},min:function(d,e){var g=d[0];e=e||function(i,h){return i<h?-1:1};Ext.each(d,function(h){g=e(g,h)==-1?g:h});return g},max:function(d,e){var g=d[0];e=e||function(i,h){return i>h?1:-1};Ext.each(d,function(h){g=e(g,h)==1?g:h});return g},mean:function(d){return d.length>0?Ext.sum(d)/d.length:undefined},sum:function(d){var e=0;Ext.each(d,function(g){e+=g});return e},partition:function(d,e){var g=[[],[]];Ext.each(d,function(k,l,h){g[(e&&e(k,l,h))||(!e&&k)?0:1].push(k)});return g},invoke:function(d,e){var h=[],g=Array.prototype.slice.call(arguments,2);Ext.each(d,function(k,l){if(k&&typeof k[e]=="function"){h.push(k[e].apply(k,g))}else{h.push(undefined)}});return h},pluck:function(d,g){var e=[];Ext.each(d,function(h){e.push(h[g])});return e},zip:function(){var n=Ext.partition(arguments,function(i){return typeof i!="function"}),k=n[0],m=n[1][0],d=Ext.max(Ext.pluck(k,"length")),h=[];for(var l=0;l<d;l++){h[l]=[];if(m){h[l]=m.apply(m,Ext.pluck(k,l))}else{for(var g=0,e=k.length;g<e;g++){h[l].push(k[g][l])}}}return h},getCmp:function(d){return Ext.ComponentMgr.get(d)},useShims:c.isIE6||(c.isMac&&c.isGecko2),type:function(e){if(e===undefined||e===null){return false}if(e.htmlElement){return"element"}var d=typeof e;if(d=="object"&&e.nodeName){switch(e.nodeType){case 1:return"element";case 3:return(/\S/).test(e.nodeValue)?"textnode":"whitespace"}}if(d=="object"||d=="function"){switch(e.constructor){case Array:return"array";case RegExp:return"regexp";case Date:return"date"}if(typeof e.length=="number"&&typeof e.item=="function"){return"nodelist"}}return d},intercept:function(h,d,g,e){h[d]=h[d].createInterceptor(g,e)},callback:function(d,h,g,e){if(typeof d=="function"){if(e){d.defer(e,h,g||[])}else{d.apply(h,g||[])}}}}}());Ext.apply(Function.prototype,{createSequence:function(b,a){var c=this;return(typeof b!="function")?this:function(){var d=c.apply(this||window,arguments);b.apply(a||this||window,arguments);return d}}});Ext.applyIf(String,{escape:function(a){return a.replace(/('|\\)/g,"\\$1")},leftPad:function(d,b,c){var a=String(d);if(!c){c=" "}while(a.length<b){a=c+a}return a}});String.prototype.toggle=function(b,a){return this==b?a:b};String.prototype.trim=function(){var a=/^\s+|\s+$/g;return function(){return this.replace(a,"")}}();Date.prototype.getElapsed=function(a){return Math.abs((a||new Date()).getTime()-this.getTime())};Ext.applyIf(Number.prototype,{constrain:function(b,a){return Math.min(Math.max(this,b),a)}});Ext.lib.Dom.getRegion=function(a){return Ext.lib.Region.getRegion(a)};Ext.lib.Region=function(d,g,a,c){var e=this;e.top=d;e[1]=d;e.right=g;e.bottom=a;e.left=c;e[0]=c};Ext.lib.Region.prototype={contains:function(b){var a=this;return(b.left>=a.left&&b.right<=a.right&&b.top>=a.top&&b.bottom<=a.bottom)},getArea:function(){var a=this;return((a.bottom-a.top)*(a.right-a.left))},intersect:function(h){var g=this,d=Math.max(g.top,h.top),e=Math.min(g.right,h.right),a=Math.min(g.bottom,h.bottom),c=Math.max(g.left,h.left);if(a>=d&&e>=c){return new Ext.lib.Region(d,e,a,c)}},union:function(h){var g=this,d=Math.min(g.top,h.top),e=Math.max(g.right,h.right),a=Math.max(g.bottom,h.bottom),c=Math.min(g.left,h.left);return new Ext.lib.Region(d,e,a,c)},constrainTo:function(b){var a=this;a.top=a.top.constrain(b.top,b.bottom);a.bottom=a.bottom.constrain(b.top,b.bottom);a.left=a.left.constrain(b.left,b.right);a.right=a.right.constrain(b.left,b.right);return a},adjust:function(d,c,a,g){var e=this;e.top+=d;e.left+=c;e.right+=g;e.bottom+=a;return e}};Ext.lib.Region.getRegion=function(e){var h=Ext.lib.Dom.getXY(e),d=h[1],g=h[0]+e.offsetWidth,a=h[1]+e.offsetHeight,c=h[0];return new Ext.lib.Region(d,g,a,c)};Ext.lib.Point=function(a,c){if(Ext.isArray(a)){c=a[1];a=a[0]}var b=this;b.x=b.right=b.left=b[0]=a;b.y=b.top=b.bottom=b[1]=c};Ext.lib.Point.prototype=new Ext.lib.Region();Ext.apply(Ext.DomHelper,function(){var e,a="afterbegin",h="afterend",i="beforebegin",d="beforeend",b=/tag|children|cn|html$/i;function g(n,q,p,r,m,k){n=Ext.getDom(n);var l;if(e.useDom){l=c(q,null);if(k){n.appendChild(l)}else{(m=="firstChild"?n:n.parentNode).insertBefore(l,n[m]||n)}}else{l=Ext.DomHelper.insertHtml(r,n,Ext.DomHelper.createHtml(q))}return p?Ext.get(l,true):l}function c(k,s){var m,v=document,q,t,n,u;if(Ext.isArray(k)){m=v.createDocumentFragment();for(var r=0,p=k.length;r<p;r++){c(k[r],m)}}else{if(typeof k=="string"){m=v.createTextNode(k)}else{m=v.createElement(k.tag||"div");q=!!m.setAttribute;for(var t in k){if(!b.test(t)){n=k[t];if(t=="cls"){m.className=n}else{if(q){m.setAttribute(t,n)}else{m[t]=n}}}}Ext.DomHelper.applyStyles(m,k.style);if((u=k.children||k.cn)){c(u,m)}else{if(k.html){m.innerHTML=k.html}}}}if(s){s.appendChild(m)}return m}e={createTemplate:function(l){var k=Ext.DomHelper.createHtml(l);return new Ext.Template(k)},useDom:false,insertBefore:function(k,m,l){return g(k,m,l,i)},insertAfter:function(k,m,l){return g(k,m,l,h,"nextSibling")},insertFirst:function(k,m,l){return g(k,m,l,a,"firstChild")},append:function(k,m,l){return g(k,m,l,d,"",true)},createDom:c};return e}());Ext.apply(Ext.Template.prototype,{disableFormats:false,re:/\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,argsRe:/^\s*['"](.*)["']\s*$/,compileARe:/\\/g,compileBRe:/(\r\n|\n)/g,compileCRe:/'/g,applyTemplate:function(b){var g=this,a=g.disableFormats!==true,e=Ext.util.Format,c=g;if(g.compiled){return g.compiled(b)}function d(k,n,q,l){if(q&&a){if(q.substr(0,5)=="this."){return c.call(q.substr(5),b[n],b)}else{if(l){var p=g.argsRe;l=l.split(",");for(var o=0,h=l.length;o<h;o++){l[o]=l[o].replace(p,"$1")}l=[b[n]].concat(l)}else{l=[b[n]]}return e[q].apply(e,l)}}else{return b[n]!==undefined?b[n]:""}}return g.html.replace(g.re,d)},compile:function(){var me=this,fm=Ext.util.Format,useF=me.disableFormats!==true,sep=Ext.isGecko?"+":",",body;function fn(m,name,format,args){if(format&&useF){args=args?","+args:"";if(format.substr(0,5)!="this."){format="fm."+format+"("}else{format='this.call("'+format.substr(5)+'", ';args=", values"}}else{args="";format="(values['"+name+"'] == undefined ? '' : "}return"'"+sep+format+"values['"+name+"']"+args+")"+sep+"'"}if(Ext.isGecko){body="this.compiled = function(values){ return '"+me.html.replace(me.compileARe,"\\\\").replace(me.compileBRe,"\\n").replace(me.compileCRe,"\\'").replace(me.re,fn)+"';};"}else{body=["this.compiled = function(values){ return ['"];body.push(me.html.replace(me.compileARe,"\\\\").replace(me.compileBRe,"\\n").replace(me.compileCRe,"\\'").replace(me.re,fn));body.push("'].join('');};");body=body.join("")}eval(body);return me},call:function(c,b,a){return this[c](b,a)}});Ext.Template.prototype.apply=Ext.Template.prototype.applyTemplate;Ext.util.Functions={createInterceptor:function(c,b,a){var d=c;if(!Ext.isFunction(b)){return c}else{return function(){var g=this,e=arguments;b.target=g;b.method=c;return(b.apply(a||g||window,e)!==false)?c.apply(g||window,e):null}}},createDelegate:function(c,d,b,a){if(!Ext.isFunction(c)){return c}return function(){var g=b||arguments;if(a===true){g=Array.prototype.slice.call(arguments,0);g=g.concat(b)}else{if(Ext.isNumber(a)){g=Array.prototype.slice.call(arguments,0);var e=[a,0].concat(b);Array.prototype.splice.apply(g,e)}}return c.apply(d||window,g)}},defer:function(d,c,e,b,a){d=Ext.util.Functions.createDelegate(d,e,b,a);if(c>0){return setTimeout(d,c)}d();return 0},createSequence:function(c,b,a){if(!Ext.isFunction(b)){return c}else{return function(){var d=c.apply(this||window,arguments);b.apply(a||this||window,arguments);return d}}}};Ext.defer=Ext.util.Functions.defer;Ext.createInterceptor=Ext.util.Functions.createInterceptor;Ext.createSequence=Ext.util.Functions.createSequence;Ext.createDelegate=Ext.util.Functions.createDelegate;Ext.apply(Ext.util.Observable.prototype,function(){function a(k){var i=(this.methodEvents=this.methodEvents||{})[k],d,c,g,h=this;if(!i){this.methodEvents[k]=i={};i.originalFn=this[k];i.methodName=k;i.before=[];i.after=[];var b=function(m,l,e){if((c=m.apply(l||h,e))!==undefined){if(typeof c=="object"){if(c.returnValue!==undefined){d=c.returnValue}else{d=c}g=!!c.cancel}else{if(c===false){g=true}else{d=c}}}};this[k]=function(){var m=Array.prototype.slice.call(arguments,0),l;d=c=undefined;g=false;for(var n=0,e=i.before.length;n<e;n++){l=i.before[n];b(l.fn,l.scope,m);if(g){return d}}if((c=i.originalFn.apply(h,m))!==undefined){d=c}for(var n=0,e=i.after.length;n<e;n++){l=i.after[n];b(l.fn,l.scope,m);if(g){return d}}return d}}return i}return{beforeMethod:function(d,c,b){a.call(this,d).before.push({fn:c,scope:b})},afterMethod:function(d,c,b){a.call(this,d).after.push({fn:c,scope:b})},removeMethodListener:function(k,g,d){var h=this.getMethodEvent(k);for(var c=0,b=h.before.length;c<b;c++){if(h.before[c].fn==g&&h.before[c].scope==d){h.before.splice(c,1);return}}for(var c=0,b=h.after.length;c<b;c++){if(h.after[c].fn==g&&h.after[c].scope==d){h.after.splice(c,1);return}}},relayEvents:function(k,e){var h=this;function g(i){return function(){return h.fireEvent.apply(h,[i].concat(Array.prototype.slice.call(arguments,0)))}}for(var d=0,b=e.length;d<b;d++){var c=e[d];h.events[c]=h.events[c]||true;k.on(c,g(c),h)}},enableBubble:function(e){var g=this;if(!Ext.isEmpty(e)){e=Ext.isArray(e)?e:Array.prototype.slice.call(arguments,0);for(var d=0,b=e.length;d<b;d++){var c=e[d];c=c.toLowerCase();var h=g.events[c]||true;if(typeof h=="boolean"){h=new Ext.util.Event(g,c);g.events[c]=h}h.bubble=true}}}}}());Ext.util.Observable.capture=function(c,b,a){c.fireEvent=c.fireEvent.createInterceptor(b,a)};Ext.util.Observable.observeClass=function(b,a){if(b){if(!b.fireEvent){Ext.apply(b,new Ext.util.Observable());Ext.util.Observable.capture(b.prototype,b.fireEvent,b)}if(typeof a=="object"){b.on(a)}return b}};Ext.apply(Ext.EventManager,function(){var c,k,e,b,a=Ext.lib.Dom,i=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/,h=0,g=0,d=Ext.isWebKit?Ext.num(navigator.userAgent.match(/AppleWebKit\/(\d+)/)[1])>=525:!((Ext.isGecko&&!Ext.isWindows)||Ext.isOpera);return{doResizeEvent:function(){var m=a.getViewHeight(),l=a.getViewWidth();if(g!=m||h!=l){c.fire(h=l,g=m)}},onWindowResize:function(n,m,l){if(!c){c=new Ext.util.Event();k=new Ext.util.DelayedTask(this.doResizeEvent);Ext.EventManager.on(window,"resize",this.fireWindowResize,this)}c.addListener(n,m,l)},fireWindowResize:function(){if(c){k.delay(100)}},onTextResize:function(o,n,l){if(!e){e=new Ext.util.Event();var m=new Ext.Element(document.createElement("div"));m.dom.className="x-text-resize";m.dom.innerHTML="X";m.appendTo(document.body);b=m.dom.offsetHeight;setInterval(function(){if(m.dom.offsetHeight!=b){e.fire(b,b=m.dom.offsetHeight)}},this.textResizeInterval)}e.addListener(o,n,l)},removeResizeListener:function(m,l){if(c){c.removeListener(m,l)}},fireResize:function(){if(c){c.fire(a.getViewWidth(),a.getViewHeight())}},textResizeInterval:50,ieDeferSrc:false,getKeyEvent:function(){return d?"keydown":"keypress"},useKeydown:d}}());Ext.EventManager.on=Ext.EventManager.addListener;Ext.apply(Ext.EventObjectImpl.prototype,{BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,RETURN:13,SHIFT:16,CTRL:17,CONTROL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGEUP:33,PAGE_DOWN:34,PAGEDOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,isNavKeyPress:function(){var b=this,a=this.normalizeKey(b.keyCode);return(a>=33&&a<=40)||a==b.RETURN||a==b.TAB||a==b.ESC},isSpecialKey:function(){var a=this.normalizeKey(this.keyCode);return(this.type=="keypress"&&this.ctrlKey)||this.isNavKeyPress()||(a==this.BACKSPACE)||(a>=16&&a<=20)||(a>=44&&a<=46)},getPoint:function(){return new Ext.lib.Point(this.xy[0],this.xy[1])},hasModifier:function(){return((this.ctrlKey||this.altKey)||this.shiftKey)}});Ext.Element.addMethods({swallowEvent:function(a,b){var d=this;function c(g){g.stopPropagation();if(b){g.preventDefault()}}if(Ext.isArray(a)){Ext.each(a,function(g){d.on(g,c)});return d}d.on(a,c);return d},relayEvent:function(a,b){this.on(a,function(c){b.fireEvent(a,c)})},clean:function(b){var d=this,e=d.dom,g=e.firstChild,c=-1;if(Ext.Element.data(e,"isCleaned")&&b!==true){return d}while(g){var a=g.nextSibling;if(g.nodeType==3&&!(/\S/.test(g.nodeValue))){e.removeChild(g)}else{g.nodeIndex=++c}g=a}Ext.Element.data(e,"isCleaned",true);return d},load:function(){var a=this.getUpdater();a.update.apply(a,arguments);return this},getUpdater:function(){return this.updateManager||(this.updateManager=new Ext.Updater(this))},update:function(html,loadScripts,callback){if(!this.dom){return this}html=html||"";if(loadScripts!==true){this.dom.innerHTML=html;if(typeof callback=="function"){callback()}return this}var id=Ext.id(),dom=this.dom;html+='<span id="'+id+'"></span>';Ext.lib.Event.onAvailable(id,function(){var DOC=document,hd=DOC.getElementsByTagName("head")[0],re=/(?:<script([^>]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig,srcRe=/\ssrc=([\'\"])(.*?)\1/i,typeRe=/\stype=([\'\"])(.*?)\1/i,match,attrs,srcMatch,typeMatch,el,s;while((match=re.exec(html))){attrs=match[1];srcMatch=attrs?attrs.match(srcRe):false;if(srcMatch&&srcMatch[2]){s=DOC.createElement("script");s.src=srcMatch[2];typeMatch=attrs.match(typeRe);if(typeMatch&&typeMatch[2]){s.type=typeMatch[2]}hd.appendChild(s)}else{if(match[2]&&match[2].length>0){if(window.execScript){window.execScript(match[2])}else{window.eval(match[2])}}}}el=DOC.getElementById(id);if(el){Ext.removeNode(el)}if(typeof callback=="function"){callback()}});dom.innerHTML=html.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,"");return this},removeAllListeners:function(){this.removeAnchor();Ext.EventManager.removeAll(this.dom);return this},createProxy:function(a,e,d){a=(typeof a=="object")?a:{tag:"div",cls:a};var c=this,b=e?Ext.DomHelper.append(e,a,true):Ext.DomHelper.insertBefore(c.dom,a,true);if(d&&c.setBox&&c.getBox){b.setBox(c.getBox())}return b}});Ext.Element.prototype.getUpdateManager=Ext.Element.prototype.getUpdater;Ext.Element.addMethods({getAnchorXY:function(e,m,t){e=(e||"tl").toLowerCase();t=t||{};var l=this,b=l.dom==document.body||l.dom==document,p=t.width||b?Ext.lib.Dom.getViewWidth():l.getWidth(),i=t.height||b?Ext.lib.Dom.getViewHeight():l.getHeight(),q,a=Math.round,c=l.getXY(),n=l.getScroll(),k=b?n.left:!m?c[0]:0,g=b?n.top:!m?c[1]:0,d={c:[a(p*0.5),a(i*0.5)],t:[a(p*0.5),0],l:[0,a(i*0.5)],r:[p,a(i*0.5)],b:[a(p*0.5),i],tl:[0,0],bl:[0,i],br:[p,i],tr:[p,0]};q=d[e];return[q[0]+k,q[1]+g]},anchorTo:function(b,h,c,a,l,m){var i=this,e=i.dom,k=!Ext.isEmpty(l),d=function(){Ext.fly(e).alignTo(b,h,c,a);Ext.callback(m,Ext.fly(e))},g=this.getAnchor();this.removeAnchor();Ext.apply(g,{fn:d,scroll:k});Ext.EventManager.onWindowResize(d,null);if(k){Ext.EventManager.on(window,"scroll",d,null,{buffer:!isNaN(l)?l:50})}d.call(i);return i},removeAnchor:function(){var b=this,a=this.getAnchor();if(a&&a.fn){Ext.EventManager.removeResizeListener(a.fn);if(a.scroll){Ext.EventManager.un(window,"scroll",a.fn)}delete a.fn}return b},getAnchor:function(){var b=Ext.Element.data,c=this.dom;if(!c){return}var a=b(c,"_anchor");if(!a){a=b(c,"_anchor",{})}return a},getAlignToXY:function(g,B,C){g=Ext.get(g);if(!g||!g.dom){throw"Element.alignToXY with an element that doesn't exist"}C=C||[0,0];B=(!B||B=="?"?"tl-bl?":(!(/-/).test(B)&&B!==""?"tl-"+B:B||"tl-bl")).toLowerCase();var L=this,I=L.dom,N,M,q,n,t,G,z,u=Ext.lib.Dom.getViewWidth()-10,H=Ext.lib.Dom.getViewHeight()-10,b,i,k,l,v,A,O=document,K=O.documentElement,s=O.body,F=(K.scrollLeft||s.scrollLeft||0)+5,E=(K.scrollTop||s.scrollTop||0)+5,J=false,e="",a="",D=B.match(/^([a-z]+)-([a-z]+)(\?)?$/);if(!D){throw"Element.alignTo with an invalid alignment "+B}e=D[1];a=D[2];J=!!D[3];N=L.getAnchorXY(e,true);M=g.getAnchorXY(a,false);q=M[0]-N[0]+C[0];n=M[1]-N[1]+C[1];if(J){t=L.getWidth();G=L.getHeight();z=g.getRegion();b=e.charAt(0);i=e.charAt(e.length-1);k=a.charAt(0);l=a.charAt(a.length-1);v=((b=="t"&&k=="b")||(b=="b"&&k=="t"));A=((i=="r"&&l=="l")||(i=="l"&&l=="r"));if(q+t>u+F){q=A?z.left-t:u+F-t}if(q<F){q=A?z.right:F}if(n+G>H+E){n=v?z.top-G:H+E-G}if(n<E){n=v?z.bottom:E}}return[q,n]},alignTo:function(c,a,e,b){var d=this;return d.setXY(d.getAlignToXY(c,a,e),d.preanim&&!!b?d.preanim(arguments,3):false)},adjustForConstraints:function(c,a,b){return this.getConstrainToXY(a||document,false,b,c)||c},getConstrainToXY:function(b,a,c,e){var d={top:0,left:0,bottom:0,right:0};return function(i,B,m,o){i=Ext.get(i);m=m?Ext.applyIf(m,d):d;var A,E,z=0,v=0;if(i.dom==document.body||i.dom==document){A=Ext.lib.Dom.getViewWidth();E=Ext.lib.Dom.getViewHeight()}else{A=i.dom.clientWidth;E=i.dom.clientHeight;if(!B){var u=i.getXY();z=u[0];v=u[1]}}var t=i.getScroll();z+=m.left+t.left;v+=m.top+t.top;A-=m.right;E-=m.bottom;var C=z+A,g=v+E,k=o||(!B?this.getXY():[this.getLeft(true),this.getTop(true)]),q=k[0],p=k[1],l=this.getConstrainOffset(),r=this.dom.offsetWidth+l,D=this.dom.offsetHeight+l;var n=false;if((q+r)>C){q=C-r;n=true}if((p+D)>g){p=g-D;n=true}if(q<z){q=z;n=true}if(p<v){p=v;n=true}return n?[q,p]:false}}(),getConstrainOffset:function(){return 0},getCenterXY:function(){return this.getAlignToXY(document,"c-c")},center:function(a){return this.alignTo(a||document,"c-c")}});Ext.Element.addMethods({select:function(a,b){return Ext.Element.select(a,b,this.dom)}});Ext.apply(Ext.Element.prototype,function(){var c=Ext.getDom,a=Ext.get,b=Ext.DomHelper;return{insertSibling:function(i,g,h){var k=this,e,d=(g||"before").toLowerCase()=="after",l;if(Ext.isArray(i)){l=k;Ext.each(i,function(m){e=Ext.fly(l,"_internal").insertSibling(m,g,h);if(d){l=e}});return e}i=i||{};if(i.nodeType||i.dom){e=k.dom.parentNode.insertBefore(c(i),d?k.dom.nextSibling:k.dom);if(!h){e=a(e)}}else{if(d&&!k.dom.nextSibling){e=b.append(k.dom.parentNode,i,!h)}else{e=b[d?"insertAfter":"insertBefore"](k.dom,i,!h)}}return e}}}());Ext.Element.boxMarkup='<div class="{0}-tl"><div class="{0}-tr"><div class="{0}-tc"></div></div></div><div class="{0}-ml"><div class="{0}-mr"><div class="{0}-mc"></div></div></div><div class="{0}-bl"><div class="{0}-br"><div class="{0}-bc"></div></div></div>';Ext.Element.addMethods(function(){var a="_internal",b=/(\d+\.?\d+)px/;return{applyStyles:function(c){Ext.DomHelper.applyStyles(this.dom,c);return this},getStyles:function(){var c={};Ext.each(arguments,function(d){c[d]=this.getStyle(d)},this);return c},setOverflow:function(c){var d=this.dom;if(c=="auto"&&Ext.isMac&&Ext.isGecko2){d.style.overflow="hidden";(function(){d.style.overflow="auto"}).defer(1)}else{d.style.overflow=c}},boxWrap:function(c){c=c||"x-box";var d=Ext.get(this.insertHtml("beforeBegin","<div class='"+c+"'>"+String.format(Ext.Element.boxMarkup,c)+"</div>"));Ext.DomQuery.selectNode("."+c+"-mc",d.dom).appendChild(this.dom);return d},setSize:function(e,c,d){var g=this;if(typeof e=="object"){c=e.height;e=e.width}e=g.adjustWidth(e);c=g.adjustHeight(c);if(!d||!g.anim){g.dom.style.width=g.addUnits(e);g.dom.style.height=g.addUnits(c)}else{g.anim({width:{to:e},height:{to:c}},g.preanim(arguments,2))}return g},getComputedHeight:function(){var d=this,c=Math.max(d.dom.offsetHeight,d.dom.clientHeight);if(!c){c=parseFloat(d.getStyle("height"))||0;if(!d.isBorderBox()){c+=d.getFrameWidth("tb")}}return c},getComputedWidth:function(){var c=Math.max(this.dom.offsetWidth,this.dom.clientWidth);if(!c){c=parseFloat(this.getStyle("width"))||0;if(!this.isBorderBox()){c+=this.getFrameWidth("lr")}}return c},getFrameWidth:function(d,c){return c&&this.isBorderBox()?0:(this.getPadding(d)+this.getBorderWidth(d))},addClassOnOver:function(c){this.hover(function(){Ext.fly(this,a).addClass(c)},function(){Ext.fly(this,a).removeClass(c)});return this},addClassOnFocus:function(c){this.on("focus",function(){Ext.fly(this,a).addClass(c)},this.dom);this.on("blur",function(){Ext.fly(this,a).removeClass(c)},this.dom);return this},addClassOnClick:function(c){var d=this.dom;this.on("mousedown",function(){Ext.fly(d,a).addClass(c);var g=Ext.getDoc(),e=function(){Ext.fly(d,a).removeClass(c);g.removeListener("mouseup",e)};g.on("mouseup",e)});return this},getViewSize:function(){var g=document,h=this.dom,c=(h==g||h==g.body);if(c){var e=Ext.lib.Dom;return{width:e.getViewWidth(),height:e.getViewHeight()}}else{return{width:h.clientWidth,height:h.clientHeight}}},getStyleSize:function(){var k=this,c,i,m=document,n=this.dom,e=(n==m||n==m.body),g=n.style;if(e){var l=Ext.lib.Dom;return{width:l.getViewWidth(),height:l.getViewHeight()}}if(g.width&&g.width!="auto"){c=parseFloat(g.width);if(k.isBorderBox()){c-=k.getFrameWidth("lr")}}if(g.height&&g.height!="auto"){i=parseFloat(g.height);if(k.isBorderBox()){i-=k.getFrameWidth("tb")}}return{width:c||k.getWidth(true),height:i||k.getHeight(true)}},getSize:function(c){return{width:this.getWidth(c),height:this.getHeight(c)}},repaint:function(){var c=this.dom;this.addClass("x-repaint");setTimeout(function(){Ext.fly(c).removeClass("x-repaint")},1);return this},unselectable:function(){this.dom.unselectable="on";return this.swallowEvent("selectstart",true).applyStyles("-moz-user-select:none;-khtml-user-select:none;").addClass("x-unselectable")},getMargins:function(d){var e=this,c,g={t:"top",l:"left",r:"right",b:"bottom"},h={};if(!d){for(c in e.margins){h[g[c]]=parseFloat(e.getStyle(e.margins[c]))||0}return h}else{return e.addStyles.call(e,d,e.margins)}}}}());Ext.Element.addMethods({setBox:function(e,g,b){var d=this,a=e.width,c=e.height;if((g&&!d.autoBoxAdjust)&&!d.isBorderBox()){a-=(d.getBorderWidth("lr")+d.getPadding("lr"));c-=(d.getBorderWidth("tb")+d.getPadding("tb"))}d.setBounds(e.x,e.y,a,c,d.animTest.call(d,arguments,b,2));return d},getBox:function(k,q){var n=this,x,e,p,d=n.getBorderWidth,s=n.getPadding,g,a,v,o;if(!q){x=n.getXY()}else{e=parseInt(n.getStyle("left"),10)||0;p=parseInt(n.getStyle("top"),10)||0;x=[e,p]}var c=n.dom,u=c.offsetWidth,i=c.offsetHeight,m;if(!k){m={x:x[0],y:x[1],0:x[0],1:x[1],width:u,height:i}}else{g=d.call(n,"l")+s.call(n,"l");a=d.call(n,"r")+s.call(n,"r");v=d.call(n,"t")+s.call(n,"t");o=d.call(n,"b")+s.call(n,"b");m={x:x[0]+g,y:x[1]+v,0:x[0]+g,1:x[1]+v,width:u-(g+a),height:i-(v+o)}}m.right=m.x+m.width;m.bottom=m.y+m.height;return m},move:function(k,b,c){var g=this,n=g.getXY(),l=n[0],i=n[1],d=[l-b,i],m=[l+b,i],h=[l,i-b],a=[l,i+b],e={l:d,left:d,r:m,right:m,t:h,top:h,up:h,b:a,bottom:a,down:a};k=k.toLowerCase();g.moveTo(e[k][0],e[k][1],g.animTest.call(g,arguments,c,2))},setLeftTop:function(d,c){var b=this,a=b.dom.style;a.left=b.addUnits(d);a.top=b.addUnits(c);return b},getRegion:function(){return Ext.lib.Dom.getRegion(this.dom)},setBounds:function(b,g,d,a,c){var e=this;if(!c||!e.anim){e.setSize(d,a);e.setLocation(b,g)}else{e.anim({points:{to:[b,g]},width:{to:e.adjustWidth(d)},height:{to:e.adjustHeight(a)}},e.preanim(arguments,4),"motion")}return e},setRegion:function(b,a){return this.setBounds(b.left,b.top,b.right-b.left,b.bottom-b.top,this.animTest.call(this,arguments,a,1))}});Ext.Element.addMethods({scrollTo:function(b,d,a){var e=/top/i.test(b),c=this,g=c.dom,h;if(!a||!c.anim){h="scroll"+(e?"Top":"Left");g[h]=d}else{h="scroll"+(e?"Left":"Top");c.anim({scroll:{to:e?[g[h],d]:[d,g[h]]}},c.preanim(arguments,2),"scroll")}return c},scrollIntoView:function(e,i){var q=Ext.getDom(e)||Ext.getBody().dom,h=this.dom,g=this.getOffsetsTo(q),m=g[0]+q.scrollLeft,v=g[1]+q.scrollTop,s=v+h.offsetHeight,d=m+h.offsetWidth,a=q.clientHeight,n=parseInt(q.scrollTop,10),u=parseInt(q.scrollLeft,10),k=n+a,p=u+q.clientWidth;if(h.offsetHeight>a||v<n){q.scrollTop=v}else{if(s>k){q.scrollTop=s-a}}q.scrollTop=q.scrollTop;if(i!==false){if(h.offsetWidth>q.clientWidth||m<u){q.scrollLeft=m}else{if(d>p){q.scrollLeft=d-q.clientWidth}}q.scrollLeft=q.scrollLeft}return this},scrollChildIntoView:function(b,a){Ext.fly(b,"_scrollChildIntoView").scrollIntoView(this,a)},scroll:function(n,b,d){if(!this.isScrollable()){return false}var e=this.dom,g=e.scrollLeft,q=e.scrollTop,o=e.scrollWidth,m=e.scrollHeight,i=e.clientWidth,a=e.clientHeight,c=false,p,k={l:Math.min(g+b,o-i),r:p=Math.max(g-b,0),t:Math.max(q-b,0),b:Math.min(q+b,m-a)};k.d=k.b;k.u=k.t;n=n.substr(0,1);if((p=k[n])>-1){c=true;this.scrollTo(n=="l"||n=="r"?"left":"top",p,this.preanim(arguments,2))}return c}});Ext.Element.addMethods(function(){var d="visibility",b="display",a="hidden",h="none",c="x-masked",g="x-masked-relative",e=Ext.Element.data;return{isVisible:function(i){var k=!this.isStyle(d,a)&&!this.isStyle(b,h),l=this.dom.parentNode;if(i!==true||!k){return k}while(l&&!(/^body/i.test(l.tagName))){if(!Ext.fly(l,"_isVisible").isVisible()){return false}l=l.parentNode}return true},isDisplayed:function(){return !this.isStyle(b,h)},enableDisplayMode:function(i){this.setVisibilityMode(Ext.Element.DISPLAY);if(!Ext.isEmpty(i)){e(this.dom,"originalDisplay",i)}return this},mask:function(k,o){var q=this,m=q.dom,p=Ext.DomHelper,n="ext-el-mask-msg",i,r;if(!(/^body/i.test(m.tagName)&&q.getStyle("position")=="static")){q.addClass(g)}if(i=e(m,"maskMsg")){i.remove()}if(i=e(m,"mask")){i.remove()}r=p.append(m,{cls:"ext-el-mask"},true);e(m,"mask",r);q.addClass(c);r.setDisplayed(true);if(typeof k=="string"){var l=p.append(m,{cls:n,cn:{tag:"div"}},true);e(m,"maskMsg",l);l.dom.className=o?n+" "+o:n;l.dom.firstChild.innerHTML=k;l.setDisplayed(true);l.center(q)}if(Ext.isIE&&!(Ext.isIE7&&Ext.isStrict)&&q.getStyle("height")=="auto"){r.setSize(undefined,q.getHeight())}return r},unmask:function(){var l=this,m=l.dom,i=e(m,"mask"),k=e(m,"maskMsg");if(i){if(k){k.remove();e(m,"maskMsg",undefined)}i.remove();e(m,"mask",undefined);l.removeClass([c,g])}},isMasked:function(){var i=e(this.dom,"mask");return i&&i.isVisible()},createShim:function(){var i=document.createElement("iframe"),k;i.frameBorder="0";i.className="ext-shim";i.src=Ext.SSL_SECURE_URL;k=Ext.get(this.dom.parentNode.insertBefore(i,this.dom));k.autoBoxAdjust=false;return k}}}());Ext.Element.addMethods({addKeyListener:function(b,d,c){var a;if(typeof b!="object"||Ext.isArray(b)){a={key:b,fn:d,scope:c}}else{a={key:b.key,shift:b.shift,ctrl:b.ctrl,alt:b.alt,fn:d,scope:c}}return new Ext.KeyMap(this,a)},addKeyMap:function(a){return new Ext.KeyMap(this,a)}});Ext.CompositeElementLite.importElementMethods();Ext.apply(Ext.CompositeElementLite.prototype,{addElements:function(c,a){if(!c){return this}if(typeof c=="string"){c=Ext.Element.selectorFunction(c,a)}var b=this.elements;Ext.each(c,function(d){b.push(Ext.get(d))});return this},first:function(){return this.item(0)},last:function(){return this.item(this.getCount()-1)},contains:function(a){return this.indexOf(a)!=-1},removeElement:function(d,e){var c=this,a=this.elements,b;Ext.each(d,function(g){if((b=(a[g]||a[g=c.indexOf(g)]))){if(e){if(b.dom){b.remove()}else{Ext.removeNode(b)}}a.splice(g,1)}});return this}});Ext.CompositeElement=Ext.extend(Ext.CompositeElementLite,{constructor:function(b,a){this.elements=[];this.add(b,a)},getElement:function(a){return a},transformElement:function(a){return Ext.get(a)}});Ext.Element.select=function(a,d,b){var c;if(typeof a=="string"){c=Ext.Element.selectorFunction(a,b)}else{if(a.length!==undefined){c=a}else{throw"Invalid selector"}}return(d===true)?new Ext.CompositeElement(c):new Ext.CompositeElementLite(c)};Ext.select=Ext.Element.select;Ext.UpdateManager=Ext.Updater=Ext.extend(Ext.util.Observable,function(){var b="beforeupdate",d="update",c="failure";function a(h){var i=this;i.transaction=null;if(h.argument.form&&h.argument.reset){try{h.argument.form.reset()}catch(k){}}if(i.loadScripts){i.renderer.render(i.el,h,i,g.createDelegate(i,[h]))}else{i.renderer.render(i.el,h,i);g.call(i,h)}}function g(h,i,k){this.fireEvent(i||d,this.el,h);if(Ext.isFunction(h.argument.callback)){h.argument.callback.call(h.argument.scope,this.el,Ext.isEmpty(k)?true:false,h,h.argument.options)}}function e(h){g.call(this,h,c,!!(this.transaction=null))}return{constructor:function(i,h){var k=this;i=Ext.get(i);if(!h&&i.updateManager){return i.updateManager}k.el=i;k.defaultUrl=null;k.addEvents(b,d,c);Ext.apply(k,Ext.Updater.defaults);k.transaction=null;k.refreshDelegate=k.refresh.createDelegate(k);k.updateDelegate=k.update.createDelegate(k);k.formUpdateDelegate=(k.formUpdate||function(){}).createDelegate(k);k.renderer=k.renderer||k.getDefaultRenderer();Ext.Updater.superclass.constructor.call(k)},setRenderer:function(h){this.renderer=h},getRenderer:function(){return this.renderer},getDefaultRenderer:function(){return new Ext.Updater.BasicRenderer()},setDefaultUrl:function(h){this.defaultUrl=h},getEl:function(){return this.el},update:function(i,p,q,m){var l=this,h,k;if(l.fireEvent(b,l.el,i,p)!==false){if(Ext.isObject(i)){h=i;i=h.url;p=p||h.params;q=q||h.callback;m=m||h.discardUrl;k=h.scope;if(!Ext.isEmpty(h.nocache)){l.disableCaching=h.nocache}if(!Ext.isEmpty(h.text)){l.indicatorText='<div class="loading-indicator">'+h.text+"</div>"}if(!Ext.isEmpty(h.scripts)){l.loadScripts=h.scripts}if(!Ext.isEmpty(h.timeout)){l.timeout=h.timeout}}l.showLoading();if(!m){l.defaultUrl=i}if(Ext.isFunction(i)){i=i.call(l)}var n=Ext.apply({},{url:i,params:(Ext.isFunction(p)&&k)?p.createDelegate(k):p,success:a,failure:e,scope:l,callback:undefined,timeout:(l.timeout*1000),disableCaching:l.disableCaching,argument:{options:h,url:i,form:null,callback:q,scope:k||window,params:p}},h);l.transaction=Ext.Ajax.request(n)}},formUpdate:function(l,h,k,m){var i=this;if(i.fireEvent(b,i.el,l,h)!==false){if(Ext.isFunction(h)){h=h.call(i)}l=Ext.getDom(l);i.transaction=Ext.Ajax.request({form:l,url:h,success:a,failure:e,scope:i,timeout:(i.timeout*1000),argument:{url:h,form:l,callback:m,reset:k}});i.showLoading.defer(1,i)}},startAutoRefresh:function(i,k,m,n,h){var l=this;if(h){l.update(k||l.defaultUrl,m,n,true)}if(l.autoRefreshProcId){clearInterval(l.autoRefreshProcId)}l.autoRefreshProcId=setInterval(l.update.createDelegate(l,[k||l.defaultUrl,m,n,true]),i*1000)},stopAutoRefresh:function(){if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId);delete this.autoRefreshProcId}},isAutoRefreshing:function(){return !!this.autoRefreshProcId},showLoading:function(){if(this.showLoadIndicator){this.el.dom.innerHTML=this.indicatorText}},abort:function(){if(this.transaction){Ext.Ajax.abort(this.transaction)}},isUpdating:function(){return this.transaction?Ext.Ajax.isLoading(this.transaction):false},refresh:function(h){if(this.defaultUrl){this.update(this.defaultUrl,null,h,true)}}}}());Ext.Updater.defaults={timeout:30,disableCaching:false,showLoadIndicator:true,indicatorText:'<div class="loading-indicator">Loading...</div>',loadScripts:false,sslBlankUrl:Ext.SSL_SECURE_URL};Ext.Updater.updateElement=function(d,c,e,b){var a=Ext.get(d).getUpdater();Ext.apply(a,b);a.update(c,e,b?b.callback:null)};Ext.Updater.BasicRenderer=function(){};Ext.Updater.BasicRenderer.prototype={render:function(c,a,b,d){c.update(a.responseText,b.loadScripts,d)}};(function(){Date.useStrict=false;function b(d){var c=Array.prototype.slice.call(arguments,1);return d.replace(/\{(\d+)\}/g,function(e,g){return c[g]})}Date.formatCodeToRegex=function(d,c){var e=Date.parseCodes[d];if(e){e=typeof e=="function"?e():e;Date.parseCodes[d]=e}return e?Ext.applyIf({c:e.c?b(e.c,c||"{0}"):e.c},e):{g:0,c:null,s:Ext.escapeRe(d)}};var a=Date.formatCodeToRegex;Ext.apply(Date,{parseFunctions:{"M$":function(d,c){var e=new RegExp("\\/Date\\(([-+])?(\\d+)(?:[+-]\\d{4})?\\)\\/");var g=(d||"").match(e);return g?new Date(((g[1]||"")+g[2])*1):null}},parseRegexes:[],formatFunctions:{"M$":function(){return"\\/Date("+this.getTime()+")\\/"}},y2kYear:50,MILLI:"ms",SECOND:"s",MINUTE:"mi",HOUR:"h",DAY:"d",MONTH:"mo",YEAR:"y",defaults:{},dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNumbers:{Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11},getShortMonthName:function(c){return Date.monthNames[c].substring(0,3)},getShortDayName:function(c){return Date.dayNames[c].substring(0,3)},getMonthNumber:function(c){return Date.monthNumbers[c.substring(0,1).toUpperCase()+c.substring(1,3).toLowerCase()]},formatCodes:{d:"String.leftPad(this.getDate(), 2, '0')",D:"Date.getShortDayName(this.getDay())",j:"this.getDate()",l:"Date.dayNames[this.getDay()]",N:"(this.getDay() ? this.getDay() : 7)",S:"this.getSuffix()",w:"this.getDay()",z:"this.getDayOfYear()",W:"String.leftPad(this.getWeekOfYear(), 2, '0')",F:"Date.monthNames[this.getMonth()]",m:"String.leftPad(this.getMonth() + 1, 2, '0')",M:"Date.getShortMonthName(this.getMonth())",n:"(this.getMonth() + 1)",t:"this.getDaysInMonth()",L:"(this.isLeapYear() ? 1 : 0)",o:"(this.getFullYear() + (this.getWeekOfYear() == 1 && this.getMonth() > 0 ? +1 : (this.getWeekOfYear() >= 52 && this.getMonth() < 11 ? -1 : 0)))",Y:"String.leftPad(this.getFullYear(), 4, '0')",y:"('' + this.getFullYear()).substring(2, 4)",a:"(this.getHours() < 12 ? 'am' : 'pm')",A:"(this.getHours() < 12 ? 'AM' : 'PM')",g:"((this.getHours() % 12) ? this.getHours() % 12 : 12)",G:"this.getHours()",h:"String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')",H:"String.leftPad(this.getHours(), 2, '0')",i:"String.leftPad(this.getMinutes(), 2, '0')",s:"String.leftPad(this.getSeconds(), 2, '0')",u:"String.leftPad(this.getMilliseconds(), 3, '0')",O:"this.getGMTOffset()",P:"this.getGMTOffset(true)",T:"this.getTimezone()",Z:"(this.getTimezoneOffset() * -60)",c:function(){for(var m="Y-m-dTH:i:sP",h=[],g=0,d=m.length;g<d;++g){var k=m.charAt(g);h.push(k=="T"?"'T'":Date.getFormatCode(k))}return h.join(" + ")},U:"Math.round(this.getTime() / 1000)"},isValid:function(p,c,o,l,g,k,e){l=l||0;g=g||0;k=k||0;e=e||0;var n=new Date(p<100?100:p,c-1,o,l,g,k,e).add(Date.YEAR,p<100?p-100:0);return p==n.getFullYear()&&c==n.getMonth()+1&&o==n.getDate()&&l==n.getHours()&&g==n.getMinutes()&&k==n.getSeconds()&&e==n.getMilliseconds()},parseDate:function(d,g,c){var e=Date.parseFunctions;if(e[g]==null){Date.createParser(g)}return e[g](d,Ext.isDefined(c)?c:Date.useStrict)},getFormatCode:function(d){var c=Date.formatCodes[d];if(c){c=typeof c=="function"?c():c;Date.formatCodes[d]=c}return c||("'"+String.escape(d)+"'")},createFormat:function(h){var g=[],c=false,e="";for(var d=0;d<h.length;++d){e=h.charAt(d);if(!c&&e=="\\"){c=true}else{if(c){c=false;g.push("'"+String.escape(e)+"'")}else{g.push(Date.getFormatCode(e))}}}Date.formatFunctions[h]=new Function("return "+g.join("+"))},createParser:function(){var c=["var dt, y, m, d, h, i, s, ms, o, z, zz, u, v,","def = Date.defaults,","results = String(input).match(Date.parseRegexes[{0}]);","if(results){","{1}","if(u != null){","v = new Date(u * 1000);","}else{","dt = (new Date()).clearTime();","y = Ext.num(y, Ext.num(def.y, dt.getFullYear()));","m = Ext.num(m, Ext.num(def.m - 1, dt.getMonth()));","d = Ext.num(d, Ext.num(def.d, dt.getDate()));","h = Ext.num(h, Ext.num(def.h, dt.getHours()));","i = Ext.num(i, Ext.num(def.i, dt.getMinutes()));","s = Ext.num(s, Ext.num(def.s, dt.getSeconds()));","ms = Ext.num(ms, Ext.num(def.ms, dt.getMilliseconds()));","if(z >= 0 && y >= 0){","v = new Date(y < 100 ? 100 : y, 0, 1, h, i, s, ms).add(Date.YEAR, y < 100 ? y - 100 : 0);","v = !strict? v : (strict === true && (z <= 364 || (v.isLeapYear() && z <= 365))? v.add(Date.DAY, z) : null);","}else if(strict === true && !Date.isValid(y, m + 1, d, h, i, s, ms)){","v = null;","}else{","v = new Date(y < 100 ? 100 : y, m, d, h, i, s, ms).add(Date.YEAR, y < 100 ? y - 100 : 0);","}","}","}","if(v){","if(zz != null){","v = v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - zz);","}else if(o){","v = v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn));","}","}","return v;"].join("\n");return function(n){var e=Date.parseRegexes.length,p=1,g=[],m=[],l=false,d="",k=0,h,o;for(;k<n.length;++k){d=n.charAt(k);if(!l&&d=="\\"){l=true}else{if(l){l=false;m.push(String.escape(d))}else{h=a(d,p);p+=h.g;m.push(h.s);if(h.g&&h.c){if(h.calcLast){o=h.c}else{g.push(h.c)}}}}}if(o){g.push(o)}Date.parseRegexes[e]=new RegExp("^"+m.join("")+"$","i");Date.parseFunctions[n]=new Function("input","strict",b(c,e,g.join("")))}}(),parseCodes:{d:{g:1,c:"d = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},j:{g:1,c:"d = parseInt(results[{0}], 10);\n",s:"(\\d{1,2})"},D:function(){for(var c=[],d=0;d<7;c.push(Date.getShortDayName(d)),++d){}return{g:0,c:null,s:"(?:"+c.join("|")+")"}},l:function(){return{g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"}},N:{g:0,c:null,s:"[1-7]"},S:{g:0,c:null,s:"(?:st|nd|rd|th)"},w:{g:0,c:null,s:"[0-6]"},z:{g:1,c:"z = parseInt(results[{0}], 10);\n",s:"(\\d{1,3})"},W:{g:0,c:null,s:"(?:\\d{2})"},F:function(){return{g:1,c:"m = parseInt(Date.getMonthNumber(results[{0}]), 10);\n",s:"("+Date.monthNames.join("|")+")"}},M:function(){for(var c=[],d=0;d<12;c.push(Date.getShortMonthName(d)),++d){}return Ext.applyIf({s:"("+c.join("|")+")"},a("F"))},m:{g:1,c:"m = parseInt(results[{0}], 10) - 1;\n",s:"(\\d{2})"},n:{g:1,c:"m = parseInt(results[{0}], 10) - 1;\n",s:"(\\d{1,2})"},t:{g:0,c:null,s:"(?:\\d{2})"},L:{g:0,c:null,s:"(?:1|0)"},o:function(){return a("Y")},Y:{g:1,c:"y = parseInt(results[{0}], 10);\n",s:"(\\d{4})"},y:{g:1,c:"var ty = parseInt(results[{0}], 10);\ny = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"},a:function(){return a("A")},A:{calcLast:true,g:1,c:"if (/(am)/i.test(results[{0}])) {\nif (!h || h == 12) { h = 0; }\n} else { if (!h || h < 12) { h = (h || 0) + 12; }}",s:"(AM|PM|am|pm)"},g:function(){return a("G")},G:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(\\d{1,2})"},h:function(){return a("H")},H:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},i:{g:1,c:"i = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},s:{g:1,c:"s = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},u:{g:1,c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n",s:"(\\d+)"},O:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60),","mn = o.substring(3,5) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+-]\\d{4})"},P:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60),","mn = o.substring(4,6) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+-]\\d{2}:\\d{2})"},T:{g:0,c:null,s:"[A-Z]{1,4}"},Z:{g:1,c:"zz = results[{0}] * 1;\nzz = (-43200 <= zz && zz <= 50400)? zz : null;\n",s:"([+-]?\\d{1,5})"},c:function(){var e=[],c=[a("Y",1),a("m",2),a("d",3),a("h",4),a("i",5),a("s",6),{c:"ms = results[7] || '0'; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"},{c:["if(results[8]) {","if(results[8] == 'Z'){","zz = 0;","}else if (results[8].indexOf(':') > -1){",a("P",8).c,"}else{",a("O",8).c,"}","}"].join("\n")}];for(var g=0,d=c.length;g<d;++g){e.push(c[g].c)}return{g:1,c:e.join(""),s:[c[0].s,"(?:","-",c[1].s,"(?:","-",c[2].s,"(?:","(?:T| )?",c[3].s,":",c[4].s,"(?::",c[5].s,")?","(?:(?:\\.|,)(\\d+))?","(Z|(?:[-+]\\d{2}(?::)?\\d{2}))?",")?",")?",")?"].join("")}},U:{g:1,c:"u = parseInt(results[{0}], 10);\n",s:"(-?\\d+)"}}})}());Ext.apply(Date.prototype,{dateFormat:function(a){if(Date.formatFunctions[a]==null){Date.createFormat(a)}return Date.formatFunctions[a].call(this)},getTimezone:function(){return this.toString().replace(/^.* (?:\((.*)\)|([A-Z]{1,4})(?:[\-+][0-9]{4})?(?: -?\d+)?)$/,"$1$2").replace(/[^A-Z]/g,"")},getGMTOffset:function(a){return(this.getTimezoneOffset()>0?"-":"+")+String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset())/60),2,"0")+(a?":":"")+String.leftPad(Math.abs(this.getTimezoneOffset()%60),2,"0")},getDayOfYear:function(){var b=0,e=this.clone(),a=this.getMonth(),c;for(c=0,e.setDate(1),e.setMonth(0);c<a;e.setMonth(++c)){b+=e.getDaysInMonth()}return b+this.getDate()-1},getWeekOfYear:function(){var a=86400000,b=7*a;return function(){var d=Date.UTC(this.getFullYear(),this.getMonth(),this.getDate()+3)/a,c=Math.floor(d/7),e=new Date(c*b).getUTCFullYear();return c-Math.floor(Date.UTC(e,0,7)/b)+1}}(),isLeapYear:function(){var a=this.getFullYear();return !!((a&3)==0&&(a%100||(a%400==0&&a)))},getFirstDayOfMonth:function(){var a=(this.getDay()-(this.getDate()-1))%7;return(a<0)?(a+7):a},getLastDayOfMonth:function(){return this.getLastDateOfMonth().getDay()},getFirstDateOfMonth:function(){return new Date(this.getFullYear(),this.getMonth(),1)},getLastDateOfMonth:function(){return new Date(this.getFullYear(),this.getMonth(),this.getDaysInMonth())},getDaysInMonth:function(){var a=[31,28,31,30,31,30,31,31,30,31,30,31];return function(){var b=this.getMonth();return b==1&&this.isLeapYear()?29:a[b]}}(),getSuffix:function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th"}},clone:function(){return new Date(this.getTime())},isDST:function(){return new Date(this.getFullYear(),0,1).getTimezoneOffset()!=this.getTimezoneOffset()},clearTime:function(g){if(g){return this.clone().clearTime()}var b=this.getDate();this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);if(this.getDate()!=b){for(var a=1,e=this.add(Date.HOUR,a);e.getDate()!=b;a++,e=this.add(Date.HOUR,a)){}this.setDate(b);this.setHours(e.getHours())}return this},add:function(b,c){var e=this.clone();if(!b||c===0){return e}switch(b.toLowerCase()){case Date.MILLI:e.setMilliseconds(this.getMilliseconds()+c);break;case Date.SECOND:e.setSeconds(this.getSeconds()+c);break;case Date.MINUTE:e.setMinutes(this.getMinutes()+c);break;case Date.HOUR:e.setHours(this.getHours()+c);break;case Date.DAY:e.setDate(this.getDate()+c);break;case Date.MONTH:var a=this.getDate();if(a>28){a=Math.min(a,this.getFirstDateOfMonth().add("mo",c).getLastDateOfMonth().getDate())}e.setDate(a);e.setMonth(this.getMonth()+c);break;case Date.YEAR:e.setFullYear(this.getFullYear()+c);break}return e},between:function(c,a){var b=this.getTime();return c.getTime()<=b&&b<=a.getTime()}});Date.prototype.format=Date.prototype.dateFormat;if(Ext.isSafari&&(navigator.userAgent.match(/WebKit\/(\d+)/)[1]||NaN)<420){Ext.apply(Date.prototype,{_xMonth:Date.prototype.setMonth,_xDate:Date.prototype.setDate,setMonth:function(a){if(a<=-1){var d=Math.ceil(-a),c=Math.ceil(d/12),b=(d%12)?12-d%12:0;this.setFullYear(this.getFullYear()-c);return this._xMonth(b)}else{return this._xMonth(a)}},setDate:function(a){return this.setTime(this.getTime()-(this.getDate()-a)*86400000)}})}Ext.util.MixedCollection=function(b,a){this.items=[];this.map={};this.keys=[];this.length=0;this.addEvents("clear","add","replace","remove","sort");this.allowFunctions=b===true;if(a){this.getKey=a}Ext.util.MixedCollection.superclass.constructor.call(this)};Ext.extend(Ext.util.MixedCollection,Ext.util.Observable,{allowFunctions:false,add:function(b,c){if(arguments.length==1){c=arguments[0];b=this.getKey(c)}if(typeof b!="undefined"&&b!==null){var a=this.map[b];if(typeof a!="undefined"){return this.replace(b,c)}this.map[b]=c}this.length++;this.items.push(c);this.keys.push(b);this.fireEvent("add",this.length-1,c,b);return c},getKey:function(a){return a.id},replace:function(c,d){if(arguments.length==1){d=arguments[0];c=this.getKey(d)}var a=this.map[c];if(typeof c=="undefined"||c===null||typeof a=="undefined"){return this.add(c,d)}var b=this.indexOfKey(c);this.items[b]=d;this.map[c]=d;this.fireEvent("replace",c,a,d);return d},addAll:function(e){if(arguments.length>1||Ext.isArray(e)){var b=arguments.length>1?arguments:e;for(var d=0,a=b.length;d<a;d++){this.add(b[d])}}else{for(var c in e){if(this.allowFunctions||typeof e[c]!="function"){this.add(c,e[c])}}}},each:function(e,d){var b=[].concat(this.items);for(var c=0,a=b.length;c<a;c++){if(e.call(d||b[c],b[c],c,a)===false){break}}},eachKey:function(d,c){for(var b=0,a=this.keys.length;b<a;b++){d.call(c||window,this.keys[b],this.items[b],b,a)}},find:function(d,c){for(var b=0,a=this.items.length;b<a;b++){if(d.call(c||window,this.items[b],this.keys[b])){return this.items[b]}}return null},insert:function(a,b,c){if(arguments.length==2){c=arguments[1];b=this.getKey(c)}if(this.containsKey(b)){this.suspendEvents();this.removeKey(b);this.resumeEvents()}if(a>=this.length){return this.add(b,c)}this.length++;this.items.splice(a,0,c);if(typeof b!="undefined"&&b!==null){this.map[b]=c}this.keys.splice(a,0,b);this.fireEvent("add",a,c,b);return c},remove:function(a){return this.removeAt(this.indexOf(a))},removeAt:function(a){if(a<this.length&&a>=0){this.length--;var c=this.items[a];this.items.splice(a,1);var b=this.keys[a];if(typeof b!="undefined"){delete this.map[b]}this.keys.splice(a,1);this.fireEvent("remove",c,b);return c}return false},removeKey:function(a){return this.removeAt(this.indexOfKey(a))},getCount:function(){return this.length},indexOf:function(a){return this.items.indexOf(a)},indexOfKey:function(a){return this.keys.indexOf(a)},item:function(b){var a=this.map[b],c=a!==undefined?a:(typeof b=="number")?this.items[b]:undefined;return typeof c!="function"||this.allowFunctions?c:null},itemAt:function(a){return this.items[a]},key:function(a){return this.map[a]},contains:function(a){return this.indexOf(a)!=-1},containsKey:function(a){return typeof this.map[a]!="undefined"},clear:function(){this.length=0;this.items=[];this.keys=[];this.map={};this.fireEvent("clear")},first:function(){return this.items[0]},last:function(){return this.items[this.length-1]},_sort:function(l,a,k){var d,e,b=String(a).toUpperCase()=="DESC"?-1:1,h=[],m=this.keys,g=this.items;k=k||function(i,c){return i-c};for(d=0,e=g.length;d<e;d++){h[h.length]={key:m[d],value:g[d],index:d}}h.sort(function(i,c){var n=k(i[l],c[l])*b;if(n===0){n=(i.index<c.index?-1:1)}return n});for(d=0,e=h.length;d<e;d++){g[d]=h[d].value;m[d]=h[d].key}this.fireEvent("sort",this)},sort:function(a,b){this._sort("value",a,b)},reorder:function(d){this.suspendEvents();var b=this.items,c=0,g=b.length,a=[],e=[],h;for(h in d){a[d[h]]=b[h]}for(c=0;c<g;c++){if(d[c]==undefined){e.push(b[c])}}for(c=0;c<g;c++){if(a[c]==undefined){a[c]=e.shift()}}this.clear();this.addAll(a);this.resumeEvents();this.fireEvent("sort",this)},keySort:function(a,b){this._sort("key",a,b||function(d,c){var g=String(d).toUpperCase(),e=String(c).toUpperCase();return g>e?1:(g<e?-1:0)})},getRange:function(e,a){var b=this.items;if(b.length<1){return[]}e=e||0;a=Math.min(typeof a=="undefined"?this.length-1:a,this.length-1);var c,d=[];if(e<=a){for(c=e;c<=a;c++){d[d.length]=b[c]}}else{for(c=e;c>=a;c--){d[d.length]=b[c]}}return d},filter:function(c,b,d,a){if(Ext.isEmpty(b,false)){return this.clone()}b=this.createValueMatcher(b,d,a);return this.filterBy(function(e){return e&&b.test(e[c])})},filterBy:function(g,e){var h=new Ext.util.MixedCollection();h.getKey=this.getKey;var b=this.keys,d=this.items;for(var c=0,a=d.length;c<a;c++){if(g.call(e||this,d[c],b[c])){h.add(b[c],d[c])}}return h},findIndex:function(c,b,e,d,a){if(Ext.isEmpty(b,false)){return -1}b=this.createValueMatcher(b,d,a);return this.findIndexBy(function(g){return g&&b.test(g[c])},null,e)},findIndexBy:function(g,e,h){var b=this.keys,d=this.items;for(var c=(h||0),a=d.length;c<a;c++){if(g.call(e||this,d[c],b[c])){return c}}return -1},createValueMatcher:function(c,e,a,b){if(!c.exec){var d=Ext.escapeRe;c=String(c);if(e===true){c=d(c)}else{c="^"+d(c);if(b===true){c+="$"}}c=new RegExp(c,a?"":"i")}return c},clone:function(){var e=new Ext.util.MixedCollection();var b=this.keys,d=this.items;for(var c=0,a=d.length;c<a;c++){e.add(b[c],d[c])}e.getKey=this.getKey;return e}});Ext.util.MixedCollection.prototype.get=Ext.util.MixedCollection.prototype.item;Ext.AbstractManager=Ext.extend(Object,{typeName:"type",constructor:function(a){Ext.apply(this,a||{});this.all=new Ext.util.MixedCollection();this.types={}},get:function(a){return this.all.get(a)},register:function(a){this.all.add(a)},unregister:function(a){this.all.remove(a)},registerType:function(b,a){this.types[b]=a;a[this.typeName]=b},isRegistered:function(a){return this.types[a]!==undefined},create:function(a,d){var b=a[this.typeName]||a.type||d,c=this.types[b];if(c==undefined){throw new Error(String.format("The '{0}' type has not been registered with this manager",b))}return new c(a)},onAvailable:function(d,c,b){var a=this.all;a.on("add",function(e,g){if(g.id==d){c.call(b||g,g);a.un("add",c,b)}})}});Ext.util.Format=function(){var trimRe=/^\s+|\s+$/g,stripTagsRE=/<\/?[^>]+>/gi,stripScriptsRe=/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,nl2brRe=/\r?\n/g;return{ellipsis:function(value,len,word){if(value&&value.length>len){if(word){var vs=value.substr(0,len-2),index=Math.max(vs.lastIndexOf(" "),vs.lastIndexOf("."),vs.lastIndexOf("!"),vs.lastIndexOf("?"));if(index==-1||index<(len-15)){return value.substr(0,len-3)+"..."}else{return vs.substr(0,index)+"..."}}else{return value.substr(0,len-3)+"..."}}return value},undef:function(value){return value!==undefined?value:""},defaultValue:function(value,defaultValue){return value!==undefined&&value!==""?value:defaultValue},htmlEncode:function(value){return !value?value:String(value).replace(/&/g,"&").replace(/>/g,">").replace(/</g,"<").replace(/"/g,""")},htmlDecode:function(value){return !value?value:String(value).replace(/>/g,">").replace(/</g,"<").replace(/"/g,'"').replace(/&/g,"&")},trim:function(value){return String(value).replace(trimRe,"")},substr:function(value,start,length){return String(value).substr(start,length)},lowercase:function(value){return String(value).toLowerCase()},uppercase:function(value){return String(value).toUpperCase()},capitalize:function(value){return !value?value:value.charAt(0).toUpperCase()+value.substr(1).toLowerCase()},call:function(value,fn){if(arguments.length>2){var args=Array.prototype.slice.call(arguments,2);args.unshift(value);return eval(fn).apply(window,args)}else{return eval(fn).call(window,value)}},usMoney:function(v){v=(Math.round((v-0)*100))/100;v=(v==Math.floor(v))?v+".00":((v*10==Math.floor(v*10))?v+"0":v);v=String(v);var ps=v.split("."),whole=ps[0],sub=ps[1]?"."+ps[1]:".00",r=/(\d+)(\d{3})/;while(r.test(whole)){whole=whole.replace(r,"$1,$2")}v=whole+sub;if(v.charAt(0)=="-"){return"-$"+v.substr(1)}return"$"+v},date:function(v,format){if(!v){return""}if(!Ext.isDate(v)){v=new Date(Date.parse(v))}return v.dateFormat(format||"m/d/Y")},dateRenderer:function(format){return function(v){return Ext.util.Format.date(v,format)}},stripTags:function(v){return !v?v:String(v).replace(stripTagsRE,"")},stripScripts:function(v){return !v?v:String(v).replace(stripScriptsRe,"")},fileSize:function(size){if(size<1024){return size+" bytes"}else{if(size<1048576){return(Math.round(((size*10)/1024))/10)+" KB"}else{return(Math.round(((size*10)/1048576))/10)+" MB"}}},math:function(){var fns={};return function(v,a){if(!fns[a]){fns[a]=new Function("v","return v "+a+";")}return fns[a](v)}}(),round:function(value,precision){var result=Number(value);if(typeof precision=="number"){precision=Math.pow(10,precision);result=Math.round(value*precision)/precision}return result},number:function(v,format){if(!format){return v}v=Ext.num(v,NaN);if(isNaN(v)){return""}var comma=",",dec=".",i18n=false,neg=v<0;v=Math.abs(v);if(format.substr(format.length-2)=="/i"){format=format.substr(0,format.length-2);i18n=true;comma=".";dec=","}var hasComma=format.indexOf(comma)!=-1,psplit=(i18n?format.replace(/[^\d\,]/g,""):format.replace(/[^\d\.]/g,"")).split(dec);if(1<psplit.length){v=v.toFixed(psplit[1].length)}else{if(2<psplit.length){throw ("NumberFormatException: invalid format, formats should have no more than 1 period: "+format)}else{v=v.toFixed(0)}}var fnum=v.toString();psplit=fnum.split(".");if(hasComma){var cnum=psplit[0],parr=[],j=cnum.length,m=Math.floor(j/3),n=cnum.length%3||3,i;for(i=0;i<j;i+=n){if(i!=0){n=3}parr[parr.length]=cnum.substr(i,n);m-=1}fnum=parr.join(comma);if(psplit[1]){fnum+=dec+psplit[1]}}else{if(psplit[1]){fnum=psplit[0]+dec+psplit[1]}}return(neg?"-":"")+format.replace(/[\d,?\.?]+/,fnum)},numberRenderer:function(format){return function(v){return Ext.util.Format.number(v,format)}},plural:function(v,s,p){return v+" "+(v==1?s:(p?p:s+"s"))},nl2br:function(v){return Ext.isEmpty(v)?"":v.replace(nl2brRe,"<br/>")}}}();Ext.XTemplate=function(){Ext.XTemplate.superclass.constructor.apply(this,arguments);var z=this,k=z.html,r=/<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/,d=/^<tpl\b[^>]*?for="(.*?)"/,w=/^<tpl\b[^>]*?if="(.*?)"/,y=/^<tpl\b[^>]*?exec="(.*?)"/,t,q=0,l=[],p="values",x="parent",n="xindex",o="xcount",e="return ",c="with(values){ ";k=["<tpl>",k,"</tpl>"].join("");while((t=k.match(r))){var b=t[0].match(d),a=t[0].match(w),B=t[0].match(y),g=null,h=null,u=null,A=b&&b[1]?b[1]:"";if(a){g=a&&a[1]?a[1]:null;if(g){h=new Function(p,x,n,o,c+e+(Ext.util.Format.htmlDecode(g))+"; }")}}if(B){g=B&&B[1]?B[1]:null;if(g){u=new Function(p,x,n,o,c+(Ext.util.Format.htmlDecode(g))+"; }")}}if(A){switch(A){case".":A=new Function(p,x,c+e+p+"; }");break;case"..":A=new Function(p,x,c+e+x+"; }");break;default:A=new Function(p,x,c+e+A+"; }")}}l.push({id:q,target:A,exec:u,test:h,body:t[1]||""});k=k.replace(t[0],"{xtpl"+q+"}");++q}for(var v=l.length-1;v>=0;--v){z.compileTpl(l[v])}z.master=l[l.length-1];z.tpls=l};Ext.extend(Ext.XTemplate,Ext.Template,{re:/\{([\w-\.\#]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?(\s?[\+\-\*\\]\s?[\d\.\+\-\*\\\(\)]+)?\}/g,codeRe:/\{\[((?:\\\]|.|\n)*?)\]\}/g,applySubTemplate:function(a,l,k,d,c){var h=this,g,n=h.tpls[a],m,b=[];if((n.test&&!n.test.call(h,l,k,d,c))||(n.exec&&n.exec.call(h,l,k,d,c))){return""}m=n.target?n.target.call(h,l,k):l;g=m.length;k=n.target?l:k;if(n.target&&Ext.isArray(m)){for(var e=0,g=m.length;e<g;e++){b[b.length]=n.compiled.call(h,m[e],k,e+1,g)}return b.join("")}return n.compiled.call(h,m,k,d,c)},compileTpl:function(tpl){var fm=Ext.util.Format,useF=this.disableFormats!==true,sep=Ext.isGecko?"+":",",body;function fn(m,name,format,args,math){if(name.substr(0,4)=="xtpl"){return"'"+sep+"this.applySubTemplate("+name.substr(4)+", values, parent, xindex, xcount)"+sep+"'"}var v;if(name==="."){v="values"}else{if(name==="#"){v="xindex"}else{if(name.indexOf(".")!=-1){v=name}else{v="values['"+name+"']"}}}if(math){v="("+v+math+")"}if(format&&useF){args=args?","+args:"";if(format.substr(0,5)!="this."){format="fm."+format+"("}else{format='this.call("'+format.substr(5)+'", ';args=", values"}}else{args="";format="("+v+" === undefined ? '' : "}return"'"+sep+format+v+args+")"+sep+"'"}function codeFn(m,code){return"'"+sep+"("+code.replace(/\\'/g,"'")+")"+sep+"'"}if(Ext.isGecko){body="tpl.compiled = function(values, parent, xindex, xcount){ return '"+tpl.body.replace(/(\r\n|\n)/g,"\\n").replace(/'/g,"\\'").replace(this.re,fn).replace(this.codeRe,codeFn)+"';};"}else{body=["tpl.compiled = function(values, parent, xindex, xcount){ return ['"];body.push(tpl.body.replace(/(\r\n|\n)/g,"\\n").replace(/'/g,"\\'").replace(this.re,fn).replace(this.codeRe,codeFn));body.push("'].join('');};");body=body.join("")}eval(body);return this},applyTemplate:function(a){return this.master.compiled.call(this,a,{},1,1)},compile:function(){return this}});Ext.XTemplate.prototype.apply=Ext.XTemplate.prototype.applyTemplate;Ext.XTemplate.from=function(a){a=Ext.getDom(a);return new Ext.XTemplate(a.value||a.innerHTML)};Ext.util.CSS=function(){var d=null;var c=document;var b=/(-[a-z])/gi;var a=function(e,g){return g.charAt(1).toUpperCase()};return{createStyleSheet:function(i,m){var h;var g=c.getElementsByTagName("head")[0];var l=c.createElement("style");l.setAttribute("type","text/css");if(m){l.setAttribute("id",m)}if(Ext.isIE){g.appendChild(l);h=l.styleSheet;h.cssText=i}else{try{l.appendChild(c.createTextNode(i))}catch(k){l.cssText=i}g.appendChild(l);h=l.styleSheet?l.styleSheet:(l.sheet||c.styleSheets[c.styleSheets.length-1])}this.cacheStyleSheet(h);return h},removeStyleSheet:function(g){var e=c.getElementById(g);if(e){e.parentNode.removeChild(e)}},swapStyleSheet:function(h,e){this.removeStyleSheet(h);var g=c.createElement("link");g.setAttribute("rel","stylesheet");g.setAttribute("type","text/css");g.setAttribute("id",h);g.setAttribute("href",e);c.getElementsByTagName("head")[0].appendChild(g)},refreshCache:function(){return this.getRules(true)},cacheStyleSheet:function(h){if(!d){d={}}try{var k=h.cssRules||h.rules;for(var g=k.length-1;g>=0;--g){d[k[g].selectorText.toLowerCase()]=k[g]}}catch(i){}},getRules:function(h){if(d===null||h){d={};var l=c.styleSheets;for(var k=0,g=l.length;k<g;k++){try{this.cacheStyleSheet(l[k])}catch(m){}}}return d},getRule:function(e,h){var g=this.getRules(h);if(!Ext.isArray(e)){return g[e.toLowerCase()]}for(var k=0;k<e.length;k++){if(g[e[k]]){return g[e[k].toLowerCase()]}}return null},updateRule:function(e,k,h){if(!Ext.isArray(e)){var l=this.getRule(e);if(l){l.style[k.replace(b,a)]=h;return true}}else{for(var g=0;g<e.length;g++){if(this.updateRule(e[g],k,h)){return true}}}return false}}}();Ext.util.ClickRepeater=Ext.extend(Ext.util.Observable,{constructor:function(b,a){this.el=Ext.get(b);this.el.unselectable();Ext.apply(this,a);this.addEvents("mousedown","click","mouseup");if(!this.disabled){this.disabled=true;this.enable()}if(this.handler){this.on("click",this.handler,this.scope||this)}Ext.util.ClickRepeater.superclass.constructor.call(this)},interval:20,delay:250,preventDefault:true,stopDefault:false,timer:0,enable:function(){if(this.disabled){this.el.on("mousedown",this.handleMouseDown,this);if(Ext.isIE){this.el.on("dblclick",this.handleDblClick,this)}if(this.preventDefault||this.stopDefault){this.el.on("click",this.eventOptions,this)}}this.disabled=false},disable:function(a){if(a||!this.disabled){clearTimeout(this.timer);if(this.pressClass){this.el.removeClass(this.pressClass)}Ext.getDoc().un("mouseup",this.handleMouseUp,this);this.el.removeAllListeners()}this.disabled=true},setDisabled:function(a){this[a?"disable":"enable"]()},eventOptions:function(a){if(this.preventDefault){a.preventDefault()}if(this.stopDefault){a.stopEvent()}},destroy:function(){this.disable(true);Ext.destroy(this.el);this.purgeListeners()},handleDblClick:function(a){clearTimeout(this.timer);this.el.blur();this.fireEvent("mousedown",this,a);this.fireEvent("click",this,a)},handleMouseDown:function(a){clearTimeout(this.timer);this.el.blur();if(this.pressClass){this.el.addClass(this.pressClass)}this.mousedownTime=new Date();Ext.getDoc().on("mouseup",this.handleMouseUp,this);this.el.on("mouseout",this.handleMouseOut,this);this.fireEvent("mousedown",this,a);this.fireEvent("click",this,a);if(this.accelerate){this.delay=400}this.timer=this.click.defer(this.delay||this.interval,this,[a])},click:function(a){this.fireEvent("click",this,a);this.timer=this.click.defer(this.accelerate?this.easeOutExpo(this.mousedownTime.getElapsed(),400,-390,12000):this.interval,this,[a])},easeOutExpo:function(e,a,h,g){return(e==g)?a+h:h*(-Math.pow(2,-10*e/g)+1)+a},handleMouseOut:function(){clearTimeout(this.timer);if(this.pressClass){this.el.removeClass(this.pressClass)}this.el.on("mouseover",this.handleMouseReturn,this)},handleMouseReturn:function(){this.el.un("mouseover",this.handleMouseReturn,this);if(this.pressClass){this.el.addClass(this.pressClass)}this.click()},handleMouseUp:function(a){clearTimeout(this.timer);this.el.un("mouseover",this.handleMouseReturn,this);this.el.un("mouseout",this.handleMouseOut,this);Ext.getDoc().un("mouseup",this.handleMouseUp,this);this.el.removeClass(this.pressClass);this.fireEvent("mouseup",this,a)}});Ext.KeyNav=function(b,a){this.el=Ext.get(b);Ext.apply(this,a);if(!this.disabled){this.disabled=true;this.enable()}};Ext.KeyNav.prototype={disabled:false,defaultEventAction:"stopEvent",forceKeyDown:false,relay:function(c){var a=c.getKey(),b=this.keyToHandler[a];if(b&&this[b]){if(this.doRelay(c,this[b],b)!==true){c[this.defaultEventAction]()}}},doRelay:function(c,b,a){return b.call(this.scope||this,c,a)},enter:false,left:false,right:false,up:false,down:false,tab:false,esc:false,pageUp:false,pageDown:false,del:false,home:false,end:false,keyToHandler:{37:"left",39:"right",38:"up",40:"down",33:"pageUp",34:"pageDown",46:"del",36:"home",35:"end",13:"enter",27:"esc",9:"tab"},stopKeyUp:function(b){var a=b.getKey();if(a>=37&&a<=40){b.stopEvent()}},destroy:function(){this.disable()},enable:function(){if(this.disabled){if(Ext.isSafari2){this.el.on("keyup",this.stopKeyUp,this)}this.el.on(this.isKeydown()?"keydown":"keypress",this.relay,this);this.disabled=false}},disable:function(){if(!this.disabled){if(Ext.isSafari2){this.el.un("keyup",this.stopKeyUp,this)}this.el.un(this.isKeydown()?"keydown":"keypress",this.relay,this);this.disabled=true}},setDisabled:function(a){this[a?"disable":"enable"]()},isKeydown:function(){return this.forceKeyDown||Ext.EventManager.useKeydown}};Ext.KeyMap=function(c,b,a){this.el=Ext.get(c);this.eventName=a||"keydown";this.bindings=[];if(b){this.addBinding(b)}this.enable()};Ext.KeyMap.prototype={stopEvent:false,addBinding:function(b){if(Ext.isArray(b)){Ext.each(b,function(m){this.addBinding(m)},this);return}var k=b.key,g=b.fn||b.handler,l=b.scope;if(b.stopEvent){this.stopEvent=b.stopEvent}if(typeof k=="string"){var h=[];var e=k.toUpperCase();for(var c=0,d=e.length;c<d;c++){h.push(e.charCodeAt(c))}k=h}var a=Ext.isArray(k);var i=function(p){if(this.checkModifiers(b,p)){var n=p.getKey();if(a){for(var o=0,m=k.length;o<m;o++){if(k[o]==n){if(this.stopEvent){p.stopEvent()}g.call(l||window,n,p);return}}}else{if(n==k){if(this.stopEvent){p.stopEvent()}g.call(l||window,n,p)}}}};this.bindings.push(i)},checkModifiers:function(b,h){var k,d,g=["shift","ctrl","alt"];for(var c=0,a=g.length;c<a;++c){d=g[c];k=b[d];if(!(k===undefined||(k===h[d+"Key"]))){return false}}return true},on:function(b,d,c){var h,a,e,g;if(typeof b=="object"&&!Ext.isArray(b)){h=b.key;a=b.shift;e=b.ctrl;g=b.alt}else{h=b}this.addBinding({key:h,shift:a,ctrl:e,alt:g,fn:d,scope:c})},handleKeyDown:function(g){if(this.enabled){var c=this.bindings;for(var d=0,a=c.length;d<a;d++){c[d].call(this,g)}}},isEnabled:function(){return this.enabled},enable:function(){if(!this.enabled){this.el.on(this.eventName,this.handleKeyDown,this);this.enabled=true}},disable:function(){if(this.enabled){this.el.removeListener(this.eventName,this.handleKeyDown,this);this.enabled=false}},setDisabled:function(a){this[a?"disable":"enable"]()}};Ext.util.TextMetrics=function(){var a;return{measure:function(b,c,d){if(!a){a=Ext.util.TextMetrics.Instance(b,d)}a.bind(b);a.setFixedWidth(d||"auto");return a.getSize(c)},createInstance:function(b,c){return Ext.util.TextMetrics.Instance(b,c)}}}();Ext.util.TextMetrics.Instance=function(b,d){var c=new Ext.Element(document.createElement("div"));document.body.appendChild(c.dom);c.position("absolute");c.setLeftTop(-1000,-1000);c.hide();if(d){c.setWidth(d)}var a={getSize:function(g){c.update(g);var e=c.getSize();c.update("");return e},bind:function(e){c.setStyle(Ext.fly(e).getStyles("font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"))},setFixedWidth:function(e){c.setWidth(e)},getWidth:function(e){c.dom.style.width="auto";return this.getSize(e).width},getHeight:function(e){return this.getSize(e).height}};a.bind(b);return a};Ext.Element.addMethods({getTextWidth:function(c,b,a){return(Ext.util.TextMetrics.measure(this.dom,Ext.value(c,this.dom.innerHTML,true)).width).constrain(b||0,a||1000000)}});Ext.util.Cookies={set:function(c,e){var a=arguments;var i=arguments.length;var b=(i>2)?a[2]:null;var h=(i>3)?a[3]:"/";var d=(i>4)?a[4]:null;var g=(i>5)?a[5]:false;document.cookie=c+"="+escape(e)+((b===null)?"":("; expires="+b.toGMTString()))+((h===null)?"":("; path="+h))+((d===null)?"":("; domain="+d))+((g===true)?"; secure":"")},get:function(d){var b=d+"=";var g=b.length;var a=document.cookie.length;var e=0;var c=0;while(e<a){c=e+g;if(document.cookie.substring(e,c)==b){return Ext.util.Cookies.getCookieVal(c)}e=document.cookie.indexOf(" ",e)+1;if(e===0){break}}return null},clear:function(a){if(Ext.util.Cookies.get(a)){document.cookie=a+"=; expires=Thu, 01-Jan-70 00:00:01 GMT"}},getCookieVal:function(b){var a=document.cookie.indexOf(";",b);if(a==-1){a=document.cookie.length}return unescape(document.cookie.substring(b,a))}};Ext.handleError=function(a){throw a};Ext.Error=function(a){this.message=(this.lang[a])?this.lang[a]:a};Ext.Error.prototype=new Error();Ext.apply(Ext.Error.prototype,{lang:{},name:"Ext.Error",getName:function(){return this.name},getMessage:function(){return this.message},toJson:function(){return Ext.encode(this)}});Ext.ComponentMgr=function(){var c=new Ext.util.MixedCollection();var b={};var a={};return{register:function(d){c.add(d)},unregister:function(d){c.remove(d)},get:function(d){return c.get(d)},onAvailable:function(g,e,d){c.on("add",function(h,i){if(i.id==g){e.call(d||i,i);c.un("add",e,d)}})},all:c,types:b,ptypes:a,isRegistered:function(d){return b[d]!==undefined},isPluginRegistered:function(d){return a[d]!==undefined},registerType:function(e,d){b[e]=d;d.xtype=e},create:function(d,e){return d.render?d:new b[d.xtype||e](d)},registerPlugin:function(e,d){a[e]=d;d.ptype=e},createPlugin:function(e,g){var d=a[e.ptype||g];if(d.init){return d}else{return new d(e)}}}}();Ext.reg=Ext.ComponentMgr.registerType;Ext.preg=Ext.ComponentMgr.registerPlugin;Ext.create=Ext.ComponentMgr.create;Ext.Component=function(b){b=b||{};if(b.initialConfig){if(b.isAction){this.baseAction=b}b=b.initialConfig}else{if(b.tagName||b.dom||Ext.isString(b)){b={applyTo:b,id:b.id||b}}}this.initialConfig=b;Ext.apply(this,b);this.addEvents("added","disable","enable","beforeshow","show","beforehide","hide","removed","beforerender","render","afterrender","beforedestroy","destroy","beforestaterestore","staterestore","beforestatesave","statesave");this.getId();Ext.ComponentMgr.register(this);Ext.Component.superclass.constructor.call(this);if(this.baseAction){this.baseAction.addComponent(this)}this.initComponent();if(this.plugins){if(Ext.isArray(this.plugins)){for(var c=0,a=this.plugins.length;c<a;c++){this.plugins[c]=this.initPlugin(this.plugins[c])}}else{this.plugins=this.initPlugin(this.plugins)}}if(this.stateful!==false){this.initState()}if(this.applyTo){this.applyToMarkup(this.applyTo);delete this.applyTo}else{if(this.renderTo){this.render(this.renderTo);delete this.renderTo}}};Ext.Component.AUTO_ID=1000;Ext.extend(Ext.Component,Ext.util.Observable,{disabled:false,hidden:false,autoEl:"div",disabledClass:"x-item-disabled",allowDomMove:true,autoShow:false,hideMode:"display",hideParent:false,rendered:false,tplWriteMode:"overwrite",bubbleEvents:[],ctype:"Ext.Component",actionMode:"el",getActionEl:function(){return this[this.actionMode]},initPlugin:function(a){if(a.ptype&&!Ext.isFunction(a.init)){a=Ext.ComponentMgr.createPlugin(a)}else{if(Ext.isString(a)){a=Ext.ComponentMgr.createPlugin({ptype:a})}}a.init(this);return a},initComponent:function(){if(this.listeners){this.on(this.listeners);delete this.listeners}this.enableBubble(this.bubbleEvents)},render:function(b,a){if(!this.rendered&&this.fireEvent("beforerender",this)!==false){if(!b&&this.el){this.el=Ext.get(this.el);b=this.el.dom.parentNode;this.allowDomMove=false}this.container=Ext.get(b);if(this.ctCls){this.container.addClass(this.ctCls)}this.rendered=true;if(a!==undefined){if(Ext.isNumber(a)){a=this.container.dom.childNodes[a]}else{a=Ext.getDom(a)}}this.onRender(this.container,a||null);if(this.autoShow){this.el.removeClass(["x-hidden","x-hide-"+this.hideMode])}if(this.cls){this.el.addClass(this.cls);delete this.cls}if(this.style){this.el.applyStyles(this.style);delete this.style}if(this.overCls){this.el.addClassOnOver(this.overCls)}this.fireEvent("render",this);var c=this.getContentTarget();if(this.html){c.update(Ext.DomHelper.markup(this.html));delete this.html}if(this.contentEl){var d=Ext.getDom(this.contentEl);Ext.fly(d).removeClass(["x-hidden","x-hide-display"]);c.appendChild(d)}if(this.tpl){if(!this.tpl.compile){this.tpl=new Ext.XTemplate(this.tpl)}if(this.data){this.tpl[this.tplWriteMode](c,this.data);delete this.data}}this.afterRender(this.container);if(this.hidden){this.doHide()}if(this.disabled){this.disable(true)}if(this.stateful!==false){this.initStateEvents()}this.fireEvent("afterrender",this)}return this},update:function(b,d,a){var c=this.getContentTarget();if(this.tpl&&typeof b!=="string"){this.tpl[this.tplWriteMode](c,b||{})}else{var e=Ext.isObject(b)?Ext.DomHelper.markup(b):b;c.update(e,d,a)}},onAdded:function(a,b){this.ownerCt=a;this.initRef();this.fireEvent("added",this,a,b)},onRemoved:function(){this.removeRef();this.fireEvent("removed",this,this.ownerCt);delete this.ownerCt},initRef:function(){if(this.ref&&!this.refOwner){var d=this.ref.split("/"),c=d.length,b=0,a=this;while(a&&b<c){a=a.ownerCt;++b}if(a){a[this.refName=d[--b]]=this;this.refOwner=a}}},removeRef:function(){if(this.refOwner&&this.refName){delete this.refOwner[this.refName];delete this.refOwner}},initState:function(){if(Ext.state.Manager){var b=this.getStateId();if(b){var a=Ext.state.Manager.get(b);if(a){if(this.fireEvent("beforestaterestore",this,a)!==false){this.applyState(Ext.apply({},a));this.fireEvent("staterestore",this,a)}}}}},getStateId:function(){return this.stateId||((/^(ext-comp-|ext-gen)/).test(String(this.id))?null:this.id)},initStateEvents:function(){if(this.stateEvents){for(var a=0,b;b=this.stateEvents[a];a++){this.on(b,this.saveState,this,{delay:100})}}},applyState:function(a){if(a){Ext.apply(this,a)}},getState:function(){return null},saveState:function(){if(Ext.state.Manager&&this.stateful!==false){var b=this.getStateId();if(b){var a=this.getState();if(this.fireEvent("beforestatesave",this,a)!==false){Ext.state.Manager.set(b,a);this.fireEvent("statesave",this,a)}}}},applyToMarkup:function(a){this.allowDomMove=false;this.el=Ext.get(a);this.render(this.el.dom.parentNode)},addClass:function(a){if(this.el){this.el.addClass(a)}else{this.cls=this.cls?this.cls+" "+a:a}return this},removeClass:function(a){if(this.el){this.el.removeClass(a)}else{if(this.cls){this.cls=this.cls.split(" ").remove(a).join(" ")}}return this},onRender:function(b,a){if(!this.el&&this.autoEl){if(Ext.isString(this.autoEl)){this.el=document.createElement(this.autoEl)}else{var c=document.createElement("div");Ext.DomHelper.overwrite(c,this.autoEl);this.el=c.firstChild}if(!this.el.id){this.el.id=this.getId()}}if(this.el){this.el=Ext.get(this.el);if(this.allowDomMove!==false){b.dom.insertBefore(this.el.dom,a);if(c){Ext.removeNode(c);c=null}}}},getAutoCreate:function(){var a=Ext.isObject(this.autoCreate)?this.autoCreate:Ext.apply({},this.defaultAutoCreate);if(this.id&&!a.id){a.id=this.id}return a},afterRender:Ext.emptyFn,destroy:function(){if(!this.isDestroyed){if(this.fireEvent("beforedestroy",this)!==false){this.destroying=true;this.beforeDestroy();if(this.ownerCt&&this.ownerCt.remove){this.ownerCt.remove(this,false)}if(this.rendered){this.el.remove();if(this.actionMode=="container"||this.removeMode=="container"){this.container.remove()}}if(this.focusTask&&this.focusTask.cancel){this.focusTask.cancel()}this.onDestroy();Ext.ComponentMgr.unregister(this);this.fireEvent("destroy",this);this.purgeListeners();this.destroying=false;this.isDestroyed=true}}},deleteMembers:function(){var b=arguments;for(var c=0,a=b.length;c<a;++c){delete this[b[c]]}},beforeDestroy:Ext.emptyFn,onDestroy:Ext.emptyFn,getEl:function(){return this.el},getContentTarget:function(){return this.el},getId:function(){return this.id||(this.id="ext-comp-"+(++Ext.Component.AUTO_ID))},getItemId:function(){return this.itemId||this.getId()},focus:function(b,a){if(a){this.focusTask=new Ext.util.DelayedTask(this.focus,this,[b,false]);this.focusTask.delay(Ext.isNumber(a)?a:10);return this}if(this.rendered&&!this.isDestroyed){this.el.focus();if(b===true){this.el.dom.select()}}return this},blur:function(){if(this.rendered){this.el.blur()}return this},disable:function(a){if(this.rendered){this.onDisable()}this.disabled=true;if(a!==true){this.fireEvent("disable",this)}return this},onDisable:function(){this.getActionEl().addClass(this.disabledClass);this.el.dom.disabled=true},enable:function(){if(this.rendered){this.onEnable()}this.disabled=false;this.fireEvent("enable",this);return this},onEnable:function(){this.getActionEl().removeClass(this.disabledClass);this.el.dom.disabled=false},setDisabled:function(a){return this[a?"disable":"enable"]()},show:function(){if(this.fireEvent("beforeshow",this)!==false){this.hidden=false;if(this.autoRender){this.render(Ext.isBoolean(this.autoRender)?Ext.getBody():this.autoRender)}if(this.rendered){this.onShow()}this.fireEvent("show",this)}return this},onShow:function(){this.getVisibilityEl().removeClass("x-hide-"+this.hideMode)},hide:function(){if(this.fireEvent("beforehide",this)!==false){this.doHide();this.fireEvent("hide",this)}return this},doHide:function(){this.hidden=true;if(this.rendered){this.onHide()}},onHide:function(){this.getVisibilityEl().addClass("x-hide-"+this.hideMode)},getVisibilityEl:function(){return this.hideParent?this.container:this.getActionEl()},setVisible:function(a){return this[a?"show":"hide"]()},isVisible:function(){return this.rendered&&this.getVisibilityEl().isVisible()},cloneConfig:function(b){b=b||{};var c=b.id||Ext.id();var a=Ext.applyIf(b,this.initialConfig);a.id=c;return new this.constructor(a)},getXType:function(){return this.constructor.xtype},isXType:function(b,a){if(Ext.isFunction(b)){b=b.xtype}else{if(Ext.isObject(b)){b=b.constructor.xtype}}return !a?("/"+this.getXTypes()+"/").indexOf("/"+b+"/")!=-1:this.constructor.xtype==b},getXTypes:function(){var a=this.constructor;if(!a.xtypes){var d=[],b=this;while(b&&b.constructor.xtype){d.unshift(b.constructor.xtype);b=b.constructor.superclass}a.xtypeChain=d;a.xtypes=d.join("/")}return a.xtypes},findParentBy:function(a){for(var b=this.ownerCt;(b!=null)&&!a(b,this);b=b.ownerCt){}return b||null},findParentByType:function(b,a){return this.findParentBy(function(d){return d.isXType(b,a)})},bubble:function(c,b,a){var d=this;while(d){if(c.apply(b||d,a||[d])===false){break}d=d.ownerCt}return this},getPositionEl:function(){return this.positionEl||this.el},purgeListeners:function(){Ext.Component.superclass.purgeListeners.call(this);if(this.mons){this.on("beforedestroy",this.clearMons,this,{single:true})}},clearMons:function(){Ext.each(this.mons,function(a){a.item.un(a.ename,a.fn,a.scope)},this);this.mons=[]},createMons:function(){if(!this.mons){this.mons=[];this.on("beforedestroy",this.clearMons,this,{single:true})}},mon:function(g,b,d,c,a){this.createMons();if(Ext.isObject(b)){var k=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;var i=b;for(var h in i){if(k.test(h)){continue}if(Ext.isFunction(i[h])){this.mons.push({item:g,ename:h,fn:i[h],scope:i.scope});g.on(h,i[h],i.scope,i)}else{this.mons.push({item:g,ename:h,fn:i[h],scope:i.scope});g.on(h,i[h])}}return}this.mons.push({item:g,ename:b,fn:d,scope:c});g.on(b,d,c,a)},mun:function(h,c,g,e){var k,d;this.createMons();for(var b=0,a=this.mons.length;b<a;++b){d=this.mons[b];if(h===d.item&&c==d.ename&&g===d.fn&&e===d.scope){this.mons.splice(b,1);h.un(c,g,e);k=true;break}}return k},nextSibling:function(){if(this.ownerCt){var a=this.ownerCt.items.indexOf(this);if(a!=-1&&a+1<this.ownerCt.items.getCount()){return this.ownerCt.items.itemAt(a+1)}}return null},previousSibling:function(){if(this.ownerCt){var a=this.ownerCt.items.indexOf(this);if(a>0){return this.ownerCt.items.itemAt(a-1)}}return null},getBubbleTarget:function(){return this.ownerCt}});Ext.reg("component",Ext.Component);Ext.Action=Ext.extend(Object,{constructor:function(a){this.initialConfig=a;this.itemId=a.itemId=(a.itemId||a.id||Ext.id());this.items=[]},isAction:true,setText:function(a){this.initialConfig.text=a;this.callEach("setText",[a])},getText:function(){return this.initialConfig.text},setIconClass:function(a){this.initialConfig.iconCls=a;this.callEach("setIconClass",[a])},getIconClass:function(){return this.initialConfig.iconCls},setDisabled:function(a){this.initialConfig.disabled=a;this.callEach("setDisabled",[a])},enable:function(){this.setDisabled(false)},disable:function(){this.setDisabled(true)},isDisabled:function(){return this.initialConfig.disabled},setHidden:function(a){this.initialConfig.hidden=a;this.callEach("setVisible",[!a])},show:function(){this.setHidden(false)},hide:function(){this.setHidden(true)},isHidden:function(){return this.initialConfig.hidden},setHandler:function(b,a){this.initialConfig.handler=b;this.initialConfig.scope=a;this.callEach("setHandler",[b,a])},each:function(b,a){Ext.each(this.items,b,a)},callEach:function(e,b){var d=this.items;for(var c=0,a=d.length;c<a;c++){d[c][e].apply(d[c],b)}},addComponent:function(a){this.items.push(a);a.on("destroy",this.removeComponent,this)},removeComponent:function(a){this.items.remove(a)},execute:function(){this.initialConfig.handler.apply(this.initialConfig.scope||window,arguments)}});(function(){Ext.Layer=function(d,c){d=d||{};var e=Ext.DomHelper,h=d.parentEl,g=h?Ext.getDom(h):document.body;if(c){this.dom=Ext.getDom(c)}if(!this.dom){var i=d.dh||{tag:"div",cls:"x-layer"};this.dom=e.append(g,i)}if(d.cls){this.addClass(d.cls)}this.constrain=d.constrain!==false;this.setVisibilityMode(Ext.Element.VISIBILITY);if(d.id){this.id=this.dom.id=d.id}else{this.id=Ext.id(this.dom)}this.zindex=d.zindex||this.getZIndex();this.position("absolute",this.zindex);if(d.shadow){this.shadowOffset=d.shadowOffset||4;this.shadow=new Ext.Shadow({offset:this.shadowOffset,mode:d.shadow})}else{this.shadowOffset=0}this.useShim=d.shim!==false&&Ext.useShims;this.useDisplay=d.useDisplay;this.hide()};var a=Ext.Element.prototype;var b=[];Ext.extend(Ext.Layer,Ext.Element,{getZIndex:function(){return this.zindex||parseInt((this.getShim()||this).getStyle("z-index"),10)||11000},getShim:function(){if(!this.useShim){return null}if(this.shim){return this.shim}var d=b.shift();if(!d){d=this.createShim();d.enableDisplayMode("block");d.dom.style.display="none";d.dom.style.visibility="visible"}var c=this.dom.parentNode;if(d.dom.parentNode!=c){c.insertBefore(d.dom,this.dom)}d.setStyle("z-index",this.getZIndex()-2);this.shim=d;return d},hideShim:function(){if(this.shim){this.shim.setDisplayed(false);b.push(this.shim);delete this.shim}},disableShadow:function(){if(this.shadow){this.shadowDisabled=true;this.shadow.hide();this.lastShadowOffset=this.shadowOffset;this.shadowOffset=0}},enableShadow:function(c){if(this.shadow){this.shadowDisabled=false;this.shadowOffset=this.lastShadowOffset;delete this.lastShadowOffset;if(c){this.sync(true)}}},sync:function(d){var o=this.shadow;if(!this.updating&&this.isVisible()&&(o||this.useShim)){var i=this.getShim(),n=this.getWidth(),k=this.getHeight(),e=this.getLeft(true),p=this.getTop(true);if(o&&!this.shadowDisabled){if(d&&!o.isVisible()){o.show(this)}else{o.realign(e,p,n,k)}if(i){if(d){i.show()}var m=o.el.getXY(),g=i.dom.style,c=o.el.getSize();g.left=(m[0])+"px";g.top=(m[1])+"px";g.width=(c.width)+"px";g.height=(c.height)+"px"}}else{if(i){if(d){i.show()}i.setSize(n,k);i.setLeftTop(e,p)}}}},destroy:function(){this.hideShim();if(this.shadow){this.shadow.hide()}this.removeAllListeners();Ext.removeNode(this.dom);delete this.dom},remove:function(){this.destroy()},beginUpdate:function(){this.updating=true},endUpdate:function(){this.updating=false;this.sync(true)},hideUnders:function(c){if(this.shadow){this.shadow.hide()}this.hideShim()},constrainXY:function(){if(this.constrain){var k=Ext.lib.Dom.getViewWidth(),d=Ext.lib.Dom.getViewHeight();var p=Ext.getDoc().getScroll();var o=this.getXY();var l=o[0],i=o[1];var c=this.shadowOffset;var m=this.dom.offsetWidth+c,e=this.dom.offsetHeight+c;var g=false;if((l+m)>k+p.left){l=k-m-c;g=true}if((i+e)>d+p.top){i=d-e-c;g=true}if(l<p.left){l=p.left;g=true}if(i<p.top){i=p.top;g=true}if(g){if(this.avoidY){var n=this.avoidY;if(i<=n&&(i+e)>=n){i=n-e-5}}o=[l,i];this.storeXY(o);a.setXY.call(this,o);this.sync()}}return this},getConstrainOffset:function(){return this.shadowOffset},isVisible:function(){return this.visible},showAction:function(){this.visible=true;if(this.useDisplay===true){this.setDisplayed("")}else{if(this.lastXY){a.setXY.call(this,this.lastXY)}else{if(this.lastLT){a.setLeftTop.call(this,this.lastLT[0],this.lastLT[1])}}}},hideAction:function(){this.visible=false;if(this.useDisplay===true){this.setDisplayed(false)}else{this.setLeftTop(-10000,-10000)}},setVisible:function(i,h,l,m,k){if(i){this.showAction()}if(h&&i){var g=function(){this.sync(true);if(m){m()}}.createDelegate(this);a.setVisible.call(this,true,true,l,g,k)}else{if(!i){this.hideUnders(true)}var g=m;if(h){g=function(){this.hideAction();if(m){m()}}.createDelegate(this)}a.setVisible.call(this,i,h,l,g,k);if(i){this.sync(true)}else{if(!h){this.hideAction()}}}return this},storeXY:function(c){delete this.lastLT;this.lastXY=c},storeLeftTop:function(d,c){delete this.lastXY;this.lastLT=[d,c]},beforeFx:function(){this.beforeAction();return Ext.Layer.superclass.beforeFx.apply(this,arguments)},afterFx:function(){Ext.Layer.superclass.afterFx.apply(this,arguments);this.sync(this.isVisible())},beforeAction:function(){if(!this.updating&&this.shadow){this.shadow.hide()}},setLeft:function(c){this.storeLeftTop(c,this.getTop(true));a.setLeft.apply(this,arguments);this.sync();return this},setTop:function(c){this.storeLeftTop(this.getLeft(true),c);a.setTop.apply(this,arguments);this.sync();return this},setLeftTop:function(d,c){this.storeLeftTop(d,c);a.setLeftTop.apply(this,arguments);this.sync();return this},setXY:function(k,h,l,m,i){this.fixDisplay();this.beforeAction();this.storeXY(k);var g=this.createCB(m);a.setXY.call(this,k,h,l,g,i);if(!h){g()}return this},createCB:function(e){var d=this;return function(){d.constrainXY();d.sync(true);if(e){e()}}},setX:function(g,h,k,l,i){this.setXY([g,this.getY()],h,k,l,i);return this},setY:function(l,g,i,k,h){this.setXY([this.getX(),l],g,i,k,h);return this},setSize:function(k,l,i,n,o,m){this.beforeAction();var g=this.createCB(o);a.setSize.call(this,k,l,i,n,g,m);if(!i){g()}return this},setWidth:function(i,h,l,m,k){this.beforeAction();var g=this.createCB(m);a.setWidth.call(this,i,h,l,g,k);if(!h){g()}return this},setHeight:function(k,i,m,n,l){this.beforeAction();var g=this.createCB(n);a.setHeight.call(this,k,i,m,g,l);if(!i){g()}return this},setBounds:function(p,n,q,i,o,l,m,k){this.beforeAction();var g=this.createCB(m);if(!o){this.storeXY([p,n]);a.setXY.call(this,[p,n]);a.setSize.call(this,q,i,o,l,g,k);g()}else{a.setBounds.call(this,p,n,q,i,o,l,g,k)}return this},setZIndex:function(c){this.zindex=c;this.setStyle("z-index",c+2);if(this.shadow){this.shadow.setZIndex(c+1)}if(this.shim){this.shim.setStyle("z-index",c)}return this}})})();Ext.Shadow=function(d){Ext.apply(this,d);if(typeof this.mode!="string"){this.mode=this.defaultMode}var e=this.offset,c={h:0},b=Math.floor(this.offset/2);switch(this.mode.toLowerCase()){case"drop":c.w=0;c.l=c.t=e;c.t-=1;if(Ext.isIE){c.l-=this.offset+b;c.t-=this.offset+b;c.w-=b;c.h-=b;c.t+=1}break;case"sides":c.w=(e*2);c.l=-e;c.t=e-1;if(Ext.isIE){c.l-=(this.offset-b);c.t-=this.offset+b;c.l+=1;c.w-=(this.offset-b)*2;c.w-=b+1;c.h-=1}break;case"frame":c.w=c.h=(e*2);c.l=c.t=-e;c.t+=1;c.h-=2;if(Ext.isIE){c.l-=(this.offset-b);c.t-=(this.offset-b);c.l+=1;c.w-=(this.offset+b+1);c.h-=(this.offset+b);c.h+=1}break}this.adjusts=c};Ext.Shadow.prototype={offset:4,defaultMode:"drop",show:function(a){a=Ext.get(a);if(!this.el){this.el=Ext.Shadow.Pool.pull();if(this.el.dom.nextSibling!=a.dom){this.el.insertBefore(a)}}this.el.setStyle("z-index",this.zIndex||parseInt(a.getStyle("z-index"),10)-1);if(Ext.isIE){this.el.dom.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity=50) progid:DXImageTransform.Microsoft.Blur(pixelradius="+(this.offset)+")"}this.realign(a.getLeft(true),a.getTop(true),a.getWidth(),a.getHeight());this.el.dom.style.display="block"},isVisible:function(){return this.el?true:false},realign:function(b,u,r,g){if(!this.el){return}var o=this.adjusts,m=this.el.dom,v=m.style,i=0,q=(r+o.w),e=(g+o.h),k=q+"px",p=e+"px",n,c;v.left=(b+o.l)+"px";v.top=(u+o.t)+"px";if(v.width!=k||v.height!=p){v.width=k;v.height=p;if(!Ext.isIE){n=m.childNodes;c=Math.max(0,(q-12))+"px";n[0].childNodes[1].style.width=c;n[1].childNodes[1].style.width=c;n[2].childNodes[1].style.width=c;n[1].style.height=Math.max(0,(e-12))+"px"}}},hide:function(){if(this.el){this.el.dom.style.display="none";Ext.Shadow.Pool.push(this.el);delete this.el}},setZIndex:function(a){this.zIndex=a;if(this.el){this.el.setStyle("z-index",a)}}};Ext.Shadow.Pool=function(){var b=[],a=Ext.isIE?'<div class="x-ie-shadow"></div>':'<div class="x-shadow"><div class="xst"><div class="xstl"></div><div class="xstc"></div><div class="xstr"></div></div><div class="xsc"><div class="xsml"></div><div class="xsmc"></div><div class="xsmr"></div></div><div class="xsb"><div class="xsbl"></div><div class="xsbc"></div><div class="xsbr"></div></div></div>';return{pull:function(){var c=b.shift();if(!c){c=Ext.get(Ext.DomHelper.insertHtml("beforeBegin",document.body.firstChild,a));c.autoBoxAdjust=false}return c},push:function(c){b.push(c)}}}();Ext.BoxComponent=Ext.extend(Ext.Component,{initComponent:function(){Ext.BoxComponent.superclass.initComponent.call(this);this.addEvents("resize","move")},boxReady:false,deferHeight:false,setSize:function(b,d){if(typeof b=="object"){d=b.height;b=b.width}if(Ext.isDefined(b)&&Ext.isDefined(this.boxMinWidth)&&(b<this.boxMinWidth)){b=this.boxMinWidth}if(Ext.isDefined(d)&&Ext.isDefined(this.boxMinHeight)&&(d<this.boxMinHeight)){d=this.boxMinHeight}if(Ext.isDefined(b)&&Ext.isDefined(this.boxMaxWidth)&&(b>this.boxMaxWidth)){b=this.boxMaxWidth}if(Ext.isDefined(d)&&Ext.isDefined(this.boxMaxHeight)&&(d>this.boxMaxHeight)){d=this.boxMaxHeight}if(!this.boxReady){this.width=b;this.height=d;return this}if(this.cacheSizes!==false&&this.lastSize&&this.lastSize.width==b&&this.lastSize.height==d){return this}this.lastSize={width:b,height:d};var c=this.adjustSize(b,d),g=c.width,a=c.height,e;if(g!==undefined||a!==undefined){e=this.getResizeEl();if(!this.deferHeight&&g!==undefined&&a!==undefined){e.setSize(g,a)}else{if(!this.deferHeight&&a!==undefined){e.setHeight(a)}else{if(g!==undefined){e.setWidth(g)}}}this.onResize(g,a,b,d);this.fireEvent("resize",this,g,a,b,d)}return this},setWidth:function(a){return this.setSize(a)},setHeight:function(a){return this.setSize(undefined,a)},getSize:function(){return this.getResizeEl().getSize()},getWidth:function(){return this.getResizeEl().getWidth()},getHeight:function(){return this.getResizeEl().getHeight()},getOuterSize:function(){var a=this.getResizeEl();return{width:a.getWidth()+a.getMargins("lr"),height:a.getHeight()+a.getMargins("tb")}},getPosition:function(a){var b=this.getPositionEl();if(a===true){return[b.getLeft(true),b.getTop(true)]}return this.xy||b.getXY()},getBox:function(a){var c=this.getPosition(a);var b=this.getSize();b.x=c[0];b.y=c[1];return b},updateBox:function(a){this.setSize(a.width,a.height);this.setPagePosition(a.x,a.y);return this},getResizeEl:function(){return this.resizeEl||this.el},setAutoScroll:function(a){if(this.rendered){this.getContentTarget().setOverflow(a?"auto":"")}this.autoScroll=a;return this},setPosition:function(a,g){if(a&&typeof a[1]=="number"){g=a[1];a=a[0]}this.x=a;this.y=g;if(!this.boxReady){return this}var b=this.adjustPosition(a,g);var e=b.x,d=b.y;var c=this.getPositionEl();if(e!==undefined||d!==undefined){if(e!==undefined&&d!==undefined){c.setLeftTop(e,d)}else{if(e!==undefined){c.setLeft(e)}else{if(d!==undefined){c.setTop(d)}}}this.onPosition(e,d);this.fireEvent("move",this,e,d)}return this},setPagePosition:function(a,c){if(a&&typeof a[1]=="number"){c=a[1];a=a[0]}this.pageX=a;this.pageY=c;if(!this.boxReady){return}if(a===undefined||c===undefined){return}var b=this.getPositionEl().translatePoints(a,c);this.setPosition(b.left,b.top);return this},afterRender:function(){Ext.BoxComponent.superclass.afterRender.call(this);if(this.resizeEl){this.resizeEl=Ext.get(this.resizeEl)}if(this.positionEl){this.positionEl=Ext.get(this.positionEl)}this.boxReady=true;Ext.isDefined(this.autoScroll)&&this.setAutoScroll(this.autoScroll);this.setSize(this.width,this.height);if(this.x||this.y){this.setPosition(this.x,this.y)}else{if(this.pageX||this.pageY){this.setPagePosition(this.pageX,this.pageY)}}},syncSize:function(){delete this.lastSize;this.setSize(this.autoWidth?undefined:this.getResizeEl().getWidth(),this.autoHeight?undefined:this.getResizeEl().getHeight());return this},onResize:function(d,b,a,c){},onPosition:function(a,b){},adjustSize:function(a,b){if(this.autoWidth){a="auto"}if(this.autoHeight){b="auto"}return{width:a,height:b}},adjustPosition:function(a,b){return{x:a,y:b}}});Ext.reg("box",Ext.BoxComponent);Ext.Spacer=Ext.extend(Ext.BoxComponent,{autoEl:"div"});Ext.reg("spacer",Ext.Spacer);Ext.SplitBar=function(c,e,b,d,a){this.el=Ext.get(c,true);this.el.dom.unselectable="on";this.resizingEl=Ext.get(e,true);this.orientation=b||Ext.SplitBar.HORIZONTAL;this.minSize=0;this.maxSize=2000;this.animate=false;this.useShim=false;this.shim=null;if(!a){this.proxy=Ext.SplitBar.createProxy(this.orientation)}else{this.proxy=Ext.get(a).dom}this.dd=new Ext.dd.DDProxy(this.el.dom.id,"XSplitBars",{dragElId:this.proxy.id});this.dd.b4StartDrag=this.onStartProxyDrag.createDelegate(this);this.dd.endDrag=this.onEndProxyDrag.createDelegate(this);this.dragSpecs={};this.adapter=new Ext.SplitBar.BasicLayoutAdapter();this.adapter.init(this);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.placement=d||(this.el.getX()>this.resizingEl.getX()?Ext.SplitBar.LEFT:Ext.SplitBar.RIGHT);this.el.addClass("x-splitbar-h")}else{this.placement=d||(this.el.getY()>this.resizingEl.getY()?Ext.SplitBar.TOP:Ext.SplitBar.BOTTOM);this.el.addClass("x-splitbar-v")}this.addEvents("resize","moved","beforeresize","beforeapply");Ext.SplitBar.superclass.constructor.call(this)};Ext.extend(Ext.SplitBar,Ext.util.Observable,{onStartProxyDrag:function(a,e){this.fireEvent("beforeresize",this);this.overlay=Ext.DomHelper.append(document.body,{cls:"x-drag-overlay",html:" "},true);this.overlay.unselectable();this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.overlay.show();Ext.get(this.proxy).setDisplayed("block");var c=this.adapter.getElementSize(this);this.activeMinSize=this.getMinimumSize();this.activeMaxSize=this.getMaximumSize();var d=c-this.activeMinSize;var b=Math.max(this.activeMaxSize-c,0);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.dd.resetConstraints();this.dd.setXConstraint(this.placement==Ext.SplitBar.LEFT?d:b,this.placement==Ext.SplitBar.LEFT?b:d,this.tickSize);this.dd.setYConstraint(0,0)}else{this.dd.resetConstraints();this.dd.setXConstraint(0,0);this.dd.setYConstraint(this.placement==Ext.SplitBar.TOP?d:b,this.placement==Ext.SplitBar.TOP?b:d,this.tickSize)}this.dragSpecs.startSize=c;this.dragSpecs.startPoint=[a,e];Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd,a,e)},onEndProxyDrag:function(c){Ext.get(this.proxy).setDisplayed(false);var b=Ext.lib.Event.getXY(c);if(this.overlay){Ext.destroy(this.overlay);delete this.overlay}var a;if(this.orientation==Ext.SplitBar.HORIZONTAL){a=this.dragSpecs.startSize+(this.placement==Ext.SplitBar.LEFT?b[0]-this.dragSpecs.startPoint[0]:this.dragSpecs.startPoint[0]-b[0])}else{a=this.dragSpecs.startSize+(this.placement==Ext.SplitBar.TOP?b[1]-this.dragSpecs.startPoint[1]:this.dragSpecs.startPoint[1]-b[1])}a=Math.min(Math.max(a,this.activeMinSize),this.activeMaxSize);if(a!=this.dragSpecs.startSize){if(this.fireEvent("beforeapply",this,a)!==false){this.adapter.setElementSize(this,a);this.fireEvent("moved",this,a);this.fireEvent("resize",this,a)}}},getAdapter:function(){return this.adapter},setAdapter:function(a){this.adapter=a;this.adapter.init(this)},getMinimumSize:function(){return this.minSize},setMinimumSize:function(a){this.minSize=a},getMaximumSize:function(){return this.maxSize},setMaximumSize:function(a){this.maxSize=a},setCurrentSize:function(b){var a=this.animate;this.animate=false;this.adapter.setElementSize(this,b);this.animate=a},destroy:function(a){Ext.destroy(this.shim,Ext.get(this.proxy));this.dd.unreg();if(a){this.el.remove()}this.purgeListeners()}});Ext.SplitBar.createProxy=function(b){var c=new Ext.Element(document.createElement("div"));document.body.appendChild(c.dom);c.unselectable();var a="x-splitbar-proxy";c.addClass(a+" "+(b==Ext.SplitBar.HORIZONTAL?a+"-h":a+"-v"));return c.dom};Ext.SplitBar.BasicLayoutAdapter=function(){};Ext.SplitBar.BasicLayoutAdapter.prototype={init:function(a){},getElementSize:function(a){if(a.orientation==Ext.SplitBar.HORIZONTAL){return a.resizingEl.getWidth()}else{return a.resizingEl.getHeight()}},setElementSize:function(b,a,c){if(b.orientation==Ext.SplitBar.HORIZONTAL){if(!b.animate){b.resizingEl.setWidth(a);if(c){c(b,a)}}else{b.resizingEl.setWidth(a,true,0.1,c,"easeOut")}}else{if(!b.animate){b.resizingEl.setHeight(a);if(c){c(b,a)}}else{b.resizingEl.setHeight(a,true,0.1,c,"easeOut")}}}};Ext.SplitBar.AbsoluteLayoutAdapter=function(a){this.basic=new Ext.SplitBar.BasicLayoutAdapter();this.container=Ext.get(a)};Ext.SplitBar.AbsoluteLayoutAdapter.prototype={init:function(a){this.basic.init(a)},getElementSize:function(a){return this.basic.getElementSize(a)},setElementSize:function(b,a,c){this.basic.setElementSize(b,a,this.moveSplitter.createDelegate(this,[b]))},moveSplitter:function(a){var b=Ext.SplitBar;switch(a.placement){case b.LEFT:a.el.setX(a.resizingEl.getRight());break;case b.RIGHT:a.el.setStyle("right",(this.container.getWidth()-a.resizingEl.getLeft())+"px");break;case b.TOP:a.el.setY(a.resizingEl.getBottom());break;case b.BOTTOM:a.el.setY(a.resizingEl.getTop()-a.el.getHeight());break}}};Ext.SplitBar.VERTICAL=1;Ext.SplitBar.HORIZONTAL=2;Ext.SplitBar.LEFT=1;Ext.SplitBar.RIGHT=2;Ext.SplitBar.TOP=3;Ext.SplitBar.BOTTOM=4;Ext.Container=Ext.extend(Ext.BoxComponent,{bufferResize:50,autoDestroy:true,forceLayout:false,defaultType:"panel",resizeEvent:"resize",bubbleEvents:["add","remove"],initComponent:function(){Ext.Container.superclass.initComponent.call(this);this.addEvents("afterlayout","beforeadd","beforeremove","add","remove");var a=this.items;if(a){delete this.items;this.add(a)}},initItems:function(){if(!this.items){this.items=new Ext.util.MixedCollection(false,this.getComponentId);this.getLayout()}},setLayout:function(a){if(this.layout&&this.layout!=a){this.layout.setContainer(null)}this.layout=a;this.initItems();a.setContainer(this)},afterRender:function(){Ext.Container.superclass.afterRender.call(this);if(!this.layout){this.layout="auto"}if(Ext.isObject(this.layout)&&!this.layout.layout){this.layoutConfig=this.layout;this.layout=this.layoutConfig.type}if(Ext.isString(this.layout)){this.layout=new Ext.Container.LAYOUTS[this.layout.toLowerCase()](this.layoutConfig)}this.setLayout(this.layout);if(this.activeItem!==undefined&&this.layout.setActiveItem){var a=this.activeItem;delete this.activeItem;this.layout.setActiveItem(a)}if(!this.ownerCt){this.doLayout(false,true)}if(this.monitorResize===true){Ext.EventManager.onWindowResize(this.doLayout,this,[false])}},getLayoutTarget:function(){return this.el},getComponentId:function(a){return a.getItemId()},add:function(b){this.initItems();var e=arguments.length>1;if(e||Ext.isArray(b)){var a=[];Ext.each(e?arguments:b,function(h){a.push(this.add(h))},this);return a}var g=this.lookupComponent(this.applyDefaults(b));var d=this.items.length;if(this.fireEvent("beforeadd",this,g,d)!==false&&this.onBeforeAdd(g)!==false){this.items.add(g);g.onAdded(this,d);this.onAdd(g);this.fireEvent("add",this,g,d)}return g},onAdd:function(a){},onAdded:function(a,b){this.ownerCt=a;this.initRef();this.cascade(function(d){d.initRef()});this.fireEvent("added",this,a,b)},insert:function(e,b){var d=arguments,h=d.length,a=[],g,k;this.initItems();if(h>2){for(g=h-1;g>=1;--g){a.push(this.insert(e,d[g]))}return a}k=this.lookupComponent(this.applyDefaults(b));e=Math.min(e,this.items.length);if(this.fireEvent("beforeadd",this,k,e)!==false&&this.onBeforeAdd(k)!==false){if(k.ownerCt==this){this.items.remove(k)}this.items.insert(e,k);k.onAdded(this,e);this.onAdd(k);this.fireEvent("add",this,k,e)}return k},applyDefaults:function(b){var a=this.defaults;if(a){if(Ext.isFunction(a)){a=a.call(this,b)}if(Ext.isString(b)){b=Ext.ComponentMgr.get(b);Ext.apply(b,a)}else{if(!b.events){Ext.applyIf(b.isAction?b.initialConfig:b,a)}else{Ext.apply(b,a)}}}return b},onBeforeAdd:function(a){if(a.ownerCt){a.ownerCt.remove(a,false)}if(this.hideBorders===true){a.border=(a.border===true)}},remove:function(a,b){this.initItems();var d=this.getComponent(a);if(d&&this.fireEvent("beforeremove",this,d)!==false){this.doRemove(d,b);this.fireEvent("remove",this,d)}return d},onRemove:function(a){},doRemove:function(e,d){var b=this.layout,a=b&&this.rendered;if(a){b.onRemove(e)}this.items.remove(e);e.onRemoved();this.onRemove(e);if(d===true||(d!==false&&this.autoDestroy)){e.destroy()}if(a){b.afterRemove(e)}},removeAll:function(c){this.initItems();var e,g=[],b=[];this.items.each(function(h){g.push(h)});for(var d=0,a=g.length;d<a;++d){e=g[d];this.remove(e,c);if(e.ownerCt!==this){b.push(e)}}return b},getComponent:function(a){if(Ext.isObject(a)){a=a.getItemId()}return this.items.get(a)},lookupComponent:function(a){if(Ext.isString(a)){return Ext.ComponentMgr.get(a)}else{if(!a.events){return this.createComponent(a)}}return a},createComponent:function(a,d){if(a.render){return a}var b=Ext.create(Ext.apply({ownerCt:this},a),d||this.defaultType);delete b.initialConfig.ownerCt;delete b.ownerCt;return b},canLayout:function(){var a=this.getVisibilityEl();return a&&a.dom&&!a.isStyle("display","none")},doLayout:function(g,e){var l=this.rendered,k=e||this.forceLayout;if(this.collapsed||!this.canLayout()){this.deferLayout=this.deferLayout||!g;if(!k){return}g=g&&!this.deferLayout}else{delete this.deferLayout}if(l&&this.layout){this.layout.layout()}if(g!==true&&this.items){var d=this.items.items;for(var b=0,a=d.length;b<a;b++){var h=d[b];if(h.doLayout){h.doLayout(false,k)}}}if(l){this.onLayout(g,k)}this.hasLayout=true;delete this.forceLayout},onLayout:Ext.emptyFn,shouldBufferLayout:function(){var a=this.hasLayout;if(this.ownerCt){return a?!this.hasLayoutPending():false}return a},hasLayoutPending:function(){var a=false;this.ownerCt.bubble(function(b){if(b.layoutPending){a=true;return false}});return a},onShow:function(){Ext.Container.superclass.onShow.call(this);if(Ext.isDefined(this.deferLayout)){delete this.deferLayout;this.doLayout(true)}},getLayout:function(){if(!this.layout){var a=new Ext.layout.AutoLayout(this.layoutConfig);this.setLayout(a)}return this.layout},beforeDestroy:function(){var a;if(this.items){while(a=this.items.first()){this.doRemove(a,true)}}if(this.monitorResize){Ext.EventManager.removeResizeListener(this.doLayout,this)}Ext.destroy(this.layout);Ext.Container.superclass.beforeDestroy.call(this)},cascade:function(g,e,b){if(g.apply(e||this,b||[this])!==false){if(this.items){var d=this.items.items;for(var c=0,a=d.length;c<a;c++){if(d[c].cascade){d[c].cascade(g,e,b)}else{g.apply(e||d[c],b||[d[c]])}}}}return this},findById:function(c){var a=null,b=this;this.cascade(function(d){if(b!=d&&d.id===c){a=d;return false}});return a},findByType:function(b,a){return this.findBy(function(d){return d.isXType(b,a)})},find:function(b,a){return this.findBy(function(d){return d[b]===a})},findBy:function(d,c){var a=[],b=this;this.cascade(function(e){if(b!=e&&d.call(c||e,e,b)===true){a.push(e)}});return a},get:function(a){return this.getComponent(a)}});Ext.Container.LAYOUTS={};Ext.reg("container",Ext.Container);Ext.layout.ContainerLayout=Ext.extend(Object,{monitorResize:false,activeItem:null,constructor:function(a){this.id=Ext.id(null,"ext-layout-");Ext.apply(this,a)},type:"container",IEMeasureHack:function(l,g){var a=l.dom.childNodes,b=a.length,o,n=[],m,h,k;for(h=0;h<b;h++){o=a[h];m=Ext.get(o);if(m){n[h]=m.getStyle("display");m.setStyle({display:"none"})}}k=l?l.getViewSize(g):{};for(h=0;h<b;h++){o=a[h];m=Ext.get(o);if(m){m.setStyle({display:n[h]})}}return k},getLayoutTargetSize:Ext.EmptyFn,layout:function(){var a=this.container,b=a.getLayoutTarget();if(!(this.hasLayout||Ext.isEmpty(this.targetCls))){b.addClass(this.targetCls)}this.onLayout(a,b);a.fireEvent("afterlayout",a,this)},onLayout:function(a,b){this.renderAll(a,b)},isValidParent:function(b,a){return a&&b.getPositionEl().dom.parentNode==(a.dom||a)},renderAll:function(e,g){var b=e.items.items,d,h,a=b.length;for(d=0;d<a;d++){h=b[d];if(h&&(!h.rendered||!this.isValidParent(h,g))){this.renderItem(h,d,g)}}},renderItem:function(d,a,b){if(d){if(!d.rendered){d.render(b,a);this.configureItem(d)}else{if(!this.isValidParent(d,b)){if(Ext.isNumber(a)){a=b.dom.childNodes[a]}b.dom.insertBefore(d.getPositionEl().dom,a||null);d.container=b;this.configureItem(d)}}}},getRenderedItems:function(g){var e=g.getLayoutTarget(),h=g.items.items,a=h.length,d,k,b=[];for(d=0;d<a;d++){if((k=h[d]).rendered&&this.isValidParent(k,e)&&k.shouldLayout!==false){b.push(k)}}return b},configureItem:function(b){if(this.extraCls){var a=b.getPositionEl?b.getPositionEl():b;a.addClass(this.extraCls)}if(b.doLayout&&this.forceLayout){b.doLayout()}if(this.renderHidden&&b!=this.activeItem){b.hide()}},onRemove:function(b){if(this.activeItem==b){delete this.activeItem}if(b.rendered&&this.extraCls){var a=b.getPositionEl?b.getPositionEl():b;a.removeClass(this.extraCls)}},afterRemove:function(a){if(a.removeRestore){a.removeMode="container";delete a.removeRestore}},onResize:function(){var c=this.container,a;if(c.collapsed){return}if(a=c.bufferResize&&c.shouldBufferLayout()){if(!this.resizeTask){this.resizeTask=new Ext.util.DelayedTask(this.runLayout,this);this.resizeBuffer=Ext.isNumber(a)?a:50}c.layoutPending=true;this.resizeTask.delay(this.resizeBuffer)}else{this.runLayout()}},runLayout:function(){var a=this.container;this.layout();a.onLayout();delete a.layoutPending},setContainer:function(b){if(this.monitorResize&&b!=this.container){var a=this.container;if(a){a.un(a.resizeEvent,this.onResize,this)}if(b){b.on(b.resizeEvent,this.onResize,this)}}this.container=b},parseMargins:function(b){if(Ext.isNumber(b)){b=b.toString()}var c=b.split(" "),a=c.length;if(a==1){c[1]=c[2]=c[3]=c[0]}else{if(a==2){c[2]=c[0];c[3]=c[1]}else{if(a==3){c[3]=c[1]}}}return{top:parseInt(c[0],10)||0,right:parseInt(c[1],10)||0,bottom:parseInt(c[2],10)||0,left:parseInt(c[3],10)||0}},fieldTpl:(function(){var a=new Ext.Template('<div class="x-form-item {itemCls}" tabIndex="-1">','<label for="{id}" style="{labelStyle}" class="x-form-item-label">{label}{labelSeparator}</label>','<div class="x-form-element" id="x-form-el-{id}" style="{elementStyle}">','</div><div class="{clearCls}"></div>',"</div>");a.disableFormats=true;return a.compile()})(),destroy:function(){if(this.resizeTask&&this.resizeTask.cancel){this.resizeTask.cancel()}if(this.container){this.container.un(this.container.resizeEvent,this.onResize,this)}if(!Ext.isEmpty(this.targetCls)){var a=this.container.getLayoutTarget();if(a){a.removeClass(this.targetCls)}}}});Ext.layout.AutoLayout=Ext.extend(Ext.layout.ContainerLayout,{type:"auto",monitorResize:true,onLayout:function(d,g){Ext.layout.AutoLayout.superclass.onLayout.call(this,d,g);var e=this.getRenderedItems(d),a=e.length,b,h;for(b=0;b<a;b++){h=e[b];if(h.doLayout){h.doLayout(true)}}}});Ext.Container.LAYOUTS.auto=Ext.layout.AutoLayout;Ext.layout.FitLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,type:"fit",getLayoutTargetSize:function(){var a=this.container.getLayoutTarget();if(!a){return{}}return a.getStyleSize()},onLayout:function(a,b){Ext.layout.FitLayout.superclass.onLayout.call(this,a,b);if(!a.collapsed){this.setItemSize(this.activeItem||a.items.itemAt(0),this.getLayoutTargetSize())}},setItemSize:function(b,a){if(b&&a.height>0){b.setSize(a)}}});Ext.Container.LAYOUTS.fit=Ext.layout.FitLayout;Ext.layout.CardLayout=Ext.extend(Ext.layout.FitLayout,{deferredRender:false,layoutOnCardChange:false,renderHidden:true,type:"card",setActiveItem:function(d){var a=this.activeItem,b=this.container;d=b.getComponent(d);if(d&&a!=d){if(a){a.hide();if(a.hidden!==true){return false}a.fireEvent("deactivate",a)}var c=d.doLayout&&(this.layoutOnCardChange||!d.rendered);this.activeItem=d;delete d.deferLayout;d.show();this.layout();if(c){d.doLayout()}d.fireEvent("activate",d)}},renderAll:function(a,b){if(this.deferredRender){this.renderItem(this.activeItem,undefined,b)}else{Ext.layout.CardLayout.superclass.renderAll.call(this,a,b)}}});Ext.Container.LAYOUTS.card=Ext.layout.CardLayout;Ext.layout.AnchorLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,type:"anchor",defaultAnchor:"100%",parseAnchorRE:/^(r|right|b|bottom)$/i,getLayoutTargetSize:function(){var b=this.container.getLayoutTarget(),a={};if(b){a=b.getViewSize();if(Ext.isIE&&Ext.isStrict&&a.width==0){a=b.getStyleSize()}a.width-=b.getPadding("lr");a.height-=b.getPadding("tb")}return a},onLayout:function(n,x){Ext.layout.AnchorLayout.superclass.onLayout.call(this,n,x);var q=this.getLayoutTargetSize(),l=q.width,p=q.height,r=x.getStyle("overflow"),o=this.getRenderedItems(n),u=o.length,g=[],k,a,w,m,h,c,e,d,v=0,t,b;if(l<20&&p<20){return}if(n.anchorSize){if(typeof n.anchorSize=="number"){a=n.anchorSize}else{a=n.anchorSize.width;w=n.anchorSize.height}}else{a=n.initialConfig.width;w=n.initialConfig.height}for(t=0;t<u;t++){m=o[t];b=m.getPositionEl();if(!m.anchor&&m.items&&!Ext.isNumber(m.width)&&!(Ext.isIE6&&Ext.isStrict)){m.anchor=this.defaultAnchor}if(m.anchor){h=m.anchorSpec;if(!h){d=m.anchor.split(" ");m.anchorSpec=h={right:this.parseAnchor(d[0],m.initialConfig.width,a),bottom:this.parseAnchor(d[1],m.initialConfig.height,w)}}c=h.right?this.adjustWidthAnchor(h.right(l)-b.getMargins("lr"),m):undefined;e=h.bottom?this.adjustHeightAnchor(h.bottom(p)-b.getMargins("tb"),m):undefined;if(c||e){g.push({component:m,width:c||undefined,height:e||undefined})}}}for(t=0,u=g.length;t<u;t++){k=g[t];k.component.setSize(k.width,k.height)}if(r&&r!="hidden"&&!this.adjustmentPass){var s=this.getLayoutTargetSize();if(s.width!=q.width||s.height!=q.height){this.adjustmentPass=true;this.onLayout(n,x)}}delete this.adjustmentPass},parseAnchor:function(c,h,b){if(c&&c!="none"){var e;if(this.parseAnchorRE.test(c)){var g=b-h;return function(a){if(a!==e){e=a;return a-g}}}else{if(c.indexOf("%")!=-1){var d=parseFloat(c.replace("%",""))*0.01;return function(a){if(a!==e){e=a;return Math.floor(a*d)}}}else{c=parseInt(c,10);if(!isNaN(c)){return function(a){if(a!==e){e=a;return a+c}}}}}}return false},adjustWidthAnchor:function(b,a){return b},adjustHeightAnchor:function(b,a){return b}});Ext.Container.LAYOUTS.anchor=Ext.layout.AnchorLayout;Ext.layout.ColumnLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,type:"column",extraCls:"x-column",scrollOffset:0,targetCls:"x-column-layout-ct",isValidParent:function(b,a){return this.innerCt&&b.getPositionEl().dom.parentNode==this.innerCt.dom},getLayoutTargetSize:function(){var b=this.container.getLayoutTarget(),a;if(b){a=b.getViewSize();if(Ext.isIE&&Ext.isStrict&&a.width==0){a=b.getStyleSize()}a.width-=b.getPadding("lr");a.height-=b.getPadding("tb")}return a},renderAll:function(a,b){if(!this.innerCt){this.innerCt=b.createChild({cls:"x-column-inner"});this.innerCt.createChild({cls:"x-clear"})}Ext.layout.ColumnLayout.superclass.renderAll.call(this,a,this.innerCt)},onLayout:function(e,l){var g=e.items.items,k=g.length,o,b,a,p=[];this.renderAll(e,l);var s=this.getLayoutTargetSize();if(s.width<1&&s.height<1){return}var q=s.width-this.scrollOffset,d=s.height,r=q;this.innerCt.setWidth(q);for(b=0;b<k;b++){o=g[b];a=o.getPositionEl().getMargins("lr");p[b]=a;if(!o.columnWidth){r-=(o.getWidth()+a)}}r=r<0?0:r;for(b=0;b<k;b++){o=g[b];a=p[b];if(o.columnWidth){o.setSize(Math.floor(o.columnWidth*r)-a)}}if(Ext.isIE){if(b=l.getStyle("overflow")&&b!="hidden"&&!this.adjustmentPass){var n=this.getLayoutTargetSize();if(n.width!=s.width){this.adjustmentPass=true;this.onLayout(e,l)}}}delete this.adjustmentPass}});Ext.Container.LAYOUTS.column=Ext.layout.ColumnLayout;Ext.layout.BorderLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,rendered:false,type:"border",targetCls:"x-border-layout-ct",getLayoutTargetSize:function(){var a=this.container.getLayoutTarget();return a?a.getViewSize():{}},onLayout:function(g,J){var k,C,G,p,y=g.items.items,D=y.length;if(!this.rendered){k=[];for(C=0;C<D;C++){G=y[C];p=G.region;if(G.collapsed){k.push(G)}G.collapsed=false;if(!G.rendered){G.render(J,C);G.getPositionEl().addClass("x-border-panel")}this[p]=p!="center"&&G.split?new Ext.layout.BorderLayout.SplitRegion(this,G.initialConfig,p):new Ext.layout.BorderLayout.Region(this,G.initialConfig,p);this[p].render(J,G)}this.rendered=true}var x=this.getLayoutTargetSize();if(x.width<20||x.height<20){if(k){this.restoreCollapsed=k}return}else{if(this.restoreCollapsed){k=this.restoreCollapsed;delete this.restoreCollapsed}}var u=x.width,E=x.height,t=u,B=E,q=0,r=0,z=this.north,v=this.south,o=this.west,F=this.east,G=this.center,I,A,d,H;if(!G&&Ext.layout.BorderLayout.WARN!==false){throw"No center region defined in BorderLayout "+g.id}if(z&&z.isVisible()){I=z.getSize();A=z.getMargins();I.width=u-(A.left+A.right);I.x=A.left;I.y=A.top;q=I.height+I.y+A.bottom;B-=q;z.applyLayout(I)}if(v&&v.isVisible()){I=v.getSize();A=v.getMargins();I.width=u-(A.left+A.right);I.x=A.left;H=(I.height+A.top+A.bottom);I.y=E-H+A.top;B-=H;v.applyLayout(I)}if(o&&o.isVisible()){I=o.getSize();A=o.getMargins();I.height=B-(A.top+A.bottom);I.x=A.left;I.y=q+A.top;d=(I.width+A.left+A.right);r+=d;t-=d;o.applyLayout(I)}if(F&&F.isVisible()){I=F.getSize();A=F.getMargins();I.height=B-(A.top+A.bottom);d=(I.width+A.left+A.right);I.x=u-d+A.left;I.y=q+A.top;t-=d;F.applyLayout(I)}if(G){A=G.getMargins();var l={x:r+A.left,y:q+A.top,width:t-(A.left+A.right),height:B-(A.top+A.bottom)};G.applyLayout(l)}if(k){for(C=0,D=k.length;C<D;C++){k[C].collapse(false)}}if(Ext.isIE&&Ext.isStrict){J.repaint()}if(C=J.getStyle("overflow")&&C!="hidden"&&!this.adjustmentPass){var a=this.getLayoutTargetSize();if(a.width!=x.width||a.height!=x.height){this.adjustmentPass=true;this.onLayout(g,J)}}delete this.adjustmentPass},destroy:function(){var b=["north","south","east","west"],a,c;for(a=0;a<b.length;a++){c=this[b[a]];if(c){if(c.destroy){c.destroy()}else{if(c.split){c.split.destroy(true)}}}}Ext.layout.BorderLayout.superclass.destroy.call(this)}});Ext.layout.BorderLayout.Region=function(b,a,c){Ext.apply(this,a);this.layout=b;this.position=c;this.state={};if(typeof this.margins=="string"){this.margins=this.layout.parseMargins(this.margins)}this.margins=Ext.applyIf(this.margins||{},this.defaultMargins);if(this.collapsible){if(typeof this.cmargins=="string"){this.cmargins=this.layout.parseMargins(this.cmargins)}if(this.collapseMode=="mini"&&!this.cmargins){this.cmargins={left:0,top:0,right:0,bottom:0}}else{this.cmargins=Ext.applyIf(this.cmargins||{},c=="north"||c=="south"?this.defaultNSCMargins:this.defaultEWCMargins)}}};Ext.layout.BorderLayout.Region.prototype={collapsible:false,split:false,floatable:true,minWidth:50,minHeight:50,defaultMargins:{left:0,top:0,right:0,bottom:0},defaultNSCMargins:{left:5,top:5,right:5,bottom:5},defaultEWCMargins:{left:5,top:0,right:5,bottom:0},floatingZIndex:100,isCollapsed:false,render:function(b,c){this.panel=c;c.el.enableDisplayMode();this.targetEl=b;this.el=c.el;var a=c.getState,d=this.position;c.getState=function(){return Ext.apply(a.call(c)||{},this.state)}.createDelegate(this);if(d!="center"){c.allowQueuedExpand=false;c.on({beforecollapse:this.beforeCollapse,collapse:this.onCollapse,beforeexpand:this.beforeExpand,expand:this.onExpand,hide:this.onHide,show:this.onShow,scope:this});if(this.collapsible||this.floatable){c.collapseEl="el";c.slideAnchor=this.getSlideAnchor()}if(c.tools&&c.tools.toggle){c.tools.toggle.addClass("x-tool-collapse-"+d);c.tools.toggle.addClassOnOver("x-tool-collapse-"+d+"-over")}}},getCollapsedEl:function(){if(!this.collapsedEl){if(!this.toolTemplate){var b=new Ext.Template('<div class="x-tool x-tool-{id}"> </div>');b.disableFormats=true;b.compile();Ext.layout.BorderLayout.Region.prototype.toolTemplate=b}this.collapsedEl=this.targetEl.createChild({cls:"x-layout-collapsed x-layout-collapsed-"+this.position,id:this.panel.id+"-xcollapsed"});this.collapsedEl.enableDisplayMode("block");if(this.collapseMode=="mini"){this.collapsedEl.addClass("x-layout-cmini-"+this.position);this.miniCollapsedEl=this.collapsedEl.createChild({cls:"x-layout-mini x-layout-mini-"+this.position,html:" "});this.miniCollapsedEl.addClassOnOver("x-layout-mini-over");this.collapsedEl.addClassOnOver("x-layout-collapsed-over");this.collapsedEl.on("click",this.onExpandClick,this,{stopEvent:true})}else{if(this.collapsible!==false&&!this.hideCollapseTool){var a=this.expandToolEl=this.toolTemplate.append(this.collapsedEl.dom,{id:"expand-"+this.position},true);a.addClassOnOver("x-tool-expand-"+this.position+"-over");a.on("click",this.onExpandClick,this,{stopEvent:true})}if(this.floatable!==false||this.titleCollapse){this.collapsedEl.addClassOnOver("x-layout-collapsed-over");this.collapsedEl.on("click",this[this.floatable?"collapseClick":"onExpandClick"],this)}}}return this.collapsedEl},onExpandClick:function(a){if(this.isSlid){this.panel.expand(false)}else{this.panel.expand()}},onCollapseClick:function(a){this.panel.collapse()},beforeCollapse:function(c,a){this.lastAnim=a;if(this.splitEl){this.splitEl.hide()}this.getCollapsedEl().show();var b=this.panel.getEl();this.originalZIndex=b.getStyle("z-index");b.setStyle("z-index",100);this.isCollapsed=true;this.layout.layout()},onCollapse:function(a){this.panel.el.setStyle("z-index",1);if(this.lastAnim===false||this.panel.animCollapse===false){this.getCollapsedEl().dom.style.visibility="visible"}else{this.getCollapsedEl().slideIn(this.panel.slideAnchor,{duration:0.2})}this.state.collapsed=true;this.panel.saveState()},beforeExpand:function(a){if(this.isSlid){this.afterSlideIn()}var b=this.getCollapsedEl();this.el.show();if(this.position=="east"||this.position=="west"){this.panel.setSize(undefined,b.getHeight())}else{this.panel.setSize(b.getWidth(),undefined)}b.hide();b.dom.style.visibility="hidden";this.panel.el.setStyle("z-index",this.floatingZIndex)},onExpand:function(){this.isCollapsed=false;if(this.splitEl){this.splitEl.show()}this.layout.layout();this.panel.el.setStyle("z-index",this.originalZIndex);this.state.collapsed=false;this.panel.saveState()},collapseClick:function(a){if(this.isSlid){a.stopPropagation();this.slideIn()}else{a.stopPropagation();this.slideOut()}},onHide:function(){if(this.isCollapsed){this.getCollapsedEl().hide()}else{if(this.splitEl){this.splitEl.hide()}}},onShow:function(){if(this.isCollapsed){this.getCollapsedEl().show()}else{if(this.splitEl){this.splitEl.show()}}},isVisible:function(){return !this.panel.hidden},getMargins:function(){return this.isCollapsed&&this.cmargins?this.cmargins:this.margins},getSize:function(){return this.isCollapsed?this.getCollapsedEl().getSize():this.panel.getSize()},setPanel:function(a){this.panel=a},getMinWidth:function(){return this.minWidth},getMinHeight:function(){return this.minHeight},applyLayoutCollapsed:function(a){var b=this.getCollapsedEl();b.setLeftTop(a.x,a.y);b.setSize(a.width,a.height)},applyLayout:function(a){if(this.isCollapsed){this.applyLayoutCollapsed(a)}else{this.panel.setPosition(a.x,a.y);this.panel.setSize(a.width,a.height)}},beforeSlide:function(){this.panel.beforeEffect()},afterSlide:function(){this.panel.afterEffect()},initAutoHide:function(){if(this.autoHide!==false){if(!this.autoHideHd){this.autoHideSlideTask=new Ext.util.DelayedTask(this.slideIn,this);this.autoHideHd={mouseout:function(a){if(!a.within(this.el,true)){this.autoHideSlideTask.delay(500)}},mouseover:function(a){this.autoHideSlideTask.cancel()},scope:this}}this.el.on(this.autoHideHd);this.collapsedEl.on(this.autoHideHd)}},clearAutoHide:function(){if(this.autoHide!==false){this.el.un("mouseout",this.autoHideHd.mouseout);this.el.un("mouseover",this.autoHideHd.mouseover);this.collapsedEl.un("mouseout",this.autoHideHd.mouseout);this.collapsedEl.un("mouseover",this.autoHideHd.mouseover)}},clearMonitor:function(){Ext.getDoc().un("click",this.slideInIf,this)},slideOut:function(){if(this.isSlid||this.el.hasActiveFx()){return}this.isSlid=true;var b=this.panel.tools,c,a;if(b&&b.toggle){b.toggle.hide()}this.el.show();a=this.panel.collapsed;this.panel.collapsed=false;if(this.position=="east"||this.position=="west"){c=this.panel.deferHeight;this.panel.deferHeight=false;this.panel.setSize(undefined,this.collapsedEl.getHeight());this.panel.deferHeight=c}else{this.panel.setSize(this.collapsedEl.getWidth(),undefined)}this.panel.collapsed=a;this.restoreLT=[this.el.dom.style.left,this.el.dom.style.top];this.el.alignTo(this.collapsedEl,this.getCollapseAnchor());this.el.setStyle("z-index",this.floatingZIndex+2);this.panel.el.replaceClass("x-panel-collapsed","x-panel-floating");if(this.animFloat!==false){this.beforeSlide();this.el.slideIn(this.getSlideAnchor(),{callback:function(){this.afterSlide();this.initAutoHide();Ext.getDoc().on("click",this.slideInIf,this)},scope:this,block:true})}else{this.initAutoHide();Ext.getDoc().on("click",this.slideInIf,this)}},afterSlideIn:function(){this.clearAutoHide();this.isSlid=false;this.clearMonitor();this.el.setStyle("z-index","");this.panel.el.replaceClass("x-panel-floating","x-panel-collapsed");this.el.dom.style.left=this.restoreLT[0];this.el.dom.style.top=this.restoreLT[1];var a=this.panel.tools;if(a&&a.toggle){a.toggle.show()}},slideIn:function(a){if(!this.isSlid||this.el.hasActiveFx()){Ext.callback(a);return}this.isSlid=false;if(this.animFloat!==false){this.beforeSlide();this.el.slideOut(this.getSlideAnchor(),{callback:function(){this.el.hide();this.afterSlide();this.afterSlideIn();Ext.callback(a)},scope:this,block:true})}else{this.el.hide();this.afterSlideIn()}},slideInIf:function(a){if(!a.within(this.el)){this.slideIn()}},anchors:{west:"left",east:"right",north:"top",south:"bottom"},sanchors:{west:"l",east:"r",north:"t",south:"b"},canchors:{west:"tl-tr",east:"tr-tl",north:"tl-bl",south:"bl-tl"},getAnchor:function(){return this.anchors[this.position]},getCollapseAnchor:function(){return this.canchors[this.position]},getSlideAnchor:function(){return this.sanchors[this.position]},getAlignAdj:function(){var a=this.cmargins;switch(this.position){case"west":return[0,0];break;case"east":return[0,0];break;case"north":return[0,0];break;case"south":return[0,0];break}},getExpandAdj:function(){var b=this.collapsedEl,a=this.cmargins;switch(this.position){case"west":return[-(a.right+b.getWidth()+a.left),0];break;case"east":return[a.right+b.getWidth()+a.left,0];break;case"north":return[0,-(a.top+a.bottom+b.getHeight())];break;case"south":return[0,a.top+a.bottom+b.getHeight()];break}},destroy:function(){if(this.autoHideSlideTask&&this.autoHideSlideTask.cancel){this.autoHideSlideTask.cancel()}Ext.destroyMembers(this,"miniCollapsedEl","collapsedEl","expandToolEl")}};Ext.layout.BorderLayout.SplitRegion=function(b,a,c){Ext.layout.BorderLayout.SplitRegion.superclass.constructor.call(this,b,a,c);this.applyLayout=this.applyFns[c]};Ext.extend(Ext.layout.BorderLayout.SplitRegion,Ext.layout.BorderLayout.Region,{splitTip:"Drag to resize.",collapsibleSplitTip:"Drag to resize. Double click to hide.",useSplitTips:false,splitSettings:{north:{orientation:Ext.SplitBar.VERTICAL,placement:Ext.SplitBar.TOP,maxFn:"getVMaxSize",minProp:"minHeight",maxProp:"maxHeight"},south:{orientation:Ext.SplitBar.VERTICAL,placement:Ext.SplitBar.BOTTOM,maxFn:"getVMaxSize",minProp:"minHeight",maxProp:"maxHeight"},east:{orientation:Ext.SplitBar.HORIZONTAL,placement:Ext.SplitBar.RIGHT,maxFn:"getHMaxSize",minProp:"minWidth",maxProp:"maxWidth"},west:{orientation:Ext.SplitBar.HORIZONTAL,placement:Ext.SplitBar.LEFT,maxFn:"getHMaxSize",minProp:"minWidth",maxProp:"maxWidth"}},applyFns:{west:function(c){if(this.isCollapsed){return this.applyLayoutCollapsed(c)}var d=this.splitEl.dom,b=d.style;this.panel.setPosition(c.x,c.y);var a=d.offsetWidth;b.left=(c.x+c.width-a)+"px";b.top=(c.y)+"px";b.height=Math.max(0,c.height)+"px";this.panel.setSize(c.width-a,c.height)},east:function(c){if(this.isCollapsed){return this.applyLayoutCollapsed(c)}var d=this.splitEl.dom,b=d.style;var a=d.offsetWidth;this.panel.setPosition(c.x+a,c.y);b.left=(c.x)+"px";b.top=(c.y)+"px";b.height=Math.max(0,c.height)+"px";this.panel.setSize(c.width-a,c.height)},north:function(c){if(this.isCollapsed){return this.applyLayoutCollapsed(c)}var d=this.splitEl.dom,b=d.style;var a=d.offsetHeight;this.panel.setPosition(c.x,c.y);b.left=(c.x)+"px";b.top=(c.y+c.height-a)+"px";b.width=Math.max(0,c.width)+"px";this.panel.setSize(c.width,c.height-a)},south:function(c){if(this.isCollapsed){return this.applyLayoutCollapsed(c)}var d=this.splitEl.dom,b=d.style;var a=d.offsetHeight;this.panel.setPosition(c.x,c.y+a);b.left=(c.x)+"px";b.top=(c.y)+"px";b.width=Math.max(0,c.width)+"px";this.panel.setSize(c.width,c.height-a)}},render:function(a,c){Ext.layout.BorderLayout.SplitRegion.superclass.render.call(this,a,c);var d=this.position;this.splitEl=a.createChild({cls:"x-layout-split x-layout-split-"+d,html:" ",id:this.panel.id+"-xsplit"});if(this.collapseMode=="mini"){this.miniSplitEl=this.splitEl.createChild({cls:"x-layout-mini x-layout-mini-"+d,html:" "});this.miniSplitEl.addClassOnOver("x-layout-mini-over");this.miniSplitEl.on("click",this.onCollapseClick,this,{stopEvent:true})}var b=this.splitSettings[d];this.split=new Ext.SplitBar(this.splitEl.dom,c.el,b.orientation);this.split.tickSize=this.tickSize;this.split.placement=b.placement;this.split.getMaximumSize=this[b.maxFn].createDelegate(this);this.split.minSize=this.minSize||this[b.minProp];this.split.on("beforeapply",this.onSplitMove,this);this.split.useShim=this.useShim===true;this.maxSize=this.maxSize||this[b.maxProp];if(c.hidden){this.splitEl.hide()}if(this.useSplitTips){this.splitEl.dom.title=this.collapsible?this.collapsibleSplitTip:this.splitTip}if(this.collapsible){this.splitEl.on("dblclick",this.onCollapseClick,this)}},getSize:function(){if(this.isCollapsed){return this.collapsedEl.getSize()}var a=this.panel.getSize();if(this.position=="north"||this.position=="south"){a.height+=this.splitEl.dom.offsetHeight}else{a.width+=this.splitEl.dom.offsetWidth}return a},getHMaxSize:function(){var b=this.maxSize||10000;var a=this.layout.center;return Math.min(b,(this.el.getWidth()+a.el.getWidth())-a.getMinWidth())},getVMaxSize:function(){var b=this.maxSize||10000;var a=this.layout.center;return Math.min(b,(this.el.getHeight()+a.el.getHeight())-a.getMinHeight())},onSplitMove:function(b,a){var c=this.panel.getSize();this.lastSplitSize=a;if(this.position=="north"||this.position=="south"){this.panel.setSize(c.width,a);this.state.height=a}else{this.panel.setSize(a,c.height);this.state.width=a}this.layout.layout();this.panel.saveState();return false},getSplitBar:function(){return this.split},destroy:function(){Ext.destroy(this.miniSplitEl,this.split,this.splitEl);Ext.layout.BorderLayout.SplitRegion.superclass.destroy.call(this)}});Ext.Container.LAYOUTS.border=Ext.layout.BorderLayout;Ext.layout.FormLayout=Ext.extend(Ext.layout.AnchorLayout,{labelSeparator:":",trackLabels:true,type:"form",onRemove:function(d){Ext.layout.FormLayout.superclass.onRemove.call(this,d);if(this.trackLabels){d.un("show",this.onFieldShow,this);d.un("hide",this.onFieldHide,this)}var b=d.getPositionEl(),a=d.getItemCt&&d.getItemCt();if(d.rendered&&a){if(b&&b.dom){b.insertAfter(a)}Ext.destroy(a);Ext.destroyMembers(d,"label","itemCt");if(d.customItemCt){Ext.destroyMembers(d,"getItemCt","customItemCt")}}},setContainer:function(a){Ext.layout.FormLayout.superclass.setContainer.call(this,a);if(a.labelAlign){a.addClass("x-form-label-"+a.labelAlign)}if(a.hideLabels){Ext.apply(this,{labelStyle:"display:none",elementStyle:"padding-left:0;",labelAdjust:0})}else{this.labelSeparator=Ext.isDefined(a.labelSeparator)?a.labelSeparator:this.labelSeparator;a.labelWidth=a.labelWidth||100;if(Ext.isNumber(a.labelWidth)){var b=Ext.isNumber(a.labelPad)?a.labelPad:5;Ext.apply(this,{labelAdjust:a.labelWidth+b,labelStyle:"width:"+a.labelWidth+"px;",elementStyle:"padding-left:"+(a.labelWidth+b)+"px"})}if(a.labelAlign=="top"){Ext.apply(this,{labelStyle:"width:auto;",labelAdjust:0,elementStyle:"padding-left:0;"})}}},isHide:function(a){return a.hideLabel||this.container.hideLabels},onFieldShow:function(a){a.getItemCt().removeClass("x-hide-"+a.hideMode);if(a.isComposite){a.doLayout()}},onFieldHide:function(a){a.getItemCt().addClass("x-hide-"+a.hideMode)},getLabelStyle:function(e){var b="",c=[this.labelStyle,e];for(var d=0,a=c.length;d<a;++d){if(c[d]){b+=c[d];if(b.substr(-1,1)!=";"){b+=";"}}}return b},renderItem:function(e,a,d){if(e&&(e.isFormField||e.fieldLabel)&&e.inputType!="hidden"){var b=this.getTemplateArgs(e);if(Ext.isNumber(a)){a=d.dom.childNodes[a]||null}if(a){e.itemCt=this.fieldTpl.insertBefore(a,b,true)}else{e.itemCt=this.fieldTpl.append(d,b,true)}if(!e.getItemCt){Ext.apply(e,{getItemCt:function(){return e.itemCt},customItemCt:true})}e.label=e.getItemCt().child("label.x-form-item-label");if(!e.rendered){e.render("x-form-el-"+e.id)}else{if(!this.isValidParent(e,d)){Ext.fly("x-form-el-"+e.id).appendChild(e.getPositionEl())}}if(this.trackLabels){if(e.hidden){this.onFieldHide(e)}e.on({scope:this,show:this.onFieldShow,hide:this.onFieldHide})}this.configureItem(e)}else{Ext.layout.FormLayout.superclass.renderItem.apply(this,arguments)}},getTemplateArgs:function(b){var a=!b.fieldLabel||b.hideLabel;return{id:b.id,label:b.fieldLabel,itemCls:(b.itemCls||this.container.itemCls||"")+(b.hideLabel?" x-hide-label":""),clearCls:b.clearCls||"x-form-clear-left",labelStyle:this.getLabelStyle(b.labelStyle),elementStyle:this.elementStyle||"",labelSeparator:a?"":(Ext.isDefined(b.labelSeparator)?b.labelSeparator:this.labelSeparator)}},adjustWidthAnchor:function(a,d){if(d.label&&!this.isHide(d)&&(this.container.labelAlign!="top")){var b=Ext.isIE6||(Ext.isIE&&!Ext.isStrict);return a-this.labelAdjust+(b?-3:0)}return a},adjustHeightAnchor:function(a,b){if(b.label&&!this.isHide(b)&&(this.container.labelAlign=="top")){return a-b.label.getHeight()}return a},isValidParent:function(b,a){return a&&this.container.getEl().contains(b.getPositionEl())}});Ext.Container.LAYOUTS.form=Ext.layout.FormLayout;Ext.layout.AccordionLayout=Ext.extend(Ext.layout.FitLayout,{fill:true,autoWidth:true,titleCollapse:true,hideCollapseTool:false,collapseFirst:false,animate:false,sequence:false,activeOnTop:false,type:"accordion",renderItem:function(a){if(this.animate===false){a.animCollapse=false}a.collapsible=true;if(this.autoWidth){a.autoWidth=true}if(this.titleCollapse){a.titleCollapse=true}if(this.hideCollapseTool){a.hideCollapseTool=true}if(this.collapseFirst!==undefined){a.collapseFirst=this.collapseFirst}if(!this.activeItem&&!a.collapsed){this.setActiveItem(a,true)}else{if(this.activeItem&&this.activeItem!=a){a.collapsed=true}}Ext.layout.AccordionLayout.superclass.renderItem.apply(this,arguments);a.header.addClass("x-accordion-hd");a.on("beforeexpand",this.beforeExpand,this)},onRemove:function(a){Ext.layout.AccordionLayout.superclass.onRemove.call(this,a);if(a.rendered){a.header.removeClass("x-accordion-hd")}a.un("beforeexpand",this.beforeExpand,this)},beforeExpand:function(c,b){var a=this.activeItem;if(a){if(this.sequence){delete this.activeItem;if(!a.collapsed){a.collapse({callback:function(){c.expand(b||true)},scope:this});return false}}else{a.collapse(this.animate)}}this.setActive(c);if(this.activeOnTop){c.el.dom.parentNode.insertBefore(c.el.dom,c.el.dom.parentNode.firstChild)}this.layout()},setItemSize:function(g,e){if(this.fill&&g){var d=0,c,b=this.getRenderedItems(this.container),a=b.length,h;for(c=0;c<a;c++){if((h=b[c])!=g&&!h.hidden){d+=h.header.getHeight()}}e.height-=d;g.setSize(e)}},setActiveItem:function(a){this.setActive(a,true)},setActive:function(c,b){var a=this.activeItem;c=this.container.getComponent(c);if(a!=c){if(c.rendered&&c.collapsed&&b){c.expand()}else{if(a){a.fireEvent("deactivate",a)}this.activeItem=c;c.fireEvent("activate",c)}}}});Ext.Container.LAYOUTS.accordion=Ext.layout.AccordionLayout;Ext.layout.Accordion=Ext.layout.AccordionLayout;Ext.layout.TableLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:false,type:"table",targetCls:"x-table-layout-ct",tableAttrs:null,setContainer:function(a){Ext.layout.TableLayout.superclass.setContainer.call(this,a);this.currentRow=0;this.currentColumn=0;this.cells=[]},onLayout:function(d,g){var e=d.items.items,a=e.length,h,b;if(!this.table){g.addClass("x-table-layout-ct");this.table=g.createChild(Ext.apply({tag:"table",cls:"x-table-layout",cellspacing:0,cn:{tag:"tbody"}},this.tableAttrs),null,true)}this.renderAll(d,g)},getRow:function(a){var b=this.table.tBodies[0].childNodes[a];if(!b){b=document.createElement("tr");this.table.tBodies[0].appendChild(b)}return b},getNextCell:function(k){var a=this.getNextNonSpan(this.currentColumn,this.currentRow);var g=this.currentColumn=a[0],e=this.currentRow=a[1];for(var i=e;i<e+(k.rowspan||1);i++){if(!this.cells[i]){this.cells[i]=[]}for(var d=g;d<g+(k.colspan||1);d++){this.cells[i][d]=true}}var h=document.createElement("td");if(k.cellId){h.id=k.cellId}var b="x-table-layout-cell";if(k.cellCls){b+=" "+k.cellCls}h.className=b;if(k.colspan){h.colSpan=k.colspan}if(k.rowspan){h.rowSpan=k.rowspan}this.getRow(e).appendChild(h);return h},getNextNonSpan:function(a,c){var b=this.columns;while((b&&a>=b)||(this.cells[c]&&this.cells[c][a])){if(b&&a>=b){c++;a=0}else{a++}}return[a,c]},renderItem:function(e,a,d){if(!this.table){this.table=d.createChild(Ext.apply({tag:"table",cls:"x-table-layout",cellspacing:0,cn:{tag:"tbody"}},this.tableAttrs),null,true)}if(e&&!e.rendered){e.render(this.getNextCell(e));this.configureItem(e)}else{if(e&&!this.isValidParent(e,d)){var b=this.getNextCell(e);b.insertBefore(e.getPositionEl().dom,null);e.container=Ext.get(b);this.configureItem(e)}}},isValidParent:function(b,a){return b.getPositionEl().up("table",5).dom.parentNode===(a.dom||a)},destroy:function(){delete this.table;Ext.layout.TableLayout.superclass.destroy.call(this)}});Ext.Container.LAYOUTS.table=Ext.layout.TableLayout;Ext.layout.AbsoluteLayout=Ext.extend(Ext.layout.AnchorLayout,{extraCls:"x-abs-layout-item",type:"absolute",onLayout:function(a,b){b.position();this.paddingLeft=b.getPadding("l");this.paddingTop=b.getPadding("t");Ext.layout.AbsoluteLayout.superclass.onLayout.call(this,a,b)},adjustWidthAnchor:function(b,a){return b?b-a.getPosition(true)[0]+this.paddingLeft:b},adjustHeightAnchor:function(b,a){return b?b-a.getPosition(true)[1]+this.paddingTop:b}});Ext.Container.LAYOUTS.absolute=Ext.layout.AbsoluteLayout;Ext.layout.BoxLayout=Ext.extend(Ext.layout.ContainerLayout,{defaultMargins:{left:0,top:0,right:0,bottom:0},padding:"0",pack:"start",monitorResize:true,type:"box",scrollOffset:0,extraCls:"x-box-item",targetCls:"x-box-layout-ct",innerCls:"x-box-inner",constructor:function(a){Ext.layout.BoxLayout.superclass.constructor.call(this,a);if(Ext.isString(this.defaultMargins)){this.defaultMargins=this.parseMargins(this.defaultMargins)}var d=this.overflowHandler;if(typeof d=="string"){d={type:d}}var c="none";if(d&&d.type!=undefined){c=d.type}var b=Ext.layout.boxOverflow[c];if(b[this.type]){b=b[this.type]}this.overflowHandler=new b(this,d)},onLayout:function(b,h){Ext.layout.BoxLayout.superclass.onLayout.call(this,b,h);var d=this.getLayoutTargetSize(),i=this.getVisibleItems(b),c=this.calculateChildBoxes(i,d),g=c.boxes,k=c.meta;if(d.width>0){var l=this.overflowHandler,a=k.tooNarrow?"handleOverflow":"clearOverflow";var e=l[a](c,d);if(e){if(e.targetSize){d=e.targetSize}if(e.recalculate){i=this.getVisibleItems(b);c=this.calculateChildBoxes(i,d);g=c.boxes}}}this.layoutTargetLastSize=d;this.childBoxCache=c;this.updateInnerCtSize(d,c);this.updateChildBoxes(g);this.handleTargetOverflow(d,b,h)},updateChildBoxes:function(c){for(var b=0,e=c.length;b<e;b++){var d=c[b],a=d.component;if(d.dirtySize){a.setSize(d.width,d.height)}if(isNaN(d.left)||isNaN(d.top)){continue}a.setPosition(d.left,d.top)}},updateInnerCtSize:function(c,h){var i=this.align,g=this.padding,e=c.width,a=c.height;if(this.type=="hbox"){var b=e,d=h.meta.maxHeight+g.top+g.bottom;if(i=="stretch"){d=a}else{if(i=="middle"){d=Math.max(a,d)}}}else{var d=a,b=h.meta.maxWidth+g.left+g.right;if(i=="stretch"){b=e}else{if(i=="center"){b=Math.max(e,b)}}}this.innerCt.setSize(b||undefined,d||undefined)},handleTargetOverflow:function(d,a,c){var e=c.getStyle("overflow");if(e&&e!="hidden"&&!this.adjustmentPass){var b=this.getLayoutTargetSize();if(b.width!=d.width||b.height!=d.height){this.adjustmentPass=true;this.onLayout(a,c)}}delete this.adjustmentPass},isValidParent:function(b,a){return this.innerCt&&b.getPositionEl().dom.parentNode==this.innerCt.dom},getVisibleItems:function(g){var g=g||this.container,e=g.getLayoutTarget(),h=g.items.items,a=h.length,d,k,b=[];for(d=0;d<a;d++){if((k=h[d]).rendered&&this.isValidParent(k,e)&&k.hidden!==true&&k.collapsed!==true&&k.shouldLayout!==false){b.push(k)}}return b},renderAll:function(a,b){if(!this.innerCt){this.innerCt=b.createChild({cls:this.innerCls});this.padding=this.parseMargins(this.padding)}Ext.layout.BoxLayout.superclass.renderAll.call(this,a,this.innerCt)},getLayoutTargetSize:function(){var b=this.container.getLayoutTarget(),a;if(b){a=b.getViewSize();if(Ext.isIE&&Ext.isStrict&&a.width==0){a=b.getStyleSize()}a.width-=b.getPadding("lr");a.height-=b.getPadding("tb")}return a},renderItem:function(a){if(Ext.isString(a.margins)){a.margins=this.parseMargins(a.margins)}else{if(!a.margins){a.margins=this.defaultMargins}}Ext.layout.BoxLayout.superclass.renderItem.apply(this,arguments)},destroy:function(){Ext.destroy(this.overflowHandler);Ext.layout.BoxLayout.superclass.destroy.apply(this,arguments)}});Ext.ns("Ext.layout.boxOverflow");Ext.layout.boxOverflow.None=Ext.extend(Object,{constructor:function(b,a){this.layout=b;Ext.apply(this,a||{})},handleOverflow:Ext.emptyFn,clearOverflow:Ext.emptyFn});Ext.layout.boxOverflow.none=Ext.layout.boxOverflow.None;Ext.layout.boxOverflow.Menu=Ext.extend(Ext.layout.boxOverflow.None,{afterCls:"x-strip-right",noItemsMenuText:'<div class="x-toolbar-no-items">(None)</div>',constructor:function(a){Ext.layout.boxOverflow.Menu.superclass.constructor.apply(this,arguments);this.menuItems=[]},createInnerElements:function(){if(!this.afterCt){this.afterCt=this.layout.innerCt.insertSibling({cls:this.afterCls},"before")}},clearOverflow:function(a,g){var e=g.width+(this.afterCt?this.afterCt.getWidth():0),b=this.menuItems;this.hideTrigger();for(var c=0,d=b.length;c<d;c++){b.pop().component.show()}return{targetSize:{height:g.height,width:e}}},showTrigger:function(){this.createMenu();this.menuTrigger.show()},hideTrigger:function(){if(this.menuTrigger!=undefined){this.menuTrigger.hide()}},beforeMenuShow:function(h){var b=this.menuItems,a=b.length,g,e;var c=function(k,i){return k.isXType("buttongroup")&&!(i instanceof Ext.Toolbar.Separator)};this.clearMenu();h.removeAll();for(var d=0;d<a;d++){g=b[d].component;if(e&&(c(g,e)||c(e,g))){h.add("-")}this.addComponentToMenu(h,g);e=g}if(h.items.length<1){h.add(this.noItemsMenuText)}},createMenuConfig:function(c,a){var b=Ext.apply({},c.initialConfig),d=c.toggleGroup;Ext.copyTo(b,c,["iconCls","icon","itemId","disabled","handler","scope","menu"]);Ext.apply(b,{text:c.overflowText||c.text,hideOnClick:a});if(d||c.enableToggle){Ext.apply(b,{group:d,checked:c.pressed,listeners:{checkchange:function(g,e){c.toggle(e)}}})}delete b.ownerCt;delete b.xtype;delete b.id;return b},addComponentToMenu:function(b,a){if(a instanceof Ext.Toolbar.Separator){b.add("-")}else{if(Ext.isFunction(a.isXType)){if(a.isXType("splitbutton")){b.add(this.createMenuConfig(a,true))}else{if(a.isXType("button")){b.add(this.createMenuConfig(a,!a.menu))}else{if(a.isXType("buttongroup")){a.items.each(function(c){this.addComponentToMenu(b,c)},this)}}}}}},clearMenu:function(){var a=this.moreMenu;if(a&&a.items){a.items.each(function(b){delete b.menu})}},createMenu:function(){if(!this.menuTrigger){this.createInnerElements();this.menu=new Ext.menu.Menu({ownerCt:this.layout.container,listeners:{scope:this,beforeshow:this.beforeMenuShow}});this.menuTrigger=new Ext.Button({iconCls:"x-toolbar-more-icon",cls:"x-toolbar-more",menu:this.menu,renderTo:this.afterCt})}},destroy:function(){Ext.destroy(this.menu,this.menuTrigger)}});Ext.layout.boxOverflow.menu=Ext.layout.boxOverflow.Menu;Ext.layout.boxOverflow.HorizontalMenu=Ext.extend(Ext.layout.boxOverflow.Menu,{constructor:function(){Ext.layout.boxOverflow.HorizontalMenu.superclass.constructor.apply(this,arguments);var c=this,b=c.layout,a=b.calculateChildBoxes;b.calculateChildBoxes=function(d,i){var m=a.apply(b,arguments),l=m.meta,e=c.menuItems;var k=0;for(var g=0,h=e.length;g<h;g++){k+=e[g].width}l.minimumWidth+=k;l.tooNarrow=l.minimumWidth>i.width;return m}},handleOverflow:function(d,h){this.showTrigger();var l=h.width-this.afterCt.getWidth(),m=d.boxes,e=0,s=false;for(var p=0,c=m.length;p<c;p++){e+=m[p].width}var a=l-e,g=0;for(var p=0,c=this.menuItems.length;p<c;p++){var o=this.menuItems[p],n=o.component,b=o.width;if(b<a){n.show();a-=b;g++;s=true}else{break}}if(s){this.menuItems=this.menuItems.slice(g)}else{for(var k=m.length-1;k>=0;k--){var r=m[k].component,q=m[k].left+m[k].width;if(q>=l){this.menuItems.unshift({component:r,width:m[k].width});r.hide()}else{break}}}if(this.menuItems.length==0){this.hideTrigger()}return{targetSize:{height:h.height,width:l},recalculate:s}}});Ext.layout.boxOverflow.menu.hbox=Ext.layout.boxOverflow.HorizontalMenu;Ext.layout.boxOverflow.Scroller=Ext.extend(Ext.layout.boxOverflow.None,{animateScroll:true,scrollIncrement:100,wheelIncrement:3,scrollRepeatInterval:400,scrollDuration:0.4,beforeCls:"x-strip-left",afterCls:"x-strip-right",scrollerCls:"x-strip-scroller",beforeScrollerCls:"x-strip-scroller-left",afterScrollerCls:"x-strip-scroller-right",createWheelListener:function(){this.layout.innerCt.on({scope:this,mousewheel:function(a){a.stopEvent();this.scrollBy(a.getWheelDelta()*this.wheelIncrement*-1,false)}})},handleOverflow:function(a,b){this.createInnerElements();this.showScrollers()},clearOverflow:function(){this.hideScrollers()},showScrollers:function(){this.createScrollers();this.beforeScroller.show();this.afterScroller.show();this.updateScrollButtons()},hideScrollers:function(){if(this.beforeScroller!=undefined){this.beforeScroller.hide();this.afterScroller.hide()}},createScrollers:function(){if(!this.beforeScroller&&!this.afterScroller){var a=this.beforeCt.createChild({cls:String.format("{0} {1} ",this.scrollerCls,this.beforeScrollerCls)});var b=this.afterCt.createChild({cls:String.format("{0} {1}",this.scrollerCls,this.afterScrollerCls)});a.addClassOnOver(this.beforeScrollerCls+"-hover");b.addClassOnOver(this.afterScrollerCls+"-hover");a.setVisibilityMode(Ext.Element.DISPLAY);b.setVisibilityMode(Ext.Element.DISPLAY);this.beforeRepeater=new Ext.util.ClickRepeater(a,{interval:this.scrollRepeatInterval,handler:this.scrollLeft,scope:this});this.afterRepeater=new Ext.util.ClickRepeater(b,{interval:this.scrollRepeatInterval,handler:this.scrollRight,scope:this});this.beforeScroller=a;this.afterScroller=b}},destroy:function(){Ext.destroy(this.beforeScroller,this.afterScroller,this.beforeRepeater,this.afterRepeater,this.beforeCt,this.afterCt)},scrollBy:function(b,a){this.scrollTo(this.getScrollPosition()+b,a)},getItem:function(a){if(Ext.isString(a)){a=Ext.getCmp(a)}else{if(Ext.isNumber(a)){a=this.items[a]}}return a},getScrollAnim:function(){return{duration:this.scrollDuration,callback:this.updateScrollButtons,scope:this}},updateScrollButtons:function(){if(this.beforeScroller==undefined||this.afterScroller==undefined){return}var d=this.atExtremeBefore()?"addClass":"removeClass",c=this.atExtremeAfter()?"addClass":"removeClass",a=this.beforeScrollerCls+"-disabled",b=this.afterScrollerCls+"-disabled";this.beforeScroller[d](a);this.afterScroller[c](b);this.scrolling=false},atExtremeBefore:function(){return this.getScrollPosition()===0},scrollLeft:function(a){this.scrollBy(-this.scrollIncrement,a)},scrollRight:function(a){this.scrollBy(this.scrollIncrement,a)},scrollToItem:function(d,b){d=this.getItem(d);if(d!=undefined){var a=this.getItemVisibility(d);if(!a.fullyVisible){var c=d.getBox(true,true),e=c.x;if(a.hiddenRight){e-=(this.layout.innerCt.getWidth()-c.width)}this.scrollTo(e,b)}}},getItemVisibility:function(e){var d=this.getItem(e).getBox(true,true),a=d.x,c=d.x+d.width,g=this.getScrollPosition(),b=this.layout.innerCt.getWidth()+g;return{hiddenLeft:a<g,hiddenRight:c>b,fullyVisible:a>g&&c<b}}});Ext.layout.boxOverflow.scroller=Ext.layout.boxOverflow.Scroller;Ext.layout.boxOverflow.VerticalScroller=Ext.extend(Ext.layout.boxOverflow.Scroller,{scrollIncrement:75,wheelIncrement:2,handleOverflow:function(a,b){Ext.layout.boxOverflow.VerticalScroller.superclass.handleOverflow.apply(this,arguments);return{targetSize:{height:b.height-(this.beforeCt.getHeight()+this.afterCt.getHeight()),width:b.width}}},createInnerElements:function(){var a=this.layout.innerCt;if(!this.beforeCt){this.beforeCt=a.insertSibling({cls:this.beforeCls},"before");this.afterCt=a.insertSibling({cls:this.afterCls},"after");this.createWheelListener()}},scrollTo:function(a,b){var d=this.getScrollPosition(),c=a.constrain(0,this.getMaxScrollBottom());if(c!=d&&!this.scrolling){if(b==undefined){b=this.animateScroll}this.layout.innerCt.scrollTo("top",c,b?this.getScrollAnim():false);if(b){this.scrolling=true}else{this.scrolling=false;this.updateScrollButtons()}}},getScrollPosition:function(){return parseInt(this.layout.innerCt.dom.scrollTop,10)||0},getMaxScrollBottom:function(){return this.layout.innerCt.dom.scrollHeight-this.layout.innerCt.getHeight()},atExtremeAfter:function(){return this.getScrollPosition()>=this.getMaxScrollBottom()}});Ext.layout.boxOverflow.scroller.vbox=Ext.layout.boxOverflow.VerticalScroller;Ext.layout.boxOverflow.HorizontalScroller=Ext.extend(Ext.layout.boxOverflow.Scroller,{handleOverflow:function(a,b){Ext.layout.boxOverflow.HorizontalScroller.superclass.handleOverflow.apply(this,arguments);return{targetSize:{height:b.height,width:b.width-(this.beforeCt.getWidth()+this.afterCt.getWidth())}}},createInnerElements:function(){var a=this.layout.innerCt;if(!this.beforeCt){this.afterCt=a.insertSibling({cls:this.afterCls},"before");this.beforeCt=a.insertSibling({cls:this.beforeCls},"before");this.createWheelListener()}},scrollTo:function(a,b){var d=this.getScrollPosition(),c=a.constrain(0,this.getMaxScrollRight());if(c!=d&&!this.scrolling){if(b==undefined){b=this.animateScroll}this.layout.innerCt.scrollTo("left",c,b?this.getScrollAnim():false);if(b){this.scrolling=true}else{this.scrolling=false;this.updateScrollButtons()}}},getScrollPosition:function(){return parseInt(this.layout.innerCt.dom.scrollLeft,10)||0},getMaxScrollRight:function(){return this.layout.innerCt.dom.scrollWidth-this.layout.innerCt.getWidth()},atExtremeAfter:function(){return this.getScrollPosition()>=this.getMaxScrollRight()}});Ext.layout.boxOverflow.scroller.hbox=Ext.layout.boxOverflow.HorizontalScroller;Ext.layout.HBoxLayout=Ext.extend(Ext.layout.BoxLayout,{align:"top",type:"hbox",calculateChildBoxes:function(s,b){var G=s.length,S=this.padding,E=S.top,V=S.left,z=E+S.bottom,P=V+S.right,a=b.width-this.scrollOffset,e=b.height,p=Math.max(0,e-z),Q=this.pack=="start",X=this.pack=="center",B=this.pack=="end",M=0,R=0,U=0,m=0,Y=0,I=[],l,K,N,W,x,k,T,J,c,y,r,O;for(T=0;T<G;T++){l=s[T];N=l.height;K=l.width;k=!l.hasLayout&&typeof l.doLayout=="function";if(typeof K!="number"){if(l.flex&&!K){U+=l.flex}else{if(!K&&k){l.doLayout()}W=l.getSize();K=W.width;N=W.height}}x=l.margins;y=x.left+x.right;M+=y+(K||0);m+=y+(l.flex?l.minWidth||0:K);Y+=y+(l.minWidth||K||0);if(typeof N!="number"){if(k){l.doLayout()}N=l.getHeight()}R=Math.max(R,N+x.top+x.bottom);I.push({component:l,height:N||undefined,width:K||undefined})}var L=m-a,q=Y>a;var o=Math.max(0,a-M-P);if(q){for(T=0;T<G;T++){I[T].width=s[T].minWidth||s[T].width||I[T].width}}else{if(L>0){var D=[];for(var F=0,w=G;F<w;F++){var C=s[F],u=C.minWidth||0;if(C.flex){I[F].width=u}else{D.push({minWidth:u,available:I[F].width-u,index:F})}}D.sort(function(Z,i){return Z.available>i.available?1:-1});for(var T=0,w=D.length;T<w;T++){var H=D[T].index;if(H==undefined){continue}var C=s[H],n=I[H],v=n.width,u=C.minWidth,d=Math.max(u,v-Math.ceil(L/(w-T))),g=v-d;I[H].width=d;L-=g}}else{var h=o,t=U;for(T=0;T<G;T++){l=s[T];J=I[T];x=l.margins;r=x.top+x.bottom;if(Q&&l.flex&&!l.width){c=Math.ceil((l.flex/t)*h);h-=c;t-=l.flex;J.width=c;J.dirtySize=true}}}}if(X){V+=o/2}else{if(B){V+=o}}for(T=0;T<G;T++){l=s[T];J=I[T];x=l.margins;V+=x.left;r=x.top+x.bottom;J.left=V;J.top=E+x.top;switch(this.align){case"stretch":O=p-r;J.height=O.constrain(l.minHeight||0,l.maxHeight||1000000);J.dirtySize=true;break;case"stretchmax":O=R-r;J.height=O.constrain(l.minHeight||0,l.maxHeight||1000000);J.dirtySize=true;break;case"middle":var A=p-J.height-r;if(A>0){J.top=E+r+(A/2)}}V+=J.width+x.right}return{boxes:I,meta:{maxHeight:R,nonFlexWidth:M,desiredWidth:m,minimumWidth:Y,shortfall:m-a,tooNarrow:q}}}});Ext.Container.LAYOUTS.hbox=Ext.layout.HBoxLayout;Ext.layout.VBoxLayout=Ext.extend(Ext.layout.BoxLayout,{align:"left",type:"vbox",calculateChildBoxes:function(q,b){var G=q.length,T=this.padding,E=T.top,W=T.left,z=E+T.bottom,Q=W+T.right,a=b.width-this.scrollOffset,d=b.height,M=Math.max(0,a-Q),R=this.pack=="start",Y=this.pack=="center",B=this.pack=="end",m=0,w=0,V=0,N=0,o=0,I=[],k,K,P,X,v,h,U,J,c,y,p,e;for(U=0;U<G;U++){k=q[U];P=k.height;K=k.width;h=!k.hasLayout&&typeof k.doLayout=="function";if(typeof P!="number"){if(k.flex&&!P){V+=k.flex}else{if(!P&&h){k.doLayout()}X=k.getSize();K=X.width;P=X.height}}v=k.margins;p=v.top+v.bottom;m+=p+(P||0);N+=p+(k.flex?k.minHeight||0:P);o+=p+(k.minHeight||P||0);if(typeof K!="number"){if(h){k.doLayout()}K=k.getWidth()}w=Math.max(w,K+v.left+v.right);I.push({component:k,height:P||undefined,width:K||undefined})}var O=N-d,n=o>d;var s=Math.max(0,(d-m-z));if(n){for(U=0,t=G;U<t;U++){I[U].height=q[U].minHeight||q[U].height||I[U].height}}else{if(O>0){var L=[];for(var F=0,t=G;F<t;F++){var C=q[F],u=C.minHeight||0;if(C.flex){I[F].height=u}else{L.push({minHeight:u,available:I[F].height-u,index:F})}}L.sort(function(Z,i){return Z.available>i.available?1:-1});for(var U=0,t=L.length;U<t;U++){var H=L[U].index;if(H==undefined){continue}var C=q[H],l=I[H],x=l.height,u=C.minHeight,D=Math.max(u,x-Math.ceil(O/(t-U))),g=x-D;I[H].height=D;O-=g}}else{var S=s,r=V;for(U=0;U<G;U++){k=q[U];J=I[U];v=k.margins;y=v.left+v.right;if(R&&k.flex&&!k.height){flexedHeight=Math.ceil((k.flex/r)*S);S-=flexedHeight;r-=k.flex;J.height=flexedHeight;J.dirtySize=true}}}}if(Y){E+=s/2}else{if(B){E+=s}}for(U=0;U<G;U++){k=q[U];J=I[U];v=k.margins;E+=v.top;y=v.left+v.right;J.left=W+v.left;J.top=E;switch(this.align){case"stretch":e=M-y;J.width=e.constrain(k.minWidth||0,k.maxWidth||1000000);J.dirtySize=true;break;case"stretchmax":e=w-y;J.width=e.constrain(k.minWidth||0,k.maxWidth||1000000);J.dirtySize=true;break;case"center":var A=M-J.width-y;if(A>0){J.left=W+y+(A/2)}}E+=J.height+v.bottom}return{boxes:I,meta:{maxWidth:w,nonFlexHeight:m,desiredHeight:N,minimumHeight:o,shortfall:N-d,tooNarrow:n}}}});Ext.Container.LAYOUTS.vbox=Ext.layout.VBoxLayout;Ext.layout.ToolbarLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,type:"toolbar",triggerWidth:18,noItemsMenuText:'<div class="x-toolbar-no-items">(None)</div>',lastOverflow:false,tableHTML:['<table cellspacing="0" class="x-toolbar-ct">',"<tbody>","<tr>",'<td class="x-toolbar-left" align="{0}">','<table cellspacing="0">',"<tbody>",'<tr class="x-toolbar-left-row"></tr>',"</tbody>","</table>","</td>",'<td class="x-toolbar-right" align="right">','<table cellspacing="0" class="x-toolbar-right-ct">',"<tbody>","<tr>","<td>",'<table cellspacing="0">',"<tbody>",'<tr class="x-toolbar-right-row"></tr>',"</tbody>","</table>","</td>","<td>",'<table cellspacing="0">',"<tbody>",'<tr class="x-toolbar-extras-row"></tr>',"</tbody>","</table>","</td>","</tr>","</tbody>","</table>","</td>","</tr>","</tbody>","</table>"].join(""),onLayout:function(e,k){if(!this.leftTr){var h=e.buttonAlign=="center"?"center":"left";k.addClass("x-toolbar-layout-ct");k.insertHtml("beforeEnd",String.format(this.tableHTML,h));this.leftTr=k.child("tr.x-toolbar-left-row",true);this.rightTr=k.child("tr.x-toolbar-right-row",true);this.extrasTr=k.child("tr.x-toolbar-extras-row",true);if(this.hiddenItem==undefined){this.hiddenItems=[]}}var l=e.buttonAlign=="right"?this.rightTr:this.leftTr,m=e.items.items,d=0;for(var b=0,g=m.length,n;b<g;b++,d++){n=m[b];if(n.isFill){l=this.rightTr;d=-1}else{if(!n.rendered){n.render(this.insertCell(n,l,d));this.configureItem(n)}else{if(!n.xtbHidden&&!this.isValidParent(n,l.childNodes[d])){var a=this.insertCell(n,l,d);a.appendChild(n.getPositionEl().dom);n.container=Ext.get(a)}}}}this.cleanup(this.leftTr);this.cleanup(this.rightTr);this.cleanup(this.extrasTr);this.fitToSize(k)},cleanup:function(b){var e=b.childNodes,a,d;for(a=e.length-1;a>=0&&(d=e[a]);a--){if(!d.firstChild){b.removeChild(d)}}},insertCell:function(e,b,a){var d=document.createElement("td");d.className="x-toolbar-cell";b.insertBefore(d,b.childNodes[a]||null);return d},hideItem:function(a){this.hiddenItems.push(a);a.xtbHidden=true;a.xtbWidth=a.getPositionEl().dom.parentNode.offsetWidth;a.hide()},unhideItem:function(a){a.show();a.xtbHidden=false;this.hiddenItems.remove(a)},getItemWidth:function(a){return a.hidden?(a.xtbWidth||0):a.getPositionEl().dom.parentNode.offsetWidth},fitToSize:function(l){if(this.container.enableOverflow===false){return}var b=l.dom.clientWidth,k=l.dom.firstChild.offsetWidth,n=b-this.triggerWidth,a=this.lastWidth||0,c=this.hiddenItems,e=c.length!=0,o=b>=a;this.lastWidth=b;if(k>b||(e&&o)){var m=this.container.items.items,h=m.length,d=0,p;for(var g=0;g<h;g++){p=m[g];if(!p.isFill){d+=this.getItemWidth(p);if(d>n){if(!(p.hidden||p.xtbHidden)){this.hideItem(p)}}else{if(p.xtbHidden){this.unhideItem(p)}}}}}e=c.length!=0;if(e){this.initMore();if(!this.lastOverflow){this.container.fireEvent("overflowchange",this.container,true);this.lastOverflow=true}}else{if(this.more){this.clearMenu();this.more.destroy();delete this.more;if(this.lastOverflow){this.container.fireEvent("overflowchange",this.container,false);this.lastOverflow=false}}}},createMenuConfig:function(c,a){var b=Ext.apply({},c.initialConfig),d=c.toggleGroup;Ext.copyTo(b,c,["iconCls","icon","itemId","disabled","handler","scope","menu"]);Ext.apply(b,{text:c.overflowText||c.text,hideOnClick:a});if(d||c.enableToggle){Ext.apply(b,{group:d,checked:c.pressed,listeners:{checkchange:function(g,e){c.toggle(e)}}})}delete b.ownerCt;delete b.xtype;delete b.id;return b},addComponentToMenu:function(b,a){if(a instanceof Ext.Toolbar.Separator){b.add("-")}else{if(Ext.isFunction(a.isXType)){if(a.isXType("splitbutton")){b.add(this.createMenuConfig(a,true))}else{if(a.isXType("button")){b.add(this.createMenuConfig(a,!a.menu))}else{if(a.isXType("buttongroup")){a.items.each(function(c){this.addComponentToMenu(b,c)},this)}}}}}},clearMenu:function(){var a=this.moreMenu;if(a&&a.items){a.items.each(function(b){delete b.menu})}},beforeMoreShow:function(h){var b=this.container.items.items,a=b.length,g,e;var c=function(k,i){return k.isXType("buttongroup")&&!(i instanceof Ext.Toolbar.Separator)};this.clearMenu();h.removeAll();for(var d=0;d<a;d++){g=b[d];if(g.xtbHidden){if(e&&(c(g,e)||c(e,g))){h.add("-")}this.addComponentToMenu(h,g);e=g}}if(h.items.length<1){h.add(this.noItemsMenuText)}},initMore:function(){if(!this.more){this.moreMenu=new Ext.menu.Menu({ownerCt:this.container,listeners:{beforeshow:this.beforeMoreShow,scope:this}});this.more=new Ext.Button({iconCls:"x-toolbar-more-icon",cls:"x-toolbar-more",menu:this.moreMenu,ownerCt:this.container});var a=this.insertCell(this.more,this.extrasTr,100);this.more.render(a)}},destroy:function(){Ext.destroy(this.more,this.moreMenu);delete this.leftTr;delete this.rightTr;delete this.extrasTr;Ext.layout.ToolbarLayout.superclass.destroy.call(this)}});Ext.Container.LAYOUTS.toolbar=Ext.layout.ToolbarLayout;Ext.layout.MenuLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,type:"menu",setContainer:function(a){this.monitorResize=!a.floating;a.on("autosize",this.doAutoSize,this);Ext.layout.MenuLayout.superclass.setContainer.call(this,a)},renderItem:function(g,b,e){if(!this.itemTpl){this.itemTpl=Ext.layout.MenuLayout.prototype.itemTpl=new Ext.XTemplate('<li id="{itemId}" class="{itemCls}">','<tpl if="needsIcon">','<img alt="{altText}" src="{icon}" class="{iconCls}"/>',"</tpl>","</li>")}if(g&&!g.rendered){if(Ext.isNumber(b)){b=e.dom.childNodes[b]}var d=this.getItemArgs(g);g.render(g.positionEl=b?this.itemTpl.insertBefore(b,d,true):this.itemTpl.append(e,d,true));g.positionEl.menuItemId=g.getItemId();if(!d.isMenuItem&&d.needsIcon){g.positionEl.addClass("x-menu-list-item-indent")}this.configureItem(g)}else{if(g&&!this.isValidParent(g,e)){if(Ext.isNumber(b)){b=e.dom.childNodes[b]}e.dom.insertBefore(g.getActionEl().dom,b||null)}}},getItemArgs:function(d){var a=d instanceof Ext.menu.Item,b=!(a||d instanceof Ext.menu.Separator);return{isMenuItem:a,needsIcon:b&&(d.icon||d.iconCls),icon:d.icon||Ext.BLANK_IMAGE_URL,iconCls:"x-menu-item-icon "+(d.iconCls||""),itemId:"x-menu-el-"+d.id,itemCls:"x-menu-list-item ",altText:d.altText||""}},isValidParent:function(b,a){return b.el.up("li.x-menu-list-item",5).dom.parentNode===(a.dom||a)},onLayout:function(a,b){Ext.layout.MenuLayout.superclass.onLayout.call(this,a,b);this.doAutoSize()},doAutoSize:function(){var c=this.container,a=c.width;if(c.floating){if(a){c.setWidth(a)}else{if(Ext.isIE){c.setWidth(Ext.isStrict&&(Ext.isIE7||Ext.isIE8)?"auto":c.minWidth);var d=c.getEl(),b=d.dom.offsetWidth;c.setWidth(c.getLayoutTarget().getWidth()+d.getFrameWidth("lr"))}}}}});Ext.Container.LAYOUTS.menu=Ext.layout.MenuLayout;Ext.Viewport=Ext.extend(Ext.Container,{initComponent:function(){Ext.Viewport.superclass.initComponent.call(this);document.getElementsByTagName("html")[0].className+=" x-viewport";this.el=Ext.getBody();this.el.setHeight=Ext.emptyFn;this.el.setWidth=Ext.emptyFn;this.el.setSize=Ext.emptyFn;this.el.dom.scroll="no";this.allowDomMove=false;this.autoWidth=true;this.autoHeight=true;Ext.EventManager.onWindowResize(this.fireResize,this);this.renderTo=this.el},fireResize:function(a,b){this.fireEvent("resize",this,a,b,a,b)}});Ext.reg("viewport",Ext.Viewport);Ext.Panel=Ext.extend(Ext.Container,{baseCls:"x-panel",collapsedCls:"x-panel-collapsed",maskDisabled:true,animCollapse:Ext.enableFx,headerAsText:true,buttonAlign:"right",collapsed:false,collapseFirst:true,minButtonWidth:75,elements:"body",preventBodyReset:false,padding:undefined,resizeEvent:"bodyresize",toolTarget:"header",collapseEl:"bwrap",slideAnchor:"t",disabledClass:"",deferHeight:true,expandDefaults:{duration:0.25},collapseDefaults:{duration:0.25},initComponent:function(){Ext.Panel.superclass.initComponent.call(this);this.addEvents("bodyresize","titlechange","iconchange","collapse","expand","beforecollapse","beforeexpand","beforeclose","close","activate","deactivate");if(this.unstyled){this.baseCls="x-plain"}this.toolbars=[];if(this.tbar){this.elements+=",tbar";this.topToolbar=this.createToolbar(this.tbar);this.tbar=null}if(this.bbar){this.elements+=",bbar";this.bottomToolbar=this.createToolbar(this.bbar);this.bbar=null}if(this.header===true){this.elements+=",header";this.header=null}else{if(this.headerCfg||(this.title&&this.header!==false)){this.elements+=",header"}}if(this.footerCfg||this.footer===true){this.elements+=",footer";this.footer=null}if(this.buttons){this.fbar=this.buttons;this.buttons=null}if(this.fbar){this.createFbar(this.fbar)}if(this.autoLoad){this.on("render",this.doAutoLoad,this,{delay:10})}},createFbar:function(b){var a=this.minButtonWidth;this.elements+=",footer";this.fbar=this.createToolbar(b,{buttonAlign:this.buttonAlign,toolbarCls:"x-panel-fbar",enableOverflow:false,defaults:function(d){return{minWidth:d.minWidth||a}}});this.fbar.items.each(function(d){d.minWidth=d.minWidth||this.minButtonWidth},this);this.buttons=this.fbar.items.items},createToolbar:function(b,c){var a;if(Ext.isArray(b)){b={items:b}}a=b.events?Ext.apply(b,c):this.createComponent(Ext.apply({},b,c),"toolbar");this.toolbars.push(a);return a},createElement:function(a,c){if(this[a]){c.appendChild(this[a].dom);return}if(a==="bwrap"||this.elements.indexOf(a)!=-1){if(this[a+"Cfg"]){this[a]=Ext.fly(c).createChild(this[a+"Cfg"])}else{var b=document.createElement("div");b.className=this[a+"Cls"];this[a]=Ext.get(c.appendChild(b))}if(this[a+"CssClass"]){this[a].addClass(this[a+"CssClass"])}if(this[a+"Style"]){this[a].applyStyles(this[a+"Style"])}}},onRender:function(g,e){Ext.Panel.superclass.onRender.call(this,g,e);this.createClasses();var a=this.el,h=a.dom,l,i;if(this.collapsible&&!this.hideCollapseTool){this.tools=this.tools?this.tools.slice(0):[];this.tools[this.collapseFirst?"unshift":"push"]({id:"toggle",handler:this.toggleCollapse,scope:this})}if(this.tools){i=this.tools;this.elements+=(this.header!==false)?",header":""}this.tools={};a.addClass(this.baseCls);if(h.firstChild){this.header=a.down("."+this.headerCls);this.bwrap=a.down("."+this.bwrapCls);var k=this.bwrap?this.bwrap:a;this.tbar=k.down("."+this.tbarCls);this.body=k.down("."+this.bodyCls);this.bbar=k.down("."+this.bbarCls);this.footer=k.down("."+this.footerCls);this.fromMarkup=true}if(this.preventBodyReset===true){a.addClass("x-panel-reset")}if(this.cls){a.addClass(this.cls)}if(this.buttons){this.elements+=",footer"}if(this.frame){a.insertHtml("afterBegin",String.format(Ext.Element.boxMarkup,this.baseCls));this.createElement("header",h.firstChild.firstChild.firstChild);this.createElement("bwrap",h);l=this.bwrap.dom;var c=h.childNodes[1],b=h.childNodes[2];l.appendChild(c);l.appendChild(b);var m=l.firstChild.firstChild.firstChild;this.createElement("tbar",m);this.createElement("body",m);this.createElement("bbar",m);this.createElement("footer",l.lastChild.firstChild.firstChild);if(!this.footer){this.bwrap.dom.lastChild.className+=" x-panel-nofooter"}this.ft=Ext.get(this.bwrap.dom.lastChild);this.mc=Ext.get(m)}else{this.createElement("header",h);this.createElement("bwrap",h);l=this.bwrap.dom;this.createElement("tbar",l);this.createElement("body",l);this.createElement("bbar",l);this.createElement("footer",l);if(!this.header){this.body.addClass(this.bodyCls+"-noheader");if(this.tbar){this.tbar.addClass(this.tbarCls+"-noheader")}}}if(Ext.isDefined(this.padding)){this.body.setStyle("padding",this.body.addUnits(this.padding))}if(this.border===false){this.el.addClass(this.baseCls+"-noborder");this.body.addClass(this.bodyCls+"-noborder");if(this.header){this.header.addClass(this.headerCls+"-noborder")}if(this.footer){this.footer.addClass(this.footerCls+"-noborder")}if(this.tbar){this.tbar.addClass(this.tbarCls+"-noborder")}if(this.bbar){this.bbar.addClass(this.bbarCls+"-noborder")}}if(this.bodyBorder===false){this.body.addClass(this.bodyCls+"-noborder")}this.bwrap.enableDisplayMode("block");if(this.header){this.header.unselectable();if(this.headerAsText){this.header.dom.innerHTML='<span class="'+this.headerTextCls+'">'+this.header.dom.innerHTML+"</span>";if(this.iconCls){this.setIconClass(this.iconCls)}}}if(this.floating){this.makeFloating(this.floating)}if(this.collapsible&&this.titleCollapse&&this.header){this.mon(this.header,"click",this.toggleCollapse,this);this.header.setStyle("cursor","pointer")}if(i){this.addTool.apply(this,i)}if(this.fbar){this.footer.addClass("x-panel-btns");this.fbar.ownerCt=this;this.fbar.render(this.footer);this.footer.createChild({cls:"x-clear"})}if(this.tbar&&this.topToolbar){this.topToolbar.ownerCt=this;this.topToolbar.render(this.tbar)}if(this.bbar&&this.bottomToolbar){this.bottomToolbar.ownerCt=this;this.bottomToolbar.render(this.bbar)}},setIconClass:function(b){var a=this.iconCls;this.iconCls=b;if(this.rendered&&this.header){if(this.frame){this.header.addClass("x-panel-icon");this.header.replaceClass(a,this.iconCls)}else{var e=this.header,c=e.child("img.x-panel-inline-icon");if(c){Ext.fly(c).replaceClass(a,this.iconCls)}else{var d=e.child("span."+this.headerTextCls);if(d){Ext.DomHelper.insertBefore(d.dom,{tag:"img",alt:"",src:Ext.BLANK_IMAGE_URL,cls:"x-panel-inline-icon "+this.iconCls})}}}}this.fireEvent("iconchange",this,b,a)},makeFloating:function(a){this.floating=true;this.el=new Ext.Layer(Ext.apply({},a,{shadow:Ext.isDefined(this.shadow)?this.shadow:"sides",shadowOffset:this.shadowOffset,constrain:false,shim:this.shim===false?false:undefined}),this.el)},getTopToolbar:function(){return this.topToolbar},getBottomToolbar:function(){return this.bottomToolbar},getFooterToolbar:function(){return this.fbar},addButton:function(a,c,b){if(!this.fbar){this.createFbar([])}if(c){if(Ext.isString(a)){a={text:a}}a=Ext.apply({handler:c,scope:b},a)}return this.fbar.add(a)},addTool:function(){if(!this.rendered){if(!this.tools){this.tools=[]}Ext.each(arguments,function(a){this.tools.push(a)},this);return}if(!this[this.toolTarget]){return}if(!this.toolTemplate){var h=new Ext.Template('<div class="x-tool x-tool-{id}"> </div>');h.disableFormats=true;h.compile();Ext.Panel.prototype.toolTemplate=h}for(var g=0,d=arguments,c=d.length;g<c;g++){var b=d[g];if(!this.tools[b.id]){var k="x-tool-"+b.id+"-over";var e=this.toolTemplate.insertFirst(this[this.toolTarget],b,true);this.tools[b.id]=e;e.enableDisplayMode("block");this.mon(e,"click",this.createToolHandler(e,b,k,this));if(b.on){this.mon(e,b.on)}if(b.hidden){e.hide()}if(b.qtip){if(Ext.isObject(b.qtip)){Ext.QuickTips.register(Ext.apply({target:e.id},b.qtip))}else{e.dom.qtip=b.qtip}}e.addClassOnOver(k)}}},onLayout:function(b,a){Ext.Panel.superclass.onLayout.apply(this,arguments);if(this.hasLayout&&this.toolbars.length>0){Ext.each(this.toolbars,function(c){c.doLayout(undefined,a)});this.syncHeight()}},syncHeight:function(){var b=this.toolbarHeight,c=this.body,a=this.lastSize.height,d;if(this.autoHeight||!Ext.isDefined(a)||a=="auto"){return}if(b!=this.getToolbarHeight()){b=Math.max(0,a-this.getFrameHeight());c.setHeight(b);d=c.getSize();this.toolbarHeight=this.getToolbarHeight();this.onBodyResize(d.width,d.height)}},onShow:function(){if(this.floating){return this.el.show()}Ext.Panel.superclass.onShow.call(this)},onHide:function(){if(this.floating){return this.el.hide()}Ext.Panel.superclass.onHide.call(this)},createToolHandler:function(c,a,d,b){return function(g){c.removeClass(d);if(a.stopEvent!==false){g.stopEvent()}if(a.handler){a.handler.call(a.scope||c,g,c,b,a)}}},afterRender:function(){if(this.floating&&!this.hidden){this.el.show()}if(this.title){this.setTitle(this.title)}Ext.Panel.superclass.afterRender.call(this);if(this.collapsed){this.collapsed=false;this.collapse(false)}this.initEvents()},getKeyMap:function(){if(!this.keyMap){this.keyMap=new Ext.KeyMap(this.el,this.keys)}return this.keyMap},initEvents:function(){if(this.keys){this.getKeyMap()}if(this.draggable){this.initDraggable()}if(this.toolbars.length>0){Ext.each(this.toolbars,function(a){a.doLayout();a.on({scope:this,afterlayout:this.syncHeight,remove:this.syncHeight})},this);this.syncHeight()}},initDraggable:function(){this.dd=new Ext.Panel.DD(this,Ext.isBoolean(this.draggable)?null:this.draggable)},beforeEffect:function(a){if(this.floating){this.el.beforeAction()}if(a!==false){this.el.addClass("x-panel-animated")}},afterEffect:function(a){this.syncShadow();this.el.removeClass("x-panel-animated")},createEffect:function(c,b,d){var e={scope:d,block:true};if(c===true){e.callback=b;return e}else{if(!c.callback){e.callback=b}else{e.callback=function(){b.call(d);Ext.callback(c.callback,c.scope)}}}return Ext.applyIf(e,c)},collapse:function(b){if(this.collapsed||this.el.hasFxBlock()||this.fireEvent("beforecollapse",this,b)===false){return}var a=b===true||(b!==false&&this.animCollapse);this.beforeEffect(a);this.onCollapse(a,b);return this},onCollapse:function(a,b){if(a){this[this.collapseEl].slideOut(this.slideAnchor,Ext.apply(this.createEffect(b||true,this.afterCollapse,this),this.collapseDefaults))}else{this[this.collapseEl].hide(this.hideMode);this.afterCollapse(false)}},afterCollapse:function(a){this.collapsed=true;this.el.addClass(this.collapsedCls);if(a!==false){this[this.collapseEl].hide(this.hideMode)}this.afterEffect(a);this.cascade(function(b){if(b.lastSize){b.lastSize={width:undefined,height:undefined}}});this.fireEvent("collapse",this)},expand:function(b){if(!this.collapsed||this.el.hasFxBlock()||this.fireEvent("beforeexpand",this,b)===false){return}var a=b===true||(b!==false&&this.animCollapse);this.el.removeClass(this.collapsedCls);this.beforeEffect(a);this.onExpand(a,b);return this},onExpand:function(a,b){if(a){this[this.collapseEl].slideIn(this.slideAnchor,Ext.apply(this.createEffect(b||true,this.afterExpand,this),this.expandDefaults))}else{this[this.collapseEl].show(this.hideMode);this.afterExpand(false)}},afterExpand:function(a){this.collapsed=false;if(a!==false){this[this.collapseEl].show(this.hideMode)}this.afterEffect(a);if(this.deferLayout){delete this.deferLayout;this.doLayout(true)}this.fireEvent("expand",this)},toggleCollapse:function(a){this[this.collapsed?"expand":"collapse"](a);return this},onDisable:function(){if(this.rendered&&this.maskDisabled){this.el.mask()}Ext.Panel.superclass.onDisable.call(this)},onEnable:function(){if(this.rendered&&this.maskDisabled){this.el.unmask()}Ext.Panel.superclass.onEnable.call(this)},onResize:function(g,d,c,e){var a=g,b=d;if(Ext.isDefined(a)||Ext.isDefined(b)){if(!this.collapsed){if(Ext.isNumber(a)){this.body.setWidth(a=this.adjustBodyWidth(a-this.getFrameWidth()))}else{if(a=="auto"){a=this.body.setWidth("auto").dom.offsetWidth}else{a=this.body.dom.offsetWidth}}if(this.tbar){this.tbar.setWidth(a);if(this.topToolbar){this.topToolbar.setSize(a)}}if(this.bbar){this.bbar.setWidth(a);if(this.bottomToolbar){this.bottomToolbar.setSize(a);if(Ext.isIE){this.bbar.setStyle("position","static");this.bbar.setStyle("position","")}}}if(this.footer){this.footer.setWidth(a);if(this.fbar){this.fbar.setSize(Ext.isIE?(a-this.footer.getFrameWidth("lr")):"auto")}}if(Ext.isNumber(b)){b=Math.max(0,b-this.getFrameHeight());this.body.setHeight(b)}else{if(b=="auto"){this.body.setHeight(b)}}if(this.disabled&&this.el._mask){this.el._mask.setSize(this.el.dom.clientWidth,this.el.getHeight())}}else{this.queuedBodySize={width:a,height:b};if(!this.queuedExpand&&this.allowQueuedExpand!==false){this.queuedExpand=true;this.on("expand",function(){delete this.queuedExpand;this.onResize(this.queuedBodySize.width,this.queuedBodySize.height)},this,{single:true})}}this.onBodyResize(a,b)}this.syncShadow();Ext.Panel.superclass.onResize.call(this,g,d,c,e)},onBodyResize:function(a,b){this.fireEvent("bodyresize",this,a,b)},getToolbarHeight:function(){var a=0;if(this.rendered){Ext.each(this.toolbars,function(b){a+=b.getHeight()},this)}return a},adjustBodyHeight:function(a){return a},adjustBodyWidth:function(a){return a},onPosition:function(){this.syncShadow()},getFrameWidth:function(){var b=this.el.getFrameWidth("lr")+this.bwrap.getFrameWidth("lr");if(this.frame){var a=this.bwrap.dom.firstChild;b+=(Ext.fly(a).getFrameWidth("l")+Ext.fly(a.firstChild).getFrameWidth("r"));b+=this.mc.getFrameWidth("lr")}return b},getFrameHeight:function(){var a=this.el.getFrameWidth("tb")+this.bwrap.getFrameWidth("tb");a+=(this.tbar?this.tbar.getHeight():0)+(this.bbar?this.bbar.getHeight():0);if(this.frame){a+=this.el.dom.firstChild.offsetHeight+this.ft.dom.offsetHeight+this.mc.getFrameWidth("tb")}else{a+=(this.header?this.header.getHeight():0)+(this.footer?this.footer.getHeight():0)}return a},getInnerWidth:function(){return this.getSize().width-this.getFrameWidth()},getInnerHeight:function(){return this.body.getHeight()},syncShadow:function(){if(this.floating){this.el.sync(true)}},getLayoutTarget:function(){return this.body},getContentTarget:function(){return this.body},setTitle:function(b,a){this.title=b;if(this.header&&this.headerAsText){this.header.child("span").update(b)}if(a){this.setIconClass(a)}this.fireEvent("titlechange",this,b);return this},getUpdater:function(){return this.body.getUpdater()},load:function(){var a=this.body.getUpdater();a.update.apply(a,arguments);return this},beforeDestroy:function(){Ext.Panel.superclass.beforeDestroy.call(this);if(this.header){this.header.removeAllListeners()}if(this.tools){for(var a in this.tools){Ext.destroy(this.tools[a])}}if(this.toolbars.length>0){Ext.each(this.toolbars,function(b){b.un("afterlayout",this.syncHeight,this);b.un("remove",this.syncHeight,this)},this)}if(Ext.isArray(this.buttons)){while(this.buttons.length){Ext.destroy(this.buttons[0])}}if(this.rendered){Ext.destroy(this.ft,this.header,this.footer,this.tbar,this.bbar,this.body,this.mc,this.bwrap,this.dd);if(this.fbar){Ext.destroy(this.fbar,this.fbar.el)}}Ext.destroy(this.toolbars)},createClasses:function(){this.headerCls=this.baseCls+"-header";this.headerTextCls=this.baseCls+"-header-text";this.bwrapCls=this.baseCls+"-bwrap";this.tbarCls=this.baseCls+"-tbar";this.bodyCls=this.baseCls+"-body";this.bbarCls=this.baseCls+"-bbar";this.footerCls=this.baseCls+"-footer"},createGhost:function(a,e,b){var d=document.createElement("div");d.className="x-panel-ghost "+(a?a:"");if(this.header){d.appendChild(this.el.dom.firstChild.cloneNode(true))}Ext.fly(d.appendChild(document.createElement("ul"))).setHeight(this.bwrap.getHeight());d.style.width=this.el.dom.offsetWidth+"px";if(!b){this.container.dom.appendChild(d)}else{Ext.getDom(b).appendChild(d)}if(e!==false&&this.el.useShim!==false){var c=new Ext.Layer({shadow:false,useDisplay:true,constrain:false},d);c.show();return c}else{return new Ext.Element(d)}},doAutoLoad:function(){var a=this.body.getUpdater();if(this.renderer){a.setRenderer(this.renderer)}a.update(Ext.isObject(this.autoLoad)?this.autoLoad:{url:this.autoLoad})},getTool:function(a){return this.tools[a]}});Ext.reg("panel",Ext.Panel);Ext.Editor=function(b,a){if(b.field){this.field=Ext.create(b.field,"textfield");a=Ext.apply({},b);delete a.field}else{this.field=b}Ext.Editor.superclass.constructor.call(this,a)};Ext.extend(Ext.Editor,Ext.Component,{allowBlur:true,value:"",alignment:"c-c?",offsets:[0,0],shadow:"frame",constrain:false,swallowKeys:true,completeOnEnter:true,cancelOnEsc:true,updateEl:false,initComponent:function(){Ext.Editor.superclass.initComponent.call(this);this.addEvents("beforestartedit","startedit","beforecomplete","complete","canceledit","specialkey")},onRender:function(b,a){this.el=new Ext.Layer({shadow:this.shadow,cls:"x-editor",parentEl:b,shim:this.shim,shadowOffset:this.shadowOffset||4,id:this.id,constrain:this.constrain});if(this.zIndex){this.el.setZIndex(this.zIndex)}this.el.setStyle("overflow",Ext.isGecko?"auto":"hidden");if(this.field.msgTarget!="title"){this.field.msgTarget="qtip"}this.field.inEditor=true;this.mon(this.field,{scope:this,blur:this.onBlur,specialkey:this.onSpecialKey});if(this.field.grow){this.mon(this.field,"autosize",this.el.sync,this.el,{delay:1})}this.field.render(this.el).show();this.field.getEl().dom.name="";if(this.swallowKeys){this.field.el.swallowEvent(["keypress","keydown"])}},onSpecialKey:function(g,d){var b=d.getKey(),a=this.completeOnEnter&&b==d.ENTER,c=this.cancelOnEsc&&b==d.ESC;if(a||c){d.stopEvent();if(a){this.completeEdit()}else{this.cancelEdit()}if(g.triggerBlur){g.triggerBlur()}}this.fireEvent("specialkey",g,d)},startEdit:function(b,c){if(this.editing){this.completeEdit()}this.boundEl=Ext.get(b);var a=c!==undefined?c:this.boundEl.dom.innerHTML;if(!this.rendered){this.render(this.parentEl||document.body)}if(this.fireEvent("beforestartedit",this,this.boundEl,a)!==false){this.startValue=a;this.field.reset();this.field.setValue(a);this.realign(true);this.editing=true;this.show()}},doAutoSize:function(){if(this.autoSize){var b=this.boundEl.getSize(),a=this.field.getSize();switch(this.autoSize){case"width":this.setSize(b.width,a.height);break;case"height":this.setSize(a.width,b.height);break;case"none":this.setSize(a.width,a.height);break;default:this.setSize(b.width,b.height)}}},setSize:function(a,b){delete this.field.lastSize;this.field.setSize(a,b);if(this.el){if(Ext.isGecko2||Ext.isOpera||(Ext.isIE7&&Ext.isStrict)){this.el.setSize(a,b)}this.el.sync()}},realign:function(a){if(a===true){this.doAutoSize()}this.el.alignTo(this.boundEl,this.alignment,this.offsets)},completeEdit:function(a){if(!this.editing){return}if(this.field.assertValue){this.field.assertValue()}var b=this.getValue();if(!this.field.isValid()){if(this.revertInvalid!==false){this.cancelEdit(a)}return}if(String(b)===String(this.startValue)&&this.ignoreNoChange){this.hideEdit(a);return}if(this.fireEvent("beforecomplete",this,b,this.startValue)!==false){b=this.getValue();if(this.updateEl&&this.boundEl){this.boundEl.update(b)}this.hideEdit(a);this.fireEvent("complete",this,b,this.startValue)}},onShow:function(){this.el.show();if(this.hideEl!==false){this.boundEl.hide()}this.field.show().focus(false,true);this.fireEvent("startedit",this.boundEl,this.startValue)},cancelEdit:function(a){if(this.editing){var b=this.getValue();this.setValue(this.startValue);this.hideEdit(a);this.fireEvent("canceledit",this,b,this.startValue)}},hideEdit:function(a){if(a!==true){this.editing=false;this.hide()}},onBlur:function(){if(this.allowBlur===true&&this.editing&&this.selectSameEditor!==true){this.completeEdit()}},onHide:function(){if(this.editing){this.completeEdit();return}this.field.blur();if(this.field.collapse){this.field.collapse()}this.el.hide();if(this.hideEl!==false){this.boundEl.show()}},setValue:function(a){this.field.setValue(a)},getValue:function(){return this.field.getValue()},beforeDestroy:function(){Ext.destroyMembers(this,"field");delete this.parentEl;delete this.boundEl}});Ext.reg("editor",Ext.Editor);Ext.ColorPalette=Ext.extend(Ext.Component,{itemCls:"x-color-palette",value:null,clickEvent:"click",ctype:"Ext.ColorPalette",allowReselect:false,colors:["000000","993300","333300","003300","003366","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","969696","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFCC","CCFFFF","99CCFF","CC99FF","FFFFFF"],initComponent:function(){Ext.ColorPalette.superclass.initComponent.call(this);this.addEvents("select");if(this.handler){this.on("select",this.handler,this.scope,true)}},onRender:function(b,a){this.autoEl={tag:"div",cls:this.itemCls};Ext.ColorPalette.superclass.onRender.call(this,b,a);var c=this.tpl||new Ext.XTemplate('<tpl for="."><a href="#" class="color-{.}" hidefocus="on"><em><span style="background:#{.}" unselectable="on"> </span></em></a></tpl>');c.overwrite(this.el,this.colors);this.mon(this.el,this.clickEvent,this.handleClick,this,{delegate:"a"});if(this.clickEvent!="click"){this.mon(this.el,"click",Ext.emptyFn,this,{delegate:"a",preventDefault:true})}},afterRender:function(){Ext.ColorPalette.superclass.afterRender.call(this);if(this.value){var a=this.value;this.value=null;this.select(a,true)}},handleClick:function(b,a){b.preventDefault();if(!this.disabled){var d=a.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];this.select(d.toUpperCase())}},select:function(b,a){b=b.replace("#","");if(b!=this.value||this.allowReselect){var c=this.el;if(this.value){c.child("a.color-"+this.value).removeClass("x-color-palette-sel")}c.child("a.color-"+b).addClass("x-color-palette-sel");this.value=b;if(a!==true){this.fireEvent("select",this,b)}}}});Ext.reg("colorpalette",Ext.ColorPalette);Ext.DatePicker=Ext.extend(Ext.BoxComponent,{todayText:"Today",okText:" OK ",cancelText:"Cancel",todayTip:"{0} (Spacebar)",minText:"This date is before the minimum date",maxText:"This date is after the maximum date",format:"m/d/y",disabledDaysText:"Disabled",disabledDatesText:"Disabled",monthNames:Date.monthNames,dayNames:Date.dayNames,nextText:"Next Month (Control+Right)",prevText:"Previous Month (Control+Left)",monthYearText:"Choose a month (Control+Up/Down to move years)",startDay:0,showToday:true,focusOnSelect:true,initHour:12,initComponent:function(){Ext.DatePicker.superclass.initComponent.call(this);this.value=this.value?this.value.clearTime(true):new Date().clearTime();this.addEvents("select");if(this.handler){this.on("select",this.handler,this.scope||this)}this.initDisabledDays()},initDisabledDays:function(){if(!this.disabledDatesRE&&this.disabledDates){var b=this.disabledDates,a=b.length-1,c="(?:";Ext.each(b,function(g,e){c+=Ext.isDate(g)?"^"+Ext.escapeRe(g.dateFormat(this.format))+"$":b[e];if(e!=a){c+="|"}},this);this.disabledDatesRE=new RegExp(c+")")}},setDisabledDates:function(a){if(Ext.isArray(a)){this.disabledDates=a;this.disabledDatesRE=null}else{this.disabledDatesRE=a}this.initDisabledDays();this.update(this.value,true)},setDisabledDays:function(a){this.disabledDays=a;this.update(this.value,true)},setMinDate:function(a){this.minDate=a;this.update(this.value,true)},setMaxDate:function(a){this.maxDate=a;this.update(this.value,true)},setValue:function(a){this.value=a.clearTime(true);this.update(this.value)},getValue:function(){return this.value},focus:function(){this.update(this.activeDate)},onEnable:function(a){Ext.DatePicker.superclass.onEnable.call(this);this.doDisabled(false);this.update(a?this.value:this.activeDate);if(Ext.isIE){this.el.repaint()}},onDisable:function(){Ext.DatePicker.superclass.onDisable.call(this);this.doDisabled(true);if(Ext.isIE&&!Ext.isIE8){Ext.each([].concat(this.textNodes,this.el.query("th span")),function(a){Ext.fly(a).repaint()})}},doDisabled:function(a){this.keyNav.setDisabled(a);this.prevRepeater.setDisabled(a);this.nextRepeater.setDisabled(a);if(this.showToday){this.todayKeyListener.setDisabled(a);this.todayBtn.setDisabled(a)}},onRender:function(e,b){var a=['<table cellspacing="0">','<tr><td class="x-date-left"><a href="#" title="',this.prevText,'"> </a></td><td class="x-date-middle" align="center"></td><td class="x-date-right"><a href="#" title="',this.nextText,'"> </a></td></tr>','<tr><td colspan="3"><table class="x-date-inner" cellspacing="0"><thead><tr>'],c=this.dayNames,h;for(h=0;h<7;h++){var l=this.startDay+h;if(l>6){l=l-7}a.push("<th><span>",c[l].substr(0,1),"</span></th>")}a[a.length]="</tr></thead><tbody><tr>";for(h=0;h<42;h++){if(h%7===0&&h!==0){a[a.length]="</tr><tr>"}a[a.length]='<td><a href="#" hidefocus="on" class="x-date-date" tabIndex="1"><em><span></span></em></a></td>'}a.push("</tr></tbody></table></td></tr>",this.showToday?'<tr><td colspan="3" class="x-date-bottom" align="center"></td></tr>':"",'</table><div class="x-date-mp"></div>');var k=document.createElement("div");k.className="x-date-picker";k.innerHTML=a.join("");e.dom.insertBefore(k,b);this.el=Ext.get(k);this.eventEl=Ext.get(k.firstChild);this.prevRepeater=new Ext.util.ClickRepeater(this.el.child("td.x-date-left a"),{handler:this.showPrevMonth,scope:this,preventDefault:true,stopDefault:true});this.nextRepeater=new Ext.util.ClickRepeater(this.el.child("td.x-date-right a"),{handler:this.showNextMonth,scope:this,preventDefault:true,stopDefault:true});this.monthPicker=this.el.down("div.x-date-mp");this.monthPicker.enableDisplayMode("block");this.keyNav=new Ext.KeyNav(this.eventEl,{left:function(d){if(d.ctrlKey){this.showPrevMonth()}else{this.update(this.activeDate.add("d",-1))}},right:function(d){if(d.ctrlKey){this.showNextMonth()}else{this.update(this.activeDate.add("d",1))}},up:function(d){if(d.ctrlKey){this.showNextYear()}else{this.update(this.activeDate.add("d",-7))}},down:function(d){if(d.ctrlKey){this.showPrevYear()}else{this.update(this.activeDate.add("d",7))}},pageUp:function(d){this.showNextMonth()},pageDown:function(d){this.showPrevMonth()},enter:function(d){d.stopPropagation();return true},scope:this});this.el.unselectable();this.cells=this.el.select("table.x-date-inner tbody td");this.textNodes=this.el.query("table.x-date-inner tbody span");this.mbtn=new Ext.Button({text:" ",tooltip:this.monthYearText,renderTo:this.el.child("td.x-date-middle",true)});this.mbtn.el.child("em").addClass("x-btn-arrow");if(this.showToday){this.todayKeyListener=this.eventEl.addKeyListener(Ext.EventObject.SPACE,this.selectToday,this);var g=(new Date()).dateFormat(this.format);this.todayBtn=new Ext.Button({renderTo:this.el.child("td.x-date-bottom",true),text:String.format(this.todayText,g),tooltip:String.format(this.todayTip,g),handler:this.selectToday,scope:this})}this.mon(this.eventEl,"mousewheel",this.handleMouseWheel,this);this.mon(this.eventEl,"click",this.handleDateClick,this,{delegate:"a.x-date-date"});this.mon(this.mbtn,"click",this.showMonthPicker,this);this.onEnable(true)},createMonthPicker:function(){if(!this.monthPicker.dom.firstChild){var a=['<table border="0" cellspacing="0">'];for(var b=0;b<6;b++){a.push('<tr><td class="x-date-mp-month"><a href="#">',Date.getShortMonthName(b),"</a></td>",'<td class="x-date-mp-month x-date-mp-sep"><a href="#">',Date.getShortMonthName(b+6),"</a></td>",b===0?'<td class="x-date-mp-ybtn" align="center"><a class="x-date-mp-prev"></a></td><td class="x-date-mp-ybtn" align="center"><a class="x-date-mp-next"></a></td></tr>':'<td class="x-date-mp-year"><a href="#"></a></td><td class="x-date-mp-year"><a href="#"></a></td></tr>')}a.push('<tr class="x-date-mp-btns"><td colspan="4"><button type="button" class="x-date-mp-ok">',this.okText,'</button><button type="button" class="x-date-mp-cancel">',this.cancelText,"</button></td></tr>","</table>");this.monthPicker.update(a.join(""));this.mon(this.monthPicker,"click",this.onMonthClick,this);this.mon(this.monthPicker,"dblclick",this.onMonthDblClick,this);this.mpMonths=this.monthPicker.select("td.x-date-mp-month");this.mpYears=this.monthPicker.select("td.x-date-mp-year");this.mpMonths.each(function(c,d,e){e+=1;if((e%2)===0){c.dom.xmonth=5+Math.round(e*0.5)}else{c.dom.xmonth=Math.round((e-1)*0.5)}})}},showMonthPicker:function(){if(!this.disabled){this.createMonthPicker();var a=this.el.getSize();this.monthPicker.setSize(a);this.monthPicker.child("table").setSize(a);this.mpSelMonth=(this.activeDate||this.value).getMonth();this.updateMPMonth(this.mpSelMonth);this.mpSelYear=(this.activeDate||this.value).getFullYear();this.updateMPYear(this.mpSelYear);this.monthPicker.slideIn("t",{duration:0.2})}},updateMPYear:function(e){this.mpyear=e;var c=this.mpYears.elements;for(var b=1;b<=10;b++){var d=c[b-1],a;if((b%2)===0){a=e+Math.round(b*0.5);d.firstChild.innerHTML=a;d.xyear=a}else{a=e-(5-Math.round(b*0.5));d.firstChild.innerHTML=a;d.xyear=a}this.mpYears.item(b-1)[a==this.mpSelYear?"addClass":"removeClass"]("x-date-mp-sel")}},updateMPMonth:function(a){this.mpMonths.each(function(b,c,d){b[b.dom.xmonth==a?"addClass":"removeClass"]("x-date-mp-sel")})},selectMPMonth:function(a){},onMonthClick:function(g,b){g.stopEvent();var c=new Ext.Element(b),a;if(c.is("button.x-date-mp-cancel")){this.hideMonthPicker()}else{if(c.is("button.x-date-mp-ok")){var h=new Date(this.mpSelYear,this.mpSelMonth,(this.activeDate||this.value).getDate());if(h.getMonth()!=this.mpSelMonth){h=new Date(this.mpSelYear,this.mpSelMonth,1).getLastDateOfMonth()}this.update(h);this.hideMonthPicker()}else{if((a=c.up("td.x-date-mp-month",2))){this.mpMonths.removeClass("x-date-mp-sel");a.addClass("x-date-mp-sel");this.mpSelMonth=a.dom.xmonth}else{if((a=c.up("td.x-date-mp-year",2))){this.mpYears.removeClass("x-date-mp-sel");a.addClass("x-date-mp-sel");this.mpSelYear=a.dom.xyear}else{if(c.is("a.x-date-mp-prev")){this.updateMPYear(this.mpyear-10)}else{if(c.is("a.x-date-mp-next")){this.updateMPYear(this.mpyear+10)}}}}}}},onMonthDblClick:function(d,b){d.stopEvent();var c=new Ext.Element(b),a;if((a=c.up("td.x-date-mp-month",2))){this.update(new Date(this.mpSelYear,a.dom.xmonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker()}else{if((a=c.up("td.x-date-mp-year",2))){this.update(new Date(a.dom.xyear,this.mpSelMonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker()}}},hideMonthPicker:function(a){if(this.monthPicker){if(a===true){this.monthPicker.hide()}else{this.monthPicker.slideOut("t",{duration:0.2})}}},showPrevMonth:function(a){this.update(this.activeDate.add("mo",-1))},showNextMonth:function(a){this.update(this.activeDate.add("mo",1))},showPrevYear:function(){this.update(this.activeDate.add("y",-1))},showNextYear:function(){this.update(this.activeDate.add("y",1))},handleMouseWheel:function(a){a.stopEvent();if(!this.disabled){var b=a.getWheelDelta();if(b>0){this.showPrevMonth()}else{if(b<0){this.showNextMonth()}}}},handleDateClick:function(b,a){b.stopEvent();if(!this.disabled&&a.dateValue&&!Ext.fly(a.parentNode).hasClass("x-date-disabled")){this.cancelFocus=this.focusOnSelect===false;this.setValue(new Date(a.dateValue));delete this.cancelFocus;this.fireEvent("select",this,this.value)}},selectToday:function(){if(this.todayBtn&&!this.todayBtn.disabled){this.setValue(new Date().clearTime());this.fireEvent("select",this,this.value)}},update:function(H,B){if(this.rendered){var a=this.activeDate,q=this.isVisible();this.activeDate=H;if(!B&&a&&this.el){var p=H.getTime();if(a.getMonth()==H.getMonth()&&a.getFullYear()==H.getFullYear()){this.cells.removeClass("x-date-selected");this.cells.each(function(d){if(d.dom.firstChild.dateValue==p){d.addClass("x-date-selected");if(q&&!this.cancelFocus){Ext.fly(d.dom.firstChild).focus(50)}return false}},this);return}}var l=H.getDaysInMonth(),r=H.getFirstDateOfMonth(),g=r.getDay()-this.startDay;if(g<0){g+=7}l+=g;var C=H.add("mo",-1),h=C.getDaysInMonth()-g,e=this.cells.elements,s=this.textNodes,E=(new Date(C.getFullYear(),C.getMonth(),h,this.initHour)),D=new Date().clearTime().getTime(),x=H.clearTime(true).getTime(),v=this.minDate?this.minDate.clearTime(true):Number.NEGATIVE_INFINITY,z=this.maxDate?this.maxDate.clearTime(true):Number.POSITIVE_INFINITY,G=this.disabledDatesRE,u=this.disabledDatesText,J=this.disabledDays?this.disabledDays.join(""):false,F=this.disabledDaysText,A=this.format;if(this.showToday){var n=new Date().clearTime(),c=(n<v||n>z||(G&&A&&G.test(n.dateFormat(A)))||(J&&J.indexOf(n.getDay())!=-1));if(!this.disabled){this.todayBtn.setDisabled(c);this.todayKeyListener[c?"disable":"enable"]()}}var m=function(K,d){d.title="";var i=E.clearTime(true).getTime();d.firstChild.dateValue=i;if(i==D){d.className+=" x-date-today";d.title=K.todayText}if(i==x){d.className+=" x-date-selected";if(q){Ext.fly(d.firstChild).focus(50)}}if(i<v){d.className=" x-date-disabled";d.title=K.minText;return}if(i>z){d.className=" x-date-disabled";d.title=K.maxText;return}if(J){if(J.indexOf(E.getDay())!=-1){d.title=F;d.className=" x-date-disabled"}}if(G&&A){var w=E.dateFormat(A);if(G.test(w)){d.title=u.replace("%0",w);d.className=" x-date-disabled"}}};var y=0;for(;y<g;y++){s[y].innerHTML=(++h);E.setDate(E.getDate()+1);e[y].className="x-date-prevday";m(this,e[y])}for(;y<l;y++){var b=y-g+1;s[y].innerHTML=(b);E.setDate(E.getDate()+1);e[y].className="x-date-active";m(this,e[y])}var I=0;for(;y<42;y++){s[y].innerHTML=(++I);E.setDate(E.getDate()+1);e[y].className="x-date-nextday";m(this,e[y])}this.mbtn.setText(this.monthNames[H.getMonth()]+" "+H.getFullYear());if(!this.internalRender){var k=this.el.dom.firstChild,o=k.offsetWidth;this.el.setWidth(o+this.el.getBorderWidth("lr"));Ext.fly(k).setWidth(o);this.internalRender=true;if(Ext.isOpera&&!this.secondPass){k.rows[0].cells[1].style.width=(o-(k.rows[0].cells[0].offsetWidth+k.rows[0].cells[2].offsetWidth))+"px";this.secondPass=true;this.update.defer(10,this,[H])}}}},beforeDestroy:function(){if(this.rendered){Ext.destroy(this.keyNav,this.monthPicker,this.eventEl,this.mbtn,this.nextRepeater,this.prevRepeater,this.cells.el,this.todayBtn);delete this.textNodes;delete this.cells.elements}}});Ext.reg("datepicker",Ext.DatePicker);Ext.LoadMask=function(c,b){this.el=Ext.get(c);Ext.apply(this,b);if(this.store){this.store.on({scope:this,beforeload:this.onBeforeLoad,load:this.onLoad,exception:this.onLoad});this.removeMask=Ext.value(this.removeMask,false)}else{var a=this.el.getUpdater();a.showLoadIndicator=false;a.on({scope:this,beforeupdate:this.onBeforeLoad,update:this.onLoad,failure:this.onLoad});this.removeMask=Ext.value(this.removeMask,true)}};Ext.LoadMask.prototype={msg:"Loading...",msgCls:"x-mask-loading",disabled:false,disable:function(){this.disabled=true},enable:function(){this.disabled=false},onLoad:function(){this.el.unmask(this.removeMask)},onBeforeLoad:function(){if(!this.disabled){this.el.mask(this.msg,this.msgCls)}},show:function(){this.onBeforeLoad()},hide:function(){this.onLoad()},destroy:function(){if(this.store){this.store.un("beforeload",this.onBeforeLoad,this);this.store.un("load",this.onLoad,this);this.store.un("exception",this.onLoad,this)}else{var a=this.el.getUpdater();a.un("beforeupdate",this.onBeforeLoad,this);a.un("update",this.onLoad,this);a.un("failure",this.onLoad,this)}}};Ext.ns("Ext.slider");Ext.slider.Thumb=Ext.extend(Object,{dragging:false,constructor:function(a){Ext.apply(this,a||{},{cls:"x-slider-thumb",constrain:false});Ext.slider.Thumb.superclass.constructor.call(this,a);if(this.slider.vertical){Ext.apply(this,Ext.slider.Thumb.Vertical)}},render:function(){this.el=this.slider.innerEl.insertFirst({cls:this.cls});this.initEvents()},enable:function(){this.disabled=false;this.el.removeClass(this.slider.disabledClass)},disable:function(){this.disabled=true;this.el.addClass(this.slider.disabledClass)},initEvents:function(){var a=this.el;a.addClassOnOver("x-slider-thumb-over");this.tracker=new Ext.dd.DragTracker({onBeforeStart:this.onBeforeDragStart.createDelegate(this),onStart:this.onDragStart.createDelegate(this),onDrag:this.onDrag.createDelegate(this),onEnd:this.onDragEnd.createDelegate(this),tolerance:3,autoStart:300});this.tracker.initEl(a)},onBeforeDragStart:function(a){if(this.disabled){return false}else{this.slider.promoteThumb(this);return true}},onDragStart:function(a){this.el.addClass("x-slider-thumb-drag");this.dragging=true;this.dragStartValue=this.value;this.slider.fireEvent("dragstart",this.slider,a,this)},onDrag:function(g){var c=this.slider,b=this.index,d=this.getNewValue();if(this.constrain){var a=c.thumbs[b+1],h=c.thumbs[b-1];if(h!=undefined&&d<=h.value){d=h.value}if(a!=undefined&&d>=a.value){d=a.value}}c.setValue(b,d,false);c.fireEvent("drag",c,g,this)},getNewValue:function(){var a=this.slider,b=a.innerEl.translatePoints(this.tracker.getXY());return Ext.util.Format.round(a.reverseValue(b.left),a.decimalPrecision)},onDragEnd:function(c){var a=this.slider,b=this.value;this.el.removeClass("x-slider-thumb-drag");this.dragging=false;a.fireEvent("dragend",a,c);if(this.dragStartValue!=b){a.fireEvent("changecomplete",a,b,this)}},destroy:function(){Ext.destroyMembers(this,"tracker","el")}});Ext.slider.MultiSlider=Ext.extend(Ext.BoxComponent,{vertical:false,minValue:0,maxValue:100,decimalPrecision:0,keyIncrement:1,increment:0,clickRange:[5,15],clickToChange:true,animate:true,constrainThumbs:true,topThumbZIndex:10000,initComponent:function(){if(!Ext.isDefined(this.value)){this.value=this.minValue}this.thumbs=[];Ext.slider.MultiSlider.superclass.initComponent.call(this);this.keyIncrement=Math.max(this.increment,this.keyIncrement);this.addEvents("beforechange","change","changecomplete","dragstart","drag","dragend");if(this.values==undefined||Ext.isEmpty(this.values)){this.values=[0]}var a=this.values;for(var b=0;b<a.length;b++){this.addThumb(a[b])}if(this.vertical){Ext.apply(this,Ext.slider.Vertical)}},addThumb:function(b){var a=new Ext.slider.Thumb({value:b,slider:this,index:this.thumbs.length,constrain:this.constrainThumbs});this.thumbs.push(a);if(this.rendered){a.render()}},promoteThumb:function(d){var a=this.thumbs,g,b;for(var e=0,c=a.length;e<c;e++){b=a[e];if(b==d){g=this.topThumbZIndex}else{g=""}b.el.setStyle("zIndex",g)}},onRender:function(){this.autoEl={cls:"x-slider "+(this.vertical?"x-slider-vert":"x-slider-horz"),cn:{cls:"x-slider-end",cn:{cls:"x-slider-inner",cn:[{tag:"a",cls:"x-slider-focus",href:"#",tabIndex:"-1",hidefocus:"on"}]}}};Ext.slider.MultiSlider.superclass.onRender.apply(this,arguments);this.endEl=this.el.first();this.innerEl=this.endEl.first();this.focusEl=this.innerEl.child(".x-slider-focus");for(var b=0;b<this.thumbs.length;b++){this.thumbs[b].render()}var a=this.innerEl.child(".x-slider-thumb");this.halfThumb=(this.vertical?a.getHeight():a.getWidth())/2;this.initEvents()},initEvents:function(){this.mon(this.el,{scope:this,mousedown:this.onMouseDown,keydown:this.onKeyDown});this.focusEl.swallowEvent("click",true)},onMouseDown:function(d){if(this.disabled){return}var c=false;for(var b=0;b<this.thumbs.length;b++){c=c||d.target==this.thumbs[b].el.dom}if(this.clickToChange&&!c){var a=this.innerEl.translatePoints(d.getXY());this.onClickChange(a)}this.focus()},onClickChange:function(c){if(c.top>this.clickRange[0]&&c.top<this.clickRange[1]){var a=this.getNearest(c,"left"),b=a.index;this.setValue(b,Ext.util.Format.round(this.reverseValue(c.left),this.decimalPrecision),undefined,true)}},getNearest:function(l,b){var n=b=="top"?this.innerEl.getHeight()-l[b]:l[b],g=this.reverseValue(n),k=(this.maxValue-this.minValue)+5,e=0,c=null;for(var d=0;d<this.thumbs.length;d++){var a=this.thumbs[d],m=a.value,h=Math.abs(m-g);if(Math.abs(h<=k)){c=a;e=d;k=h}}return c},onKeyDown:function(b){if(this.disabled||this.thumbs.length!==1){b.preventDefault();return}var a=b.getKey(),c;switch(a){case b.UP:case b.RIGHT:b.stopEvent();c=b.ctrlKey?this.maxValue:this.getValue(0)+this.keyIncrement;this.setValue(0,c,undefined,true);break;case b.DOWN:case b.LEFT:b.stopEvent();c=b.ctrlKey?this.minValue:this.getValue(0)-this.keyIncrement;this.setValue(0,c,undefined,true);break;default:b.preventDefault()}},doSnap:function(b){if(!(this.increment&&b)){return b}var d=b,c=this.increment,a=b%c;if(a!=0){d-=a;if(a*2>=c){d+=c}else{if(a*2<-c){d-=c}}}return d.constrain(this.minValue,this.maxValue)},afterRender:function(){Ext.slider.MultiSlider.superclass.afterRender.apply(this,arguments);for(var c=0;c<this.thumbs.length;c++){var b=this.thumbs[c];if(b.value!==undefined){var a=this.normalizeValue(b.value);if(a!==b.value){this.setValue(c,a,false)}else{this.moveThumb(c,this.translateValue(a),false)}}}},getRatio:function(){var a=this.innerEl.getWidth(),b=this.maxValue-this.minValue;return b==0?a:(a/b)},normalizeValue:function(a){a=this.doSnap(a);a=Ext.util.Format.round(a,this.decimalPrecision);a=a.constrain(this.minValue,this.maxValue);return a},setMinValue:function(e){this.minValue=e;var d=0,b=this.thumbs,a=b.length,c;for(;d<a;++d){c=b[d];c.value=c.value<e?e:c.value}this.syncThumb()},setMaxValue:function(e){this.maxValue=e;var d=0,b=this.thumbs,a=b.length,c;for(;d<a;++d){c=b[d];c.value=c.value>e?e:c.value}this.syncThumb()},setValue:function(d,c,b,g){var a=this.thumbs[d],e=a.el;c=this.normalizeValue(c);if(c!==a.value&&this.fireEvent("beforechange",this,c,a.value,a)!==false){a.value=c;if(this.rendered){this.moveThumb(d,this.translateValue(c),b!==false);this.fireEvent("change",this,c,a);if(g){this.fireEvent("changecomplete",this,c,a)}}}},translateValue:function(a){var b=this.getRatio();return(a*b)-(this.minValue*b)-this.halfThumb},reverseValue:function(b){var a=this.getRatio();return(b+(this.minValue*a))/a},moveThumb:function(d,c,b){var a=this.thumbs[d].el;if(!b||this.animate===false){a.setLeft(c)}else{a.shift({left:c,stopFx:true,duration:0.35})}},focus:function(){this.focusEl.focus(10)},onResize:function(c,e){var b=this.thumbs,a=b.length,d=0;for(;d<a;++d){b[d].el.stopFx()}if(Ext.isNumber(c)){this.innerEl.setWidth(c-(this.el.getPadding("l")+this.endEl.getPadding("r")))}this.syncThumb();Ext.slider.MultiSlider.superclass.onResize.apply(this,arguments)},onDisable:function(){Ext.slider.MultiSlider.superclass.onDisable.call(this);for(var b=0;b<this.thumbs.length;b++){var a=this.thumbs[b],c=a.el;a.disable();if(Ext.isIE){var d=c.getXY();c.hide();this.innerEl.addClass(this.disabledClass).dom.disabled=true;if(!this.thumbHolder){this.thumbHolder=this.endEl.createChild({cls:"x-slider-thumb "+this.disabledClass})}this.thumbHolder.show().setXY(d)}}},onEnable:function(){Ext.slider.MultiSlider.superclass.onEnable.call(this);for(var b=0;b<this.thumbs.length;b++){var a=this.thumbs[b],c=a.el;a.enable();if(Ext.isIE){this.innerEl.removeClass(this.disabledClass).dom.disabled=false;if(this.thumbHolder){this.thumbHolder.hide()}c.show();this.syncThumb()}}},syncThumb:function(){if(this.rendered){for(var a=0;a<this.thumbs.length;a++){this.moveThumb(a,this.translateValue(this.thumbs[a].value))}}},getValue:function(a){return this.thumbs[a].value},getValues:function(){var a=[];for(var b=0;b<this.thumbs.length;b++){a.push(this.thumbs[b].value)}return a},beforeDestroy:function(){var b=this.thumbs;for(var c=0,a=b.length;c<a;++c){b[c].destroy();b[c]=null}Ext.destroyMembers(this,"endEl","innerEl","focusEl","thumbHolder");Ext.slider.MultiSlider.superclass.beforeDestroy.call(this)}});Ext.reg("multislider",Ext.slider.MultiSlider);Ext.slider.SingleSlider=Ext.extend(Ext.slider.MultiSlider,{constructor:function(a){a=a||{};Ext.applyIf(a,{values:[a.value||0]});Ext.slider.SingleSlider.superclass.constructor.call(this,a)},getValue:function(){return Ext.slider.SingleSlider.superclass.getValue.call(this,0)},setValue:function(d,b){var c=Ext.toArray(arguments),a=c.length;if(a==1||(a<=3&&typeof arguments[1]!="number")){c.unshift(0)}return Ext.slider.SingleSlider.superclass.setValue.apply(this,c)},syncThumb:function(){return Ext.slider.SingleSlider.superclass.syncThumb.apply(this,[0].concat(arguments))},getNearest:function(){return this.thumbs[0]}});Ext.Slider=Ext.slider.SingleSlider;Ext.reg("slider",Ext.slider.SingleSlider);Ext.slider.Vertical={onResize:function(a,b){this.innerEl.setHeight(b-(this.el.getPadding("t")+this.endEl.getPadding("b")));this.syncThumb()},getRatio:function(){var b=this.innerEl.getHeight(),a=this.maxValue-this.minValue;return b/a},moveThumb:function(d,c,b){var a=this.thumbs[d],e=a.el;if(!b||this.animate===false){e.setBottom(c)}else{e.shift({bottom:c,stopFx:true,duration:0.35})}},onClickChange:function(c){if(c.left>this.clickRange[0]&&c.left<this.clickRange[1]){var a=this.getNearest(c,"top"),b=a.index,d=this.minValue+this.reverseValue(this.innerEl.getHeight()-c.top);this.setValue(b,Ext.util.Format.round(d,this.decimalPrecision),undefined,true)}}};Ext.slider.Thumb.Vertical={getNewValue:function(){var b=this.slider,c=b.innerEl,d=c.translatePoints(this.tracker.getXY()),a=c.getHeight()-d.top;return b.minValue+Ext.util.Format.round(a/b.getRatio(),b.decimalPrecision)}};Ext.ProgressBar=Ext.extend(Ext.BoxComponent,{baseCls:"x-progress",animate:false,waitTimer:null,initComponent:function(){Ext.ProgressBar.superclass.initComponent.call(this);this.addEvents("update")},onRender:function(d,a){var c=new Ext.Template('<div class="{cls}-wrap">','<div class="{cls}-inner">','<div class="{cls}-bar">','<div class="{cls}-text">',"<div> </div>","</div>","</div>",'<div class="{cls}-text {cls}-text-back">',"<div> </div>","</div>","</div>","</div>");this.el=a?c.insertBefore(a,{cls:this.baseCls},true):c.append(d,{cls:this.baseCls},true);if(this.id){this.el.dom.id=this.id}var b=this.el.dom.firstChild;this.progressBar=Ext.get(b.firstChild);if(this.textEl){this.textEl=Ext.get(this.textEl);delete this.textTopEl}else{this.textTopEl=Ext.get(this.progressBar.dom.firstChild);var e=Ext.get(b.childNodes[1]);this.textTopEl.setStyle("z-index",99).addClass("x-hidden");this.textEl=new Ext.CompositeElement([this.textTopEl.dom.firstChild,e.dom.firstChild]);this.textEl.setWidth(b.offsetWidth)}this.progressBar.setHeight(b.offsetHeight)},afterRender:function(){Ext.ProgressBar.superclass.afterRender.call(this);if(this.value){this.updateProgress(this.value,this.text)}else{this.updateText(this.text)}},updateProgress:function(c,d,b){this.value=c||0;if(d){this.updateText(d)}if(this.rendered&&!this.isDestroyed){var a=Math.floor(c*this.el.dom.firstChild.offsetWidth);this.progressBar.setWidth(a,b===true||(b!==false&&this.animate));if(this.textTopEl){this.textTopEl.removeClass("x-hidden").setWidth(a)}}this.fireEvent("update",this,c,d);return this},wait:function(b){if(!this.waitTimer){var a=this;b=b||{};this.updateText(b.text);this.waitTimer=Ext.TaskMgr.start({run:function(c){var d=b.increment||10;c-=1;this.updateProgress(((((c+d)%d)+1)*(100/d))*0.01,null,b.animate)},interval:b.interval||1000,duration:b.duration,onStop:function(){if(b.fn){b.fn.apply(b.scope||this)}this.reset()},scope:a})}return this},isWaiting:function(){return this.waitTimer!==null},updateText:function(a){this.text=a||" ";if(this.rendered){this.textEl.update(this.text)}return this},syncProgressBar:function(){if(this.value){this.updateProgress(this.value,this.text)}return this},setSize:function(a,c){Ext.ProgressBar.superclass.setSize.call(this,a,c);if(this.textTopEl){var b=this.el.dom.firstChild;this.textEl.setSize(b.offsetWidth,b.offsetHeight)}this.syncProgressBar();return this},reset:function(a){this.updateProgress(0);if(this.textTopEl){this.textTopEl.addClass("x-hidden")}this.clearTimer();if(a===true){this.hide()}return this},clearTimer:function(){if(this.waitTimer){this.waitTimer.onStop=null;Ext.TaskMgr.stop(this.waitTimer);this.waitTimer=null}},onDestroy:function(){this.clearTimer();if(this.rendered){if(this.textEl.isComposite){this.textEl.clear()}Ext.destroyMembers(this,"textEl","progressBar","textTopEl")}Ext.ProgressBar.superclass.onDestroy.call(this)}});Ext.reg("progress",Ext.ProgressBar);(function(){var a=Ext.EventManager;var b=Ext.lib.Dom;Ext.dd.DragDrop=function(e,c,d){if(e){this.init(e,c,d)}};Ext.dd.DragDrop.prototype={id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true},moveOnly:false,unlock:function(){this.locked=false},isTarget:true,padding:null,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,b4StartDrag:function(c,d){},startDrag:function(c,d){},b4Drag:function(c){},onDrag:function(c){},onDragEnter:function(c,d){},b4DragOver:function(c){},onDragOver:function(c,d){},b4DragOut:function(c){},onDragOut:function(c,d){},b4DragDrop:function(c){},onDragDrop:function(c,d){},onInvalidDrop:function(c){},b4EndDrag:function(c){},endDrag:function(c){},b4MouseDown:function(c){},onMouseDown:function(c){},onMouseUp:function(c){},onAvailable:function(){},defaultPadding:{left:0,right:0,top:0,bottom:0},constrainTo:function(k,h,p){if(Ext.isNumber(h)){h={left:h,right:h,top:h,bottom:h}}h=h||this.defaultPadding;var m=Ext.get(this.getEl()).getBox(),d=Ext.get(k),o=d.getScroll(),l,e=d.dom;if(e==document.body){l={x:o.left,y:o.top,width:Ext.lib.Dom.getViewWidth(),height:Ext.lib.Dom.getViewHeight()}}else{var n=d.getXY();l={x:n[0],y:n[1],width:e.clientWidth,height:e.clientHeight}}var i=m.y-l.y,g=m.x-l.x;this.resetConstraints();this.setXConstraint(g-(h.left||0),l.width-g-m.width-(h.right||0),this.xTickSize);this.setYConstraint(i-(h.top||0),l.height-i-m.height-(h.bottom||0),this.yTickSize)},getEl:function(){if(!this._domRef){this._domRef=Ext.getDom(this.id)}return this._domRef},getDragEl:function(){return Ext.getDom(this.dragElId)},init:function(e,c,d){this.initTarget(e,c,d);a.on(this.id,"mousedown",this.handleMouseDown,this)},initTarget:function(e,c,d){this.config=d||{};this.DDM=Ext.dd.DDM;this.groups={};if(typeof e!=="string"){e=Ext.id(e)}this.id=e;this.addToGroup((c)?c:"default");this.handleElId=e;this.setDragElId(e);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();this.handleOnAvailable()},applyConfig:function(){this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false)},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable()},setPadding:function(e,c,g,d){if(!c&&0!==c){this.padding=[e,e,e,e]}else{if(!g&&0!==g){this.padding=[e,c,e,c]}else{this.padding=[e,c,g,d]}}},setInitPosition:function(g,e){var h=this.getEl();if(!this.DDM.verifyEl(h)){return}var d=g||0;var c=e||0;var i=b.getXY(h);this.initPageX=i[0]-d;this.initPageY=i[1]-c;this.lastPageX=i[0];this.lastPageY=i[1];this.setStartPosition(i)},setStartPosition:function(d){var c=d||b.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=c[0];this.startPageY=c[1]},addToGroup:function(c){this.groups[c]=true;this.DDM.regDragDrop(this,c)},removeFromGroup:function(c){if(this.groups[c]){delete this.groups[c]}this.DDM.removeDDFromGroup(this,c)},setDragElId:function(c){this.dragElId=c},setHandleElId:function(c){if(typeof c!=="string"){c=Ext.id(c)}this.handleElId=c;this.DDM.regHandle(this.id,c)},setOuterHandleElId:function(c){if(typeof c!=="string"){c=Ext.id(c)}a.on(c,"mousedown",this.handleMouseDown,this);this.setHandleElId(c);this.hasOuterHandles=true},unreg:function(){a.un(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this)},destroy:function(){this.unreg()},isLocked:function(){return(this.DDM.isLocked()||this.locked)},handleMouseDown:function(g,d){if(this.primaryButtonOnly&&g.button!=0){return}if(this.isLocked()){return}this.DDM.refreshCache(this.groups);var c=new Ext.lib.Point(Ext.lib.Event.getPageX(g),Ext.lib.Event.getPageY(g));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(c,this)){}else{if(this.clickValidator(g)){this.setStartPosition();this.b4MouseDown(g);this.onMouseDown(g);this.DDM.handleMouseDown(g,this);this.DDM.stopEvent(g)}else{}}},clickValidator:function(d){var c=d.getTarget();return(this.isValidHandleChild(c)&&(this.id==this.handleElId||this.DDM.handleWasClicked(c,this.id)))},addInvalidHandleType:function(c){var d=c.toUpperCase();this.invalidHandleTypes[d]=d},addInvalidHandleId:function(c){if(typeof c!=="string"){c=Ext.id(c)}this.invalidHandleIds[c]=c},addInvalidHandleClass:function(c){this.invalidHandleClasses.push(c)},removeInvalidHandleType:function(c){var d=c.toUpperCase();delete this.invalidHandleTypes[d]},removeInvalidHandleId:function(c){if(typeof c!=="string"){c=Ext.id(c)}delete this.invalidHandleIds[c]},removeInvalidHandleClass:function(d){for(var e=0,c=this.invalidHandleClasses.length;e<c;++e){if(this.invalidHandleClasses[e]==d){delete this.invalidHandleClasses[e]}}},isValidHandleChild:function(h){var g=true;var l;try{l=h.nodeName.toUpperCase()}catch(k){l=h.nodeName}g=g&&!this.invalidHandleTypes[l];g=g&&!this.invalidHandleIds[h.id];for(var d=0,c=this.invalidHandleClasses.length;g&&d<c;++d){g=!Ext.fly(h).hasClass(this.invalidHandleClasses[d])}return g},setXTicks:function(g,c){this.xTicks=[];this.xTickSize=c;var e={};for(var d=this.initPageX;d>=this.minX;d=d-c){if(!e[d]){this.xTicks[this.xTicks.length]=d;e[d]=true}}for(d=this.initPageX;d<=this.maxX;d=d+c){if(!e[d]){this.xTicks[this.xTicks.length]=d;e[d]=true}}this.xTicks.sort(this.DDM.numericSort)},setYTicks:function(g,c){this.yTicks=[];this.yTickSize=c;var e={};for(var d=this.initPageY;d>=this.minY;d=d-c){if(!e[d]){this.yTicks[this.yTicks.length]=d;e[d]=true}}for(d=this.initPageY;d<=this.maxY;d=d+c){if(!e[d]){this.yTicks[this.yTicks.length]=d;e[d]=true}}this.yTicks.sort(this.DDM.numericSort)},setXConstraint:function(e,d,c){this.leftConstraint=e;this.rightConstraint=d;this.minX=this.initPageX-e;this.maxX=this.initPageX+d;if(c){this.setXTicks(this.initPageX,c)}this.constrainX=true},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks()},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0},setYConstraint:function(c,e,d){this.topConstraint=c;this.bottomConstraint=e;this.minY=this.initPageY-c;this.maxY=this.initPageY+e;if(d){this.setYTicks(this.initPageY,d)}this.constrainY=true},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var d=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var c=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(d,c)}else{this.setInitPosition()}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize)}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize)}},getTick:function(l,g){if(!g){return l}else{if(g[0]>=l){return g[0]}else{for(var d=0,c=g.length;d<c;++d){var e=d+1;if(g[e]&&g[e]>=l){var k=l-g[d];var h=g[e]-l;return(h>k)?g[d]:g[e]}}return g[g.length-1]}}},toString:function(){return("DragDrop "+this.id)}}})();if(!Ext.dd.DragDropMgr){Ext.dd.DragDropMgr=function(){var a=Ext.EventManager;return{ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,init:function(){this.initialized=true},POINT:0,INTERSECT:1,mode:0,_execOnAll:function(d,c){for(var e in this.ids){for(var b in this.ids[e]){var g=this.ids[e][b];if(!this.isTypeOfDD(g)){continue}g[d].apply(g,c)}}},_onLoad:function(){this.init();a.on(document,"mouseup",this.handleMouseUp,this,true);a.on(document,"mousemove",this.handleMouseMove,this,true);a.on(window,"unload",this._onUnload,this,true);a.on(window,"resize",this._onResize,this,true)},_onResize:function(b){this._execOnAll("resetConstraints",[])},lock:function(){this.locked=true},unlock:function(){this.locked=false},isLocked:function(){return this.locked},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:350,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,regDragDrop:function(c,b){if(!this.initialized){this.init()}if(!this.ids[b]){this.ids[b]={}}this.ids[b][c.id]=c},removeDDFromGroup:function(d,b){if(!this.ids[b]){this.ids[b]={}}var c=this.ids[b];if(c&&c[d.id]){delete c[d.id]}},_remove:function(c){for(var b in c.groups){if(b&&this.ids[b]&&this.ids[b][c.id]){delete this.ids[b][c.id]}}delete this.handleIds[c.id]},regHandle:function(c,b){if(!this.handleIds[c]){this.handleIds[c]={}}this.handleIds[c][b]=b},isDragDrop:function(b){return(this.getDDById(b))?true:false},getRelated:function(h,c){var g=[];for(var e in h.groups){for(var d in this.ids[e]){var b=this.ids[e][d];if(!this.isTypeOfDD(b)){continue}if(!c||b.isTarget){g[g.length]=b}}}return g},isLegalTarget:function(g,e){var c=this.getRelated(g,true);for(var d=0,b=c.length;d<b;++d){if(c[d].id==e.id){return true}}return false},isTypeOfDD:function(b){return(b&&b.__ygDragDrop)},isHandle:function(c,b){return(this.handleIds[c]&&this.handleIds[c][b])},getDDById:function(c){for(var b in this.ids){if(this.ids[b][c]){return this.ids[b][c]}}return null},handleMouseDown:function(d,c){if(Ext.QuickTips){Ext.QuickTips.ddDisable()}if(this.dragCurrent){this.handleMouseUp(d)}this.currentTarget=d.getTarget();this.dragCurrent=c;var b=c.getEl();this.startX=d.getPageX();this.startY=d.getPageY();this.deltaX=this.startX-b.offsetLeft;this.deltaY=this.startY-b.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var e=Ext.dd.DDM;e.startDrag(e.startX,e.startY)},this.clickTimeThresh)},startDrag:function(b,c){clearTimeout(this.clickTimeout);if(this.dragCurrent){this.dragCurrent.b4StartDrag(b,c);this.dragCurrent.startDrag(b,c)}this.dragThreshMet=true},handleMouseUp:function(b){if(Ext.QuickTips){Ext.QuickTips.ddEnable()}if(!this.dragCurrent){return}clearTimeout(this.clickTimeout);if(this.dragThreshMet){this.fireEvents(b,true)}else{}this.stopDrag(b);this.stopEvent(b)},stopEvent:function(b){if(this.stopPropagation){b.stopPropagation()}if(this.preventDefault){b.preventDefault()}},stopDrag:function(b){if(this.dragCurrent){if(this.dragThreshMet){this.dragCurrent.b4EndDrag(b);this.dragCurrent.endDrag(b)}this.dragCurrent.onMouseUp(b)}this.dragCurrent=null;this.dragOvers={}},handleMouseMove:function(d){if(!this.dragCurrent){return true}if(Ext.isIE&&(d.button!==0&&d.button!==1&&d.button!==2)){this.stopEvent(d);return this.handleMouseUp(d)}if(!this.dragThreshMet){var c=Math.abs(this.startX-d.getPageX());var b=Math.abs(this.startY-d.getPageY());if(c>this.clickPixelThresh||b>this.clickPixelThresh){this.startDrag(this.startX,this.startY)}}if(this.dragThreshMet){this.dragCurrent.b4Drag(d);this.dragCurrent.onDrag(d);if(!this.dragCurrent.moveOnly){this.fireEvents(d,false)}}this.stopEvent(d);return true},fireEvents:function(o,p){var r=this.dragCurrent;if(!r||r.isLocked()){return}var s=o.getPoint();var b=[];var g=[];var m=[];var k=[];var d=[];for(var h in this.dragOvers){var c=this.dragOvers[h];if(!this.isTypeOfDD(c)){continue}if(!this.isOverTarget(s,c,this.mode)){g.push(c)}b[h]=true;delete this.dragOvers[h]}for(var q in r.groups){if("string"!=typeof q){continue}for(h in this.ids[q]){var l=this.ids[q][h];if(!this.isTypeOfDD(l)){continue}if(l.isTarget&&!l.isLocked()&&((l!=r)||(r.ignoreSelf===false))){if(this.isOverTarget(s,l,this.mode)){if(p){k.push(l)}else{if(!b[l.id]){d.push(l)}else{m.push(l)}this.dragOvers[l.id]=l}}}}}if(this.mode){if(g.length){r.b4DragOut(o,g);r.onDragOut(o,g)}if(d.length){r.onDragEnter(o,d)}if(m.length){r.b4DragOver(o,m);r.onDragOver(o,m)}if(k.length){r.b4DragDrop(o,k);r.onDragDrop(o,k)}}else{var n=0;for(h=0,n=g.length;h<n;++h){r.b4DragOut(o,g[h].id);r.onDragOut(o,g[h].id)}for(h=0,n=d.length;h<n;++h){r.onDragEnter(o,d[h].id)}for(h=0,n=m.length;h<n;++h){r.b4DragOver(o,m[h].id);r.onDragOver(o,m[h].id)}for(h=0,n=k.length;h<n;++h){r.b4DragDrop(o,k[h].id);r.onDragDrop(o,k[h].id)}}if(p&&!k.length){r.onInvalidDrop(o)}},getBestMatch:function(d){var g=null;var c=d.length;if(c==1){g=d[0]}else{for(var e=0;e<c;++e){var b=d[e];if(b.cursorIsOver){g=b;break}else{if(!g||g.overlap.getArea()<b.overlap.getArea()){g=b}}}}return g},refreshCache:function(c){for(var b in c){if("string"!=typeof b){continue}for(var d in this.ids[b]){var e=this.ids[b][d];if(this.isTypeOfDD(e)){var g=this.getLocation(e);if(g){this.locationCache[e.id]=g}else{delete this.locationCache[e.id]}}}}},verifyEl:function(c){if(c){var b;if(Ext.isIE){try{b=c.offsetParent}catch(d){}}else{b=c.offsetParent}if(b){return true}}return false},getLocation:function(k){if(!this.isTypeOfDD(k)){return null}var h=k.getEl(),o,g,d,q,p,s,c,n,i;try{o=Ext.lib.Dom.getXY(h)}catch(m){}if(!o){return null}g=o[0];d=g+h.offsetWidth;q=o[1];p=q+h.offsetHeight;s=q-k.padding[0];c=d+k.padding[1];n=p+k.padding[2];i=g-k.padding[3];return new Ext.lib.Region(s,c,n,i)},isOverTarget:function(l,b,d){var g=this.locationCache[b.id];if(!g||!this.useCache){g=this.getLocation(b);this.locationCache[b.id]=g}if(!g){return false}b.cursorIsOver=g.contains(l);var k=this.dragCurrent;if(!k||!k.getTargetCoord||(!d&&!k.constrainX&&!k.constrainY)){return b.cursorIsOver}b.overlap=null;var h=k.getTargetCoord(l.x,l.y);var c=k.getDragEl();var e=new Ext.lib.Region(h.y,h.x+c.offsetWidth,h.y+c.offsetHeight,h.x);var i=e.intersect(g);if(i){b.overlap=i;return(d)?true:b.cursorIsOver}else{return false}},_onUnload:function(c,b){Ext.dd.DragDropMgr.unregAll()},unregAll:function(){if(this.dragCurrent){this.stopDrag();this.dragCurrent=null}this._execOnAll("unreg",[]);for(var b in this.elementCache){delete this.elementCache[b]}this.elementCache={};this.ids={}},elementCache:{},getElWrapper:function(c){var b=this.elementCache[c];if(!b||!b.el){b=this.elementCache[c]=new this.ElementWrapper(Ext.getDom(c))}return b},getElement:function(b){return Ext.getDom(b)},getCss:function(c){var b=Ext.getDom(c);return(b)?b.style:null},ElementWrapper:function(b){this.el=b||null;this.id=this.el&&b.id;this.css=this.el&&b.style},getPosX:function(b){return Ext.lib.Dom.getX(b)},getPosY:function(b){return Ext.lib.Dom.getY(b)},swapNode:function(d,b){if(d.swapNode){d.swapNode(b)}else{var e=b.parentNode;var c=b.nextSibling;if(c==d){e.insertBefore(d,b)}else{if(b==d.nextSibling){e.insertBefore(b,d)}else{d.parentNode.replaceChild(b,d);e.insertBefore(d,c)}}}},getScroll:function(){var d,b,e=document.documentElement,c=document.body;if(e&&(e.scrollTop||e.scrollLeft)){d=e.scrollTop;b=e.scrollLeft}else{if(c){d=c.scrollTop;b=c.scrollLeft}else{}}return{top:d,left:b}},getStyle:function(c,b){return Ext.fly(c).getStyle(b)},getScrollTop:function(){return this.getScroll().top},getScrollLeft:function(){return this.getScroll().left},moveToEl:function(b,d){var c=Ext.lib.Dom.getXY(d);Ext.lib.Dom.setXY(b,c)},numericSort:function(d,c){return(d-c)},_timeoutCount:0,_addListeners:function(){var b=Ext.dd.DDM;if(Ext.lib.Event&&document){b._onLoad()}else{if(b._timeoutCount>2000){}else{setTimeout(b._addListeners,10);if(document&&document.body){b._timeoutCount+=1}}}},handleWasClicked:function(b,d){if(this.isHandle(d,b.id)){return true}else{var c=b.parentNode;while(c){if(this.isHandle(d,c.id)){return true}else{c=c.parentNode}}}return false}}}();Ext.dd.DDM=Ext.dd.DragDropMgr;Ext.dd.DDM._addListeners()}Ext.dd.DD=function(c,a,b){if(c){this.init(c,a,b)}};Ext.extend(Ext.dd.DD,Ext.dd.DragDrop,{scroll:true,autoOffset:function(c,b){var a=c-this.startPageX;var d=b-this.startPageY;this.setDelta(a,d)},setDelta:function(b,a){this.deltaX=b;this.deltaY=a},setDragElPos:function(c,b){var a=this.getDragEl();this.alignElWithMouse(a,c,b)},alignElWithMouse:function(c,h,g){var e=this.getTargetCoord(h,g);var b=c.dom?c:Ext.fly(c,"_dd");if(!this.deltaSetXY){var i=[e.x,e.y];b.setXY(i);var d=b.getLeft(true);var a=b.getTop(true);this.deltaSetXY=[d-e.x,a-e.y]}else{b.setLeftTop(e.x+this.deltaSetXY[0],e.y+this.deltaSetXY[1])}this.cachePosition(e.x,e.y);this.autoScroll(e.x,e.y,c.offsetHeight,c.offsetWidth);return e},cachePosition:function(b,a){if(b){this.lastPageX=b;this.lastPageY=a}else{var c=Ext.lib.Dom.getXY(this.getEl());this.lastPageX=c[0];this.lastPageY=c[1]}},autoScroll:function(m,l,e,n){if(this.scroll){var o=Ext.lib.Dom.getViewHeight();var b=Ext.lib.Dom.getViewWidth();var q=this.DDM.getScrollTop();var d=this.DDM.getScrollLeft();var k=e+l;var p=n+m;var i=(o+q-l-this.deltaY);var g=(b+d-m-this.deltaX);var c=40;var a=(document.all)?80:30;if(k>o&&i<c){window.scrollTo(d,q+a)}if(l<q&&q>0&&l-q<c){window.scrollTo(d,q-a)}if(p>b&&g<c){window.scrollTo(d+a,q)}if(m<d&&d>0&&m-d<c){window.scrollTo(d-a,q)}}},getTargetCoord:function(c,b){var a=c-this.deltaX;var d=b-this.deltaY;if(this.constrainX){if(a<this.minX){a=this.minX}if(a>this.maxX){a=this.maxX}}if(this.constrainY){if(d<this.minY){d=this.minY}if(d>this.maxY){d=this.maxY}}a=this.getTick(a,this.xTicks);d=this.getTick(d,this.yTicks);return{x:a,y:d}},applyConfig:function(){Ext.dd.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false)},b4MouseDown:function(a){this.autoOffset(a.getPageX(),a.getPageY())},b4Drag:function(a){this.setDragElPos(a.getPageX(),a.getPageY())},toString:function(){return("DD "+this.id)}});Ext.dd.DDProxy=function(c,a,b){if(c){this.init(c,a,b);this.initFrame()}};Ext.dd.DDProxy.dragElId="ygddfdiv";Ext.extend(Ext.dd.DDProxy,Ext.dd.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var b=this;var a=document.body;if(!a||!a.firstChild){setTimeout(function(){b.createFrame()},50);return}var d=this.getDragEl();if(!d){d=document.createElement("div");d.id=this.dragElId;var c=d.style;c.position="absolute";c.visibility="hidden";c.cursor="move";c.border="2px solid #aaa";c.zIndex=999;a.insertBefore(d,a.firstChild)}},initFrame:function(){this.createFrame()},applyConfig:function(){Ext.dd.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||Ext.dd.DDProxy.dragElId)},showFrame:function(e,d){var c=this.getEl();var a=this.getDragEl();var b=a.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(b.width,10)/2),Math.round(parseInt(b.height,10)/2))}this.setDragElPos(e,d);Ext.fly(a).show()},_resizeProxy:function(){if(this.resizeFrame){var a=this.getEl();Ext.fly(this.getDragEl()).setSize(a.offsetWidth,a.offsetHeight)}},b4MouseDown:function(b){var a=b.getPageX();var c=b.getPageY();this.autoOffset(a,c);this.setDragElPos(a,c)},b4StartDrag:function(a,b){this.showFrame(a,b)},b4EndDrag:function(a){Ext.fly(this.getDragEl()).hide()},endDrag:function(c){var b=this.getEl();var a=this.getDragEl();a.style.visibility="";this.beforeMove();b.style.visibility="hidden";Ext.dd.DDM.moveToEl(b,a);a.style.visibility="hidden";b.style.visibility="";this.afterDrag()},beforeMove:function(){},afterDrag:function(){},toString:function(){return("DDProxy "+this.id)}});Ext.dd.DDTarget=function(c,a,b){if(c){this.initTarget(c,a,b)}};Ext.extend(Ext.dd.DDTarget,Ext.dd.DragDrop,{getDragEl:Ext.emptyFn,isValidHandleChild:Ext.emptyFn,startDrag:Ext.emptyFn,endDrag:Ext.emptyFn,onDrag:Ext.emptyFn,onDragDrop:Ext.emptyFn,onDragEnter:Ext.emptyFn,onDragOut:Ext.emptyFn,onDragOver:Ext.emptyFn,onInvalidDrop:Ext.emptyFn,onMouseDown:Ext.emptyFn,onMouseUp:Ext.emptyFn,setXConstraint:Ext.emptyFn,setYConstraint:Ext.emptyFn,resetConstraints:Ext.emptyFn,clearConstraints:Ext.emptyFn,clearTicks:Ext.emptyFn,setInitPosition:Ext.emptyFn,setDragElId:Ext.emptyFn,setHandleElId:Ext.emptyFn,setOuterHandleElId:Ext.emptyFn,addInvalidHandleClass:Ext.emptyFn,addInvalidHandleId:Ext.emptyFn,addInvalidHandleType:Ext.emptyFn,removeInvalidHandleClass:Ext.emptyFn,removeInvalidHandleId:Ext.emptyFn,removeInvalidHandleType:Ext.emptyFn,toString:function(){return("DDTarget "+this.id)}});Ext.dd.DragTracker=Ext.extend(Ext.util.Observable,{active:false,tolerance:5,autoStart:false,constructor:function(a){Ext.apply(this,a);this.addEvents("mousedown","mouseup","mousemove","dragstart","dragend","drag");this.dragRegion=new Ext.lib.Region(0,0,0,0);if(this.el){this.initEl(this.el)}Ext.dd.DragTracker.superclass.constructor.call(this,a)},initEl:function(a){this.el=Ext.get(a);a.on("mousedown",this.onMouseDown,this,this.delegate?{delegate:this.delegate}:undefined)},destroy:function(){this.el.un("mousedown",this.onMouseDown,this);delete this.el},onMouseDown:function(b,a){if(this.fireEvent("mousedown",this,b)!==false&&this.onBeforeStart(b)!==false){this.startXY=this.lastXY=b.getXY();this.dragTarget=this.delegate?a:this.el.dom;if(this.preventDefault!==false){b.preventDefault()}Ext.getDoc().on({scope:this,mouseup:this.onMouseUp,mousemove:this.onMouseMove,selectstart:this.stopSelect});if(this.autoStart){this.timer=this.triggerStart.defer(this.autoStart===true?1000:this.autoStart,this,[b])}}},onMouseMove:function(d,c){if(this.active&&Ext.isIE&&!d.browserEvent.button){d.preventDefault();this.onMouseUp(d);return}d.preventDefault();var b=d.getXY(),a=this.startXY;this.lastXY=b;if(!this.active){if(Math.abs(a[0]-b[0])>this.tolerance||Math.abs(a[1]-b[1])>this.tolerance){this.triggerStart(d)}else{return}}this.fireEvent("mousemove",this,d);this.onDrag(d);this.fireEvent("drag",this,d)},onMouseUp:function(c){var b=Ext.getDoc(),a=this.active;b.un("mousemove",this.onMouseMove,this);b.un("mouseup",this.onMouseUp,this);b.un("selectstart",this.stopSelect,this);c.preventDefault();this.clearStart();this.active=false;delete this.elRegion;this.fireEvent("mouseup",this,c);if(a){this.onEnd(c);this.fireEvent("dragend",this,c)}},triggerStart:function(a){this.clearStart();this.active=true;this.onStart(a);this.fireEvent("dragstart",this,a)},clearStart:function(){if(this.timer){clearTimeout(this.timer);delete this.timer}},stopSelect:function(a){a.stopEvent();return false},onBeforeStart:function(a){},onStart:function(a){},onDrag:function(a){},onEnd:function(a){},getDragTarget:function(){return this.dragTarget},getDragCt:function(){return this.el},getXY:function(a){return a?this.constrainModes[a].call(this,this.lastXY):this.lastXY},getOffset:function(c){var b=this.getXY(c),a=this.startXY;return[a[0]-b[0],a[1]-b[1]]},constrainModes:{point:function(b){if(!this.elRegion){this.elRegion=this.getDragCt().getRegion()}var a=this.dragRegion;a.left=b[0];a.top=b[1];a.right=b[0];a.bottom=b[1];a.constrainTo(this.elRegion);return[a.left,a.top]}}});Ext.dd.ScrollManager=function(){var c=Ext.dd.DragDropMgr;var e={};var b=null;var i={};var h=function(m){b=null;a()};var k=function(){if(c.dragCurrent){c.refreshCache(c.dragCurrent.groups)}};var d=function(){if(c.dragCurrent){var m=Ext.dd.ScrollManager;var n=i.el.ddScrollConfig?i.el.ddScrollConfig.increment:m.increment;if(!m.animate){if(i.el.scroll(i.dir,n)){k()}}else{i.el.scroll(i.dir,n,true,m.animDuration,k)}}};var a=function(){if(i.id){clearInterval(i.id)}i.id=0;i.el=null;i.dir=""};var g=function(n,m){a();i.el=n;i.dir=m;var p=n.ddScrollConfig?n.ddScrollConfig.ddGroup:undefined,o=(n.ddScrollConfig&&n.ddScrollConfig.frequency)?n.ddScrollConfig.frequency:Ext.dd.ScrollManager.frequency;if(p===undefined||c.dragCurrent.ddGroup==p){i.id=setInterval(d,o)}};var l=function(p,s){if(s||!c.dragCurrent){return}var t=Ext.dd.ScrollManager;if(!b||b!=c.dragCurrent){b=c.dragCurrent;t.refreshCache()}var u=Ext.lib.Event.getXY(p);var v=new Ext.lib.Point(u[0],u[1]);for(var n in e){var o=e[n],m=o._region;var q=o.ddScrollConfig?o.ddScrollConfig:t;if(m&&m.contains(v)&&o.isScrollable()){if(m.bottom-v.y<=q.vthresh){if(i.el!=o){g(o,"down")}return}else{if(m.right-v.x<=q.hthresh){if(i.el!=o){g(o,"left")}return}else{if(v.y-m.top<=q.vthresh){if(i.el!=o){g(o,"up")}return}else{if(v.x-m.left<=q.hthresh){if(i.el!=o){g(o,"right")}return}}}}}}a()};c.fireEvents=c.fireEvents.createSequence(l,c);c.stopDrag=c.stopDrag.createSequence(h,c);return{register:function(o){if(Ext.isArray(o)){for(var n=0,m=o.length;n<m;n++){this.register(o[n])}}else{o=Ext.get(o);e[o.id]=o}},unregister:function(o){if(Ext.isArray(o)){for(var n=0,m=o.length;n<m;n++){this.unregister(o[n])}}else{o=Ext.get(o);delete e[o.id]}},vthresh:25,hthresh:25,increment:100,frequency:500,animate:true,animDuration:0.4,ddGroup:undefined,refreshCache:function(){for(var m in e){if(typeof e[m]=="object"){e[m]._region=e[m].getRegion()}}}}}();Ext.dd.Registry=function(){var d={};var b={};var a=0;var c=function(g,e){if(typeof g=="string"){return g}var h=g.id;if(!h&&e!==false){h="extdd-"+(++a);g.id=h}return h};return{register:function(k,l){l=l||{};if(typeof k=="string"){k=document.getElementById(k)}l.ddel=k;d[c(k)]=l;if(l.isHandle!==false){b[l.ddel.id]=l}if(l.handles){var h=l.handles;for(var g=0,e=h.length;g<e;g++){b[c(h[g])]=l}}},unregister:function(k){var m=c(k,false);var l=d[m];if(l){delete d[m];if(l.handles){var h=l.handles;for(var g=0,e=h.length;g<e;g++){delete b[c(h[g],false)]}}}},getHandle:function(e){if(typeof e!="string"){e=e.id}return b[e]},getHandleFromEvent:function(h){var g=Ext.lib.Event.getTarget(h);return g?b[g.id]:null},getTarget:function(e){if(typeof e!="string"){e=e.id}return d[e]},getTargetFromEvent:function(h){var g=Ext.lib.Event.getTarget(h);return g?d[g.id]||b[g.id]:null}}}();Ext.dd.StatusProxy=function(a){Ext.apply(this,a);this.id=this.id||Ext.id();this.el=new Ext.Layer({dh:{id:this.id,tag:"div",cls:"x-dd-drag-proxy "+this.dropNotAllowed,children:[{tag:"div",cls:"x-dd-drop-icon"},{tag:"div",cls:"x-dd-drag-ghost"}]},shadow:!a||a.shadow!==false});this.ghost=Ext.get(this.el.dom.childNodes[1]);this.dropStatus=this.dropNotAllowed};Ext.dd.StatusProxy.prototype={dropAllowed:"x-dd-drop-ok",dropNotAllowed:"x-dd-drop-nodrop",setStatus:function(a){a=a||this.dropNotAllowed;if(this.dropStatus!=a){this.el.replaceClass(this.dropStatus,a);this.dropStatus=a}},reset:function(a){this.el.dom.className="x-dd-drag-proxy "+this.dropNotAllowed;this.dropStatus=this.dropNotAllowed;if(a){this.ghost.update("")}},update:function(a){if(typeof a=="string"){this.ghost.update(a)}else{this.ghost.update("");a.style.margin="0";this.ghost.dom.appendChild(a)}var b=this.ghost.dom.firstChild;if(b){Ext.fly(b).setStyle("float","none")}},getEl:function(){return this.el},getGhost:function(){return this.ghost},hide:function(a){this.el.hide();if(a){this.reset(true)}},stop:function(){if(this.anim&&this.anim.isAnimated&&this.anim.isAnimated()){this.anim.stop()}},show:function(){this.el.show()},sync:function(){this.el.sync()},repair:function(b,c,a){this.callback=c;this.scope=a;if(b&&this.animRepair!==false){this.el.addClass("x-dd-drag-repair");this.el.hideUnders(true);this.anim=this.el.shift({duration:this.repairDuration||0.5,easing:"easeOut",xy:b,stopFx:true,callback:this.afterRepair,scope:this})}else{this.afterRepair()}},afterRepair:function(){this.hide(true);if(typeof this.callback=="function"){this.callback.call(this.scope||this)}this.callback=null;this.scope=null},destroy:function(){Ext.destroy(this.ghost,this.el)}};Ext.dd.DragSource=function(b,a){this.el=Ext.get(b);if(!this.dragData){this.dragData={}}Ext.apply(this,a);if(!this.proxy){this.proxy=new Ext.dd.StatusProxy()}Ext.dd.DragSource.superclass.constructor.call(this,this.el.dom,this.ddGroup||this.group,{dragElId:this.proxy.id,resizeFrame:false,isTarget:false,scroll:this.scroll===true});this.dragging=false};Ext.extend(Ext.dd.DragSource,Ext.dd.DDProxy,{dropAllowed:"x-dd-drop-ok",dropNotAllowed:"x-dd-drop-nodrop",getDragData:function(a){return this.dragData},onDragEnter:function(c,d){var b=Ext.dd.DragDropMgr.getDDById(d);this.cachedTarget=b;if(this.beforeDragEnter(b,c,d)!==false){if(b.isNotifyTarget){var a=b.notifyEnter(this,c,this.dragData);this.proxy.setStatus(a)}else{this.proxy.setStatus(this.dropAllowed)}if(this.afterDragEnter){this.afterDragEnter(b,c,d)}}},beforeDragEnter:function(b,a,c){return true},alignElWithMouse:function(){Ext.dd.DragSource.superclass.alignElWithMouse.apply(this,arguments);this.proxy.sync()},onDragOver:function(c,d){var b=this.cachedTarget||Ext.dd.DragDropMgr.getDDById(d);if(this.beforeDragOver(b,c,d)!==false){if(b.isNotifyTarget){var a=b.notifyOver(this,c,this.dragData);this.proxy.setStatus(a)}if(this.afterDragOver){this.afterDragOver(b,c,d)}}},beforeDragOver:function(b,a,c){return true},onDragOut:function(b,c){var a=this.cachedTarget||Ext.dd.DragDropMgr.getDDById(c);if(this.beforeDragOut(a,b,c)!==false){if(a.isNotifyTarget){a.notifyOut(this,b,this.dragData)}this.proxy.reset();if(this.afterDragOut){this.afterDragOut(a,b,c)}}this.cachedTarget=null},beforeDragOut:function(b,a,c){return true},onDragDrop:function(b,c){var a=this.cachedTarget||Ext.dd.DragDropMgr.getDDById(c);if(this.beforeDragDrop(a,b,c)!==false){if(a.isNotifyTarget){if(a.notifyDrop(this,b,this.dragData)){this.onValidDrop(a,b,c)}else{this.onInvalidDrop(a,b,c)}}else{this.onValidDrop(a,b,c)}if(this.afterDragDrop){this.afterDragDrop(a,b,c)}}delete this.cachedTarget},beforeDragDrop:function(b,a,c){return true},onValidDrop:function(b,a,c){this.hideProxy();if(this.afterValidDrop){this.afterValidDrop(b,a,c)}},getRepairXY:function(b,a){return this.el.getXY()},onInvalidDrop:function(b,a,c){this.beforeInvalidDrop(b,a,c);if(this.cachedTarget){if(this.cachedTarget.isNotifyTarget){this.cachedTarget.notifyOut(this,a,this.dragData)}this.cacheTarget=null}this.proxy.repair(this.getRepairXY(a,this.dragData),this.afterRepair,this);if(this.afterInvalidDrop){this.afterInvalidDrop(a,c)}},afterRepair:function(){if(Ext.enableFx){this.el.highlight(this.hlColor||"c3daf9")}this.dragging=false},beforeInvalidDrop:function(b,a,c){return true},handleMouseDown:function(b){if(this.dragging){return}var a=this.getDragData(b);if(a&&this.onBeforeDrag(a,b)!==false){this.dragData=a;this.proxy.stop();Ext.dd.DragSource.superclass.handleMouseDown.apply(this,arguments)}},onBeforeDrag:function(a,b){return true},onStartDrag:Ext.emptyFn,startDrag:function(a,b){this.proxy.reset();this.dragging=true;this.proxy.update("");this.onInitDrag(a,b);this.proxy.show()},onInitDrag:function(a,c){var b=this.el.dom.cloneNode(true);b.id=Ext.id();this.proxy.update(b);this.onStartDrag(a,c);return true},getProxy:function(){return this.proxy},hideProxy:function(){this.proxy.hide();this.proxy.reset(true);this.dragging=false},triggerCacheRefresh:function(){Ext.dd.DDM.refreshCache(this.groups)},b4EndDrag:function(a){},endDrag:function(a){this.onEndDrag(this.dragData,a)},onEndDrag:function(a,b){},autoOffset:function(a,b){this.setDelta(-12,-20)},destroy:function(){Ext.dd.DragSource.superclass.destroy.call(this);Ext.destroy(this.proxy)}});Ext.dd.DropTarget=Ext.extend(Ext.dd.DDTarget,{constructor:function(b,a){this.el=Ext.get(b);Ext.apply(this,a);if(this.containerScroll){Ext.dd.ScrollManager.register(this.el)}Ext.dd.DropTarget.superclass.constructor.call(this,this.el.dom,this.ddGroup||this.group,{isTarget:true})},dropAllowed:"x-dd-drop-ok",dropNotAllowed:"x-dd-drop-nodrop",isTarget:true,isNotifyTarget:true,notifyEnter:function(a,c,b){if(this.overClass){this.el.addClass(this.overClass)}return this.dropAllowed},notifyOver:function(a,c,b){return this.dropAllowed},notifyOut:function(a,c,b){if(this.overClass){this.el.removeClass(this.overClass)}},notifyDrop:function(a,c,b){return false},destroy:function(){Ext.dd.DropTarget.superclass.destroy.call(this);if(this.containerScroll){Ext.dd.ScrollManager.unregister(this.el)}}});Ext.dd.DragZone=Ext.extend(Ext.dd.DragSource,{constructor:function(b,a){Ext.dd.DragZone.superclass.constructor.call(this,b,a);if(this.containerScroll){Ext.dd.ScrollManager.register(this.el)}},getDragData:function(a){return Ext.dd.Registry.getHandleFromEvent(a)},onInitDrag:function(a,b){this.proxy.update(this.dragData.ddel.cloneNode(true));this.onStartDrag(a,b);return true},afterRepair:function(){if(Ext.enableFx){Ext.Element.fly(this.dragData.ddel).highlight(this.hlColor||"c3daf9")}this.dragging=false},getRepairXY:function(a){return Ext.Element.fly(this.dragData.ddel).getXY()},destroy:function(){Ext.dd.DragZone.superclass.destroy.call(this);if(this.containerScroll){Ext.dd.ScrollManager.unregister(this.el)}}});Ext.dd.DropZone=function(b,a){Ext.dd.DropZone.superclass.constructor.call(this,b,a)};Ext.extend(Ext.dd.DropZone,Ext.dd.DropTarget,{getTargetFromEvent:function(a){return Ext.dd.Registry.getTargetFromEvent(a)},onNodeEnter:function(d,a,c,b){},onNodeOver:function(d,a,c,b){return this.dropAllowed},onNodeOut:function(d,a,c,b){},onNodeDrop:function(d,a,c,b){return false},onContainerOver:function(a,c,b){return this.dropNotAllowed},onContainerDrop:function(a,c,b){return false},notifyEnter:function(a,c,b){return this.dropNotAllowed},notifyOver:function(a,c,b){var d=this.getTargetFromEvent(c);if(!d){if(this.lastOverNode){this.onNodeOut(this.lastOverNode,a,c,b);this.lastOverNode=null}return this.onContainerOver(a,c,b)}if(this.lastOverNode!=d){if(this.lastOverNode){this.onNodeOut(this.lastOverNode,a,c,b)}this.onNodeEnter(d,a,c,b);this.lastOverNode=d}return this.onNodeOver(d,a,c,b)},notifyOut:function(a,c,b){if(this.lastOverNode){this.onNodeOut(this.lastOverNode,a,c,b);this.lastOverNode=null}},notifyDrop:function(a,c,b){if(this.lastOverNode){this.onNodeOut(this.lastOverNode,a,c,b);this.lastOverNode=null}var d=this.getTargetFromEvent(c);return d?this.onNodeDrop(d,a,c,b):this.onContainerDrop(a,c,b)},triggerCacheRefresh:function(){Ext.dd.DDM.refreshCache(this.groups)}});Ext.Element.addMethods({initDD:function(c,b,d){var a=new Ext.dd.DD(Ext.id(this.dom),c,b);return Ext.apply(a,d)},initDDProxy:function(c,b,d){var a=new Ext.dd.DDProxy(Ext.id(this.dom),c,b);return Ext.apply(a,d)},initDDTarget:function(c,b,d){var a=new Ext.dd.DDTarget(Ext.id(this.dom),c,b);return Ext.apply(a,d)}});Ext.data.Api=(function(){var a={};return{actions:{create:"create",read:"read",update:"update",destroy:"destroy"},restActions:{create:"POST",read:"GET",update:"PUT",destroy:"DELETE"},isAction:function(b){return(Ext.data.Api.actions[b])?true:false},getVerb:function(b){if(a[b]){return a[b]}for(var c in this.actions){if(this.actions[c]===b){a[b]=c;break}}return(a[b]!==undefined)?a[b]:null},isValid:function(b){var e=[];var d=this.actions;for(var c in b){if(!(c in d)){e.push(c)}}return(!e.length)?true:e},hasUniqueUrl:function(c,g){var b=(c.api[g])?c.api[g].url:null;var e=true;for(var d in c.api){if((e=(d===g)?true:(c.api[d].url!=b)?true:false)===false){break}}return e},prepare:function(b){if(!b.api){b.api={}}for(var d in this.actions){var c=this.actions[d];b.api[c]=b.api[c]||b.url||b.directFn;if(typeof(b.api[c])=="string"){b.api[c]={url:b.api[c],method:(b.restful===true)?Ext.data.Api.restActions[c]:undefined}}}},restify:function(b){b.restful=true;for(var c in this.restActions){b.api[this.actions[c]].method||(b.api[this.actions[c]].method=this.restActions[c])}b.onWrite=b.onWrite.createInterceptor(function(i,k,g,e){var d=k.reader;var h=new Ext.data.Response({action:i,raw:g});switch(g.status){case 200:return true;break;case 201:if(Ext.isEmpty(h.raw.responseText)){h.success=true}else{return true}break;case 204:h.success=true;h.data=null;break;default:return true;break}if(h.success===true){this.fireEvent("write",this,i,h.data,h,e,k.request.arg)}else{this.fireEvent("exception",this,"remote",i,k,h,e)}k.request.callback.call(k.request.scope,h.data,h,h.success);return false},b)}}})();Ext.data.Response=function(b,a){Ext.apply(this,b,{raw:a})};Ext.data.Response.prototype={message:null,success:false,status:null,root:null,raw:null,getMessage:function(){return this.message},getSuccess:function(){return this.success},getStatus:function(){return this.status},getRoot:function(){return this.root},getRawResponse:function(){return this.raw}};Ext.data.Api.Error=Ext.extend(Ext.Error,{constructor:function(b,a){this.arg=a;Ext.Error.call(this,b)},name:"Ext.data.Api"});Ext.apply(Ext.data.Api.Error.prototype,{lang:{"action-url-undefined":"No fallback url defined for this action. When defining a DataProxy api, please be sure to define an url for each CRUD action in Ext.data.Api.actions or define a default url in addition to your api-configuration.",invalid:"received an invalid API-configuration. Please ensure your proxy API-configuration contains only the actions defined in Ext.data.Api.actions","invalid-url":"Invalid url. Please review your proxy configuration.",execute:'Attempted to execute an unknown action. Valid API actions are defined in Ext.data.Api.actions"'}});Ext.data.SortTypes={none:function(a){return a},stripTagsRE:/<\/?[^>]+>/gi,asText:function(a){return String(a).replace(this.stripTagsRE,"")},asUCText:function(a){return String(a).toUpperCase().replace(this.stripTagsRE,"")},asUCString:function(a){return String(a).toUpperCase()},asDate:function(a){if(!a){return 0}if(Ext.isDate(a)){return a.getTime()}return Date.parse(String(a))},asFloat:function(a){var b=parseFloat(String(a).replace(/,/g,""));return isNaN(b)?0:b},asInt:function(a){var b=parseInt(String(a).replace(/,/g,""),10);return isNaN(b)?0:b}};Ext.data.Record=function(a,b){this.id=(b||b===0)?b:Ext.data.Record.id(this);this.data=a||{}};Ext.data.Record.create=function(e){var c=Ext.extend(Ext.data.Record,{});var d=c.prototype;d.fields=new Ext.util.MixedCollection(false,function(g){return g.name});for(var b=0,a=e.length;b<a;b++){d.fields.add(new Ext.data.Field(e[b]))}c.getField=function(g){return d.fields.get(g)};return c};Ext.data.Record.PREFIX="ext-record";Ext.data.Record.AUTO_ID=1;Ext.data.Record.EDIT="edit";Ext.data.Record.REJECT="reject";Ext.data.Record.COMMIT="commit";Ext.data.Record.id=function(a){a.phantom=true;return[Ext.data.Record.PREFIX,"-",Ext.data.Record.AUTO_ID++].join("")};Ext.data.Record.prototype={dirty:false,editing:false,error:null,modified:null,phantom:false,join:function(a){this.store=a},set:function(a,c){var b=Ext.isPrimitive(c)?String:Ext.encode;if(b(this.data[a])==b(c)){return}this.dirty=true;if(!this.modified){this.modified={}}if(this.modified[a]===undefined){this.modified[a]=this.data[a]}this.data[a]=c;if(!this.editing){this.afterEdit()}},afterEdit:function(){if(this.store!=undefined&&typeof this.store.afterEdit=="function"){this.store.afterEdit(this)}},afterReject:function(){if(this.store){this.store.afterReject(this)}},afterCommit:function(){if(this.store){this.store.afterCommit(this)}},get:function(a){return this.data[a]},beginEdit:function(){this.editing=true;this.modified=this.modified||{}},cancelEdit:function(){this.editing=false;delete this.modified},endEdit:function(){this.editing=false;if(this.dirty){this.afterEdit()}},reject:function(b){var a=this.modified;for(var c in a){if(typeof a[c]!="function"){this.data[c]=a[c]}}this.dirty=false;delete this.modified;this.editing=false;if(b!==true){this.afterReject()}},commit:function(a){this.dirty=false;delete this.modified;this.editing=false;if(a!==true){this.afterCommit()}},getChanges:function(){var a=this.modified,b={};for(var c in a){if(a.hasOwnProperty(c)){b[c]=this.data[c]}}return b},hasError:function(){return this.error!==null},clearError:function(){this.error=null},copy:function(a){return new this.constructor(Ext.apply({},this.data),a||this.id)},isModified:function(a){return !!(this.modified&&this.modified.hasOwnProperty(a))},isValid:function(){return this.fields.find(function(a){return(a.allowBlank===false&&Ext.isEmpty(this.data[a.name]))?true:false},this)?false:true},markDirty:function(){this.dirty=true;if(!this.modified){this.modified={}}this.fields.each(function(a){this.modified[a.name]=this.data[a.name]},this)}};Ext.StoreMgr=Ext.apply(new Ext.util.MixedCollection(),{register:function(){for(var a=0,b;(b=arguments[a]);a++){this.add(b)}},unregister:function(){for(var a=0,b;(b=arguments[a]);a++){this.remove(this.lookup(b))}},lookup:function(e){if(Ext.isArray(e)){var b=["field1"],d=!Ext.isArray(e[0]);if(!d){for(var c=2,a=e[0].length;c<=a;++c){b.push("field"+c)}}return new Ext.data.ArrayStore({fields:b,data:e,expandData:d,autoDestroy:true,autoCreated:true})}return Ext.isObject(e)?(e.events?e:Ext.create(e,"store")):this.get(e)},getKey:function(a){return a.storeId}});Ext.data.Store=Ext.extend(Ext.util.Observable,{writer:undefined,remoteSort:false,autoDestroy:false,pruneModifiedRecords:false,lastOptions:null,autoSave:true,batch:true,restful:false,paramNames:undefined,defaultParamNames:{start:"start",limit:"limit",sort:"sort",dir:"dir"},isDestroyed:false,hasMultiSort:false,batchKey:"_ext_batch_",constructor:function(a){this.data=new Ext.util.MixedCollection(false);this.data.getKey=function(b){return b.id};this.removed=[];if(a&&a.data){this.inlineData=a.data;delete a.data}Ext.apply(this,a);this.baseParams=Ext.isObject(this.baseParams)?this.baseParams:{};this.paramNames=Ext.applyIf(this.paramNames||{},this.defaultParamNames);if((this.url||this.api)&&!this.proxy){this.proxy=new Ext.data.HttpProxy({url:this.url,api:this.api})}if(this.restful===true&&this.proxy){this.batch=false;Ext.data.Api.restify(this.proxy)}if(this.reader){if(!this.recordType){this.recordType=this.reader.recordType}if(this.reader.onMetaChange){this.reader.onMetaChange=this.reader.onMetaChange.createSequence(this.onMetaChange,this)}if(this.writer){if(this.writer instanceof (Ext.data.DataWriter)===false){this.writer=this.buildWriter(this.writer)}this.writer.meta=this.reader.meta;this.pruneModifiedRecords=true}}if(this.recordType){this.fields=this.recordType.prototype.fields}this.modified=[];this.addEvents("datachanged","metachange","add","remove","update","clear","exception","beforeload","load","loadexception","beforewrite","write","beforesave","save");if(this.proxy){this.relayEvents(this.proxy,["loadexception","exception"])}if(this.writer){this.on({scope:this,add:this.createRecords,remove:this.destroyRecord,update:this.updateRecord,clear:this.onClear})}this.sortToggle={};if(this.sortField){this.setDefaultSort(this.sortField,this.sortDir)}else{if(this.sortInfo){this.setDefaultSort(this.sortInfo.field,this.sortInfo.direction)}}Ext.data.Store.superclass.constructor.call(this);if(this.id){this.storeId=this.id;delete this.id}if(this.storeId){Ext.StoreMgr.register(this)}if(this.inlineData){this.loadData(this.inlineData);delete this.inlineData}else{if(this.autoLoad){this.load.defer(10,this,[typeof this.autoLoad=="object"?this.autoLoad:undefined])}}this.batchCounter=0;this.batches={}},buildWriter:function(b){var a=undefined,c=(b.format||"json").toLowerCase();switch(c){case"json":a=Ext.data.JsonWriter;break;case"xml":a=Ext.data.XmlWriter;break;default:a=Ext.data.JsonWriter}return new a(b)},destroy:function(){if(!this.isDestroyed){if(this.storeId){Ext.StoreMgr.unregister(this)}this.clearData();this.data=null;Ext.destroy(this.proxy);this.reader=this.writer=null;this.purgeListeners();this.isDestroyed=true}},add:function(c){var e,a,b,d;c=[].concat(c);if(c.length<1){return}for(e=0,a=c.length;e<a;e++){b=c[e];b.join(this);if(b.dirty||b.phantom){this.modified.push(b)}}d=this.data.length;this.data.addAll(c);if(this.snapshot){this.snapshot.addAll(c)}this.fireEvent("add",this,c,d)},addSorted:function(a){var b=this.findInsertIndex(a);this.insert(b,a)},doUpdate:function(a){this.data.replace(a.id,a);if(this.snapshot){this.snapshot.replace(a.id,a)}this.fireEvent("update",this,a,Ext.data.Record.COMMIT)},remove:function(a){if(Ext.isArray(a)){Ext.each(a,function(c){this.remove(c)},this);return}var b=this.data.indexOf(a);if(b>-1){a.join(null);this.data.removeAt(b)}if(this.pruneModifiedRecords){this.modified.remove(a)}if(this.snapshot){this.snapshot.remove(a)}if(b>-1){this.fireEvent("remove",this,a,b)}},removeAt:function(a){this.remove(this.getAt(a))},removeAll:function(b){var a=[];this.each(function(c){a.push(c)});this.clearData();if(this.snapshot){this.snapshot.clear()}if(this.pruneModifiedRecords){this.modified=[]}if(b!==true){this.fireEvent("clear",this,a)}},onClear:function(b,a){Ext.each(a,function(d,c){this.destroyRecord(this,d,c)},this)},insert:function(d,c){var e,a,b;c=[].concat(c);for(e=0,a=c.length;e<a;e++){b=c[e];this.data.insert(d+e,b);b.join(this);if(b.dirty||b.phantom){this.modified.push(b)}}if(this.snapshot){this.snapshot.addAll(c)}this.fireEvent("add",this,c,d)},indexOf:function(a){return this.data.indexOf(a)},indexOfId:function(a){return this.data.indexOfKey(a)},getById:function(a){return(this.snapshot||this.data).key(a)},getAt:function(a){return this.data.itemAt(a)},getRange:function(b,a){return this.data.getRange(b,a)},storeOptions:function(a){a=Ext.apply({},a);delete a.callback;delete a.scope;this.lastOptions=a},clearData:function(){this.data.each(function(a){a.join(null)});this.data.clear()},load:function(b){b=Ext.apply({},b);this.storeOptions(b);if(this.sortInfo&&this.remoteSort){var a=this.paramNames;b.params=Ext.apply({},b.params);b.params[a.sort]=this.sortInfo.field;b.params[a.dir]=this.sortInfo.direction}try{return this.execute("read",null,b)}catch(c){this.handleException(c);return false}},updateRecord:function(b,a,c){if(c==Ext.data.Record.EDIT&&this.autoSave===true&&(!a.phantom||(a.phantom&&a.isValid()))){this.save()}},createRecords:function(c,b,e){var d=this.modified,h=b.length,a,g;for(g=0;g<h;g++){a=b[g];if(a.phantom&&a.isValid()){a.markDirty();if(d.indexOf(a)==-1){d.push(a)}}}if(this.autoSave===true){this.save()}},destroyRecord:function(b,a,c){if(this.modified.indexOf(a)!=-1){this.modified.remove(a)}if(!a.phantom){this.removed.push(a);a.lastIndex=c;if(this.autoSave===true){this.save()}}},execute:function(e,a,c,b){if(!Ext.data.Api.isAction(e)){throw new Ext.data.Api.Error("execute",e)}c=Ext.applyIf(c||{},{params:{}});if(b!==undefined){this.addToBatch(b)}var d=true;if(e==="read"){d=this.fireEvent("beforeload",this,c);Ext.applyIf(c.params,this.baseParams)}else{if(this.writer.listful===true&&this.restful!==true){a=(Ext.isArray(a))?a:[a]}else{if(Ext.isArray(a)&&a.length==1){a=a.shift()}}if((d=this.fireEvent("beforewrite",this,e,a,c))!==false){this.writer.apply(c.params,this.baseParams,e,a)}}if(d!==false){if(this.writer&&this.proxy.url&&!this.proxy.restful&&!Ext.data.Api.hasUniqueUrl(this.proxy,e)){c.params.xaction=e}this.proxy.request(Ext.data.Api.actions[e],a,c.params,this.reader,this.createCallback(e,a,b),this,c)}return d},save:function(){if(!this.writer){throw new Ext.data.Store.Error("writer-undefined")}var h=[],k,l,e,c={},d;if(this.removed.length){h.push(["destroy",this.removed])}var b=[].concat(this.getModifiedRecords());if(b.length){var g=[];for(d=b.length-1;d>=0;d--){if(b[d].phantom===true){var a=b.splice(d,1).shift();if(a.isValid()){g.push(a)}}else{if(!b[d].isValid()){b.splice(d,1)}}}if(g.length){h.push(["create",g])}if(b.length){h.push(["update",b])}}k=h.length;if(k){e=++this.batchCounter;for(d=0;d<k;++d){l=h[d];c[l[0]]=l[1]}if(this.fireEvent("beforesave",this,c)!==false){for(d=0;d<k;++d){l=h[d];this.doTransaction(l[0],l[1],e)}return e}}return -1},doTransaction:function(e,b,c){function g(h){try{this.execute(e,h,undefined,c)}catch(i){this.handleException(i)}}if(this.batch===false){for(var d=0,a=b.length;d<a;d++){g.call(this,b[d])}}else{g.call(this,b)}},addToBatch:function(c){var a=this.batches,d=this.batchKey+c,e=a[d];if(!e){a[d]=e={id:c,count:0,data:{}}}++e.count},removeFromBatch:function(d,h,g){var c=this.batches,e=this.batchKey+d,i=c[e],a;if(i){a=i.data[h]||[];i.data[h]=a.concat(g);if(i.count===1){g=i.data;delete c[e];this.fireEvent("save",this,d,g)}else{--i.count}}},createCallback:function(c,a,b){var d=Ext.data.Api.actions;return(c=="read")?this.loadRecords:function(g,e,h){this["on"+Ext.util.Format.capitalize(c)+"Records"](h,a,[].concat(g));if(h===true){this.fireEvent("write",this,c,g,e,a)}this.removeFromBatch(b,c,g)}},clearModified:function(a){if(Ext.isArray(a)){for(var b=a.length-1;b>=0;b--){this.modified.splice(this.modified.indexOf(a[b]),1)}}else{this.modified.splice(this.modified.indexOf(a),1)}},reMap:function(b){if(Ext.isArray(b)){for(var d=0,a=b.length;d<a;d++){this.reMap(b[d])}}else{delete this.data.map[b._phid];this.data.map[b.id]=b;var c=this.data.keys.indexOf(b._phid);this.data.keys.splice(c,1,b.id);delete b._phid}},onCreateRecords:function(d,a,b){if(d===true){try{this.reader.realize(a,b);this.reMap(a)}catch(c){this.handleException(c);if(Ext.isArray(a)){this.onCreateRecords(d,a,b)}}}},onUpdateRecords:function(d,a,b){if(d===true){try{this.reader.update(a,b)}catch(c){this.handleException(c);if(Ext.isArray(a)){this.onUpdateRecords(d,a,b)}}}},onDestroyRecords:function(e,b,d){b=(b instanceof Ext.data.Record)?[b]:[].concat(b);for(var c=0,a=b.length;c<a;c++){this.removed.splice(this.removed.indexOf(b[c]),1)}if(e===false){for(c=b.length-1;c>=0;c--){this.insert(b[c].lastIndex,b[c])}}},handleException:function(a){Ext.handleError(a)},reload:function(a){this.load(Ext.applyIf(a||{},this.lastOptions))},loadRecords:function(b,m,h){var e,g;if(this.isDestroyed===true){return}if(!b||h===false){if(h!==false){this.fireEvent("load",this,[],m)}if(m.callback){m.callback.call(m.scope||this,[],m,false,b)}return}var a=b.records,k=b.totalRecords||a.length;if(!m||m.add!==true){if(this.pruneModifiedRecords){this.modified=[]}for(e=0,g=a.length;e<g;e++){a[e].join(this)}if(this.snapshot){this.data=this.snapshot;delete this.snapshot}this.clearData();this.data.addAll(a);this.totalLength=k;this.applySort();this.fireEvent("datachanged",this)}else{var l=[],d,c=0;for(e=0,g=a.length;e<g;++e){d=a[e];if(this.indexOfId(d.id)>-1){this.doUpdate(d)}else{l.push(d);++c}}this.totalLength=Math.max(k,this.data.length+c);this.add(l)}this.fireEvent("load",this,a,m);if(m.callback){m.callback.call(m.scope||this,a,m,true)}},loadData:function(c,a){var b=this.reader.readRecords(c);this.loadRecords(b,{add:a},true)},getCount:function(){return this.data.length||0},getTotalCount:function(){return this.totalLength||0},getSortState:function(){return this.sortInfo},applySort:function(){if((this.sortInfo||this.multiSortInfo)&&!this.remoteSort){this.sortData()}},sortData:function(){var a=this.hasMultiSort?this.multiSortInfo:this.sortInfo,k=a.direction||"ASC",h=a.sorters,c=[];if(!this.hasMultiSort){h=[{direction:k,field:a.field}]}for(var d=0,b=h.length;d<b;d++){c.push(this.createSortFunction(h[d].field,h[d].direction))}if(c.length==0){return}var g=k.toUpperCase()=="DESC"?-1:1;var e=function(n,m){var l=c[0].call(this,n,m);if(c.length>1){for(var p=1,o=c.length;p<o;p++){l=l||c[p].call(this,n,m)}}return g*l};this.data.sort(k,e);if(this.snapshot&&this.snapshot!=this.data){this.snapshot.sort(k,e)}},createSortFunction:function(c,b){b=b||"ASC";var a=b.toUpperCase()=="DESC"?-1:1;var d=this.fields.get(c).sortType;return function(g,e){var i=d(g.data[c]),h=d(e.data[c]);return a*(i>h?1:(i<h?-1:0))}},setDefaultSort:function(b,a){a=a?a.toUpperCase():"ASC";this.sortInfo={field:b,direction:a};this.sortToggle[b]=a},sort:function(b,a){if(Ext.isArray(arguments[0])){return this.multiSort.call(this,b,a)}else{return this.singleSort(b,a)}},singleSort:function(g,c){var e=this.fields.get(g);if(!e){return false}var b=e.name,a=this.sortInfo||null,d=this.sortToggle?this.sortToggle[b]:null;if(!c){if(a&&a.field==b){c=(this.sortToggle[b]||"ASC").toggle("ASC","DESC")}else{c=e.sortDir}}this.sortToggle[b]=c;this.sortInfo={field:b,direction:c};this.hasMultiSort=false;if(this.remoteSort){if(!this.load(this.lastOptions)){if(d){this.sortToggle[b]=d}if(a){this.sortInfo=a}}}else{this.applySort();this.fireEvent("datachanged",this)}return true},multiSort:function(b,a){this.hasMultiSort=true;a=a||"ASC";if(this.multiSortInfo&&a==this.multiSortInfo.direction){a=a.toggle("ASC","DESC")}this.multiSortInfo={sorters:b,direction:a};if(this.remoteSort){this.singleSort(b[0].field,b[0].direction)}else{this.applySort();this.fireEvent("datachanged",this)}},each:function(b,a){this.data.each(b,a)},getModifiedRecords:function(){return this.modified},sum:function(e,g,a){var c=this.data.items,b=0;g=g||0;a=(a||a===0)?a:c.length-1;for(var d=g;d<=a;d++){b+=(c[d].data[e]||0)}return b},createFilterFn:function(d,c,e,a,b){if(Ext.isEmpty(c,false)){return false}c=this.data.createValueMatcher(c,e,a,b);return function(g){return c.test(g.data[d])}},createMultipleFilterFn:function(a){return function(b){var k=true;for(var d=0,c=a.length;d<c;d++){var h=a[d],g=h.fn,e=h.scope;k=k&&g.call(e,b)}return k}},filter:function(n,m,h,k,e){var l;if(Ext.isObject(n)){n=[n]}if(Ext.isArray(n)){var b=[];for(var g=0,d=n.length;g<d;g++){var a=n[g],c=a.fn,o=a.scope||this;if(!Ext.isFunction(c)){c=this.createFilterFn(a.property,a.value,a.anyMatch,a.caseSensitive,a.exactMatch)}b.push({fn:c,scope:o})}l=this.createMultipleFilterFn(b)}else{l=this.createFilterFn(n,m,h,k,e)}return l?this.filterBy(l):this.clearFilter()},filterBy:function(b,a){this.snapshot=this.snapshot||this.data;this.data=this.queryBy(b,a||this);this.fireEvent("datachanged",this)},clearFilter:function(a){if(this.isFiltered()){this.data=this.snapshot;delete this.snapshot;if(a!==true){this.fireEvent("datachanged",this)}}},isFiltered:function(){return !!this.snapshot&&this.snapshot!=this.data},query:function(d,c,e,a){var b=this.createFilterFn(d,c,e,a);return b?this.queryBy(b):this.data.clone()},queryBy:function(b,a){var c=this.snapshot||this.data;return c.filterBy(b,a||this)},find:function(d,c,g,e,a){var b=this.createFilterFn(d,c,e,a);return b?this.data.findIndexBy(b,null,g):-1},findExact:function(b,a,c){return this.data.findIndexBy(function(d){return d.get(b)===a},this,c)},findBy:function(b,a,c){return this.data.findIndexBy(b,a,c)},collect:function(k,m,b){var h=(b===true&&this.snapshot)?this.snapshot.items:this.data.items;var n,o,a=[],c={};for(var e=0,g=h.length;e<g;e++){n=h[e].data[k];o=String(n);if((m||!Ext.isEmpty(n))&&!c[o]){c[o]=true;a[a.length]=n}}return a},afterEdit:function(a){if(this.modified.indexOf(a)==-1){this.modified.push(a)}this.fireEvent("update",this,a,Ext.data.Record.EDIT)},afterReject:function(a){this.modified.remove(a);this.fireEvent("update",this,a,Ext.data.Record.REJECT)},afterCommit:function(a){this.modified.remove(a);this.fireEvent("update",this,a,Ext.data.Record.COMMIT)},commitChanges:function(){var a=this.modified.slice(0),c=a.length,b;for(b=0;b<c;b++){a[b].commit()}this.modified=[];this.removed=[]},rejectChanges:function(){var a=this.modified.slice(0),e=this.removed.slice(0).reverse(),c=a.length,d=e.length,b;for(b=0;b<c;b++){a[b].reject()}for(b=0;b<d;b++){this.insert(e[b].lastIndex||0,e[b]);e[b].reject()}this.modified=[];this.removed=[]},onMetaChange:function(a){this.recordType=this.reader.recordType;this.fields=this.recordType.prototype.fields;delete this.snapshot;if(this.reader.meta.sortInfo){this.sortInfo=this.reader.meta.sortInfo}else{if(this.sortInfo&&!this.fields.get(this.sortInfo.field)){delete this.sortInfo}}if(this.writer){this.writer.meta=this.reader.meta}this.modified=[];this.fireEvent("metachange",this,this.reader.meta)},findInsertIndex:function(a){this.suspendEvents();var c=this.data.clone();this.data.add(a);this.applySort();var b=this.data.indexOf(a);this.data=c;this.resumeEvents();return b},setBaseParam:function(a,b){this.baseParams=this.baseParams||{};this.baseParams[a]=b}});Ext.reg("store",Ext.data.Store);Ext.data.Store.Error=Ext.extend(Ext.Error,{name:"Ext.data.Store"});Ext.apply(Ext.data.Store.Error.prototype,{lang:{"writer-undefined":"Attempted to execute a write-action without a DataWriter installed."}});Ext.data.Field=Ext.extend(Object,{constructor:function(b){if(Ext.isString(b)){b={name:b}}Ext.apply(this,b);var d=Ext.data.Types,a=this.sortType,c;if(this.type){if(Ext.isString(this.type)){this.type=Ext.data.Types[this.type.toUpperCase()]||d.AUTO}}else{this.type=d.AUTO}if(Ext.isString(a)){this.sortType=Ext.data.SortTypes[a]}else{if(Ext.isEmpty(a)){this.sortType=this.type.sortType}}if(!this.convert){this.convert=this.type.convert}},dateFormat:null,useNull:false,defaultValue:"",mapping:null,sortType:null,sortDir:"ASC",allowBlank:true});Ext.data.DataReader=function(a,b){this.meta=a;this.recordType=Ext.isArray(b)?Ext.data.Record.create(b):b;if(this.recordType){this.buildExtractors()}};Ext.data.DataReader.prototype={getTotal:Ext.emptyFn,getRoot:Ext.emptyFn,getMessage:Ext.emptyFn,getSuccess:Ext.emptyFn,getId:Ext.emptyFn,buildExtractors:Ext.emptyFn,extractValues:Ext.emptyFn,realize:function(a,c){if(Ext.isArray(a)){for(var b=a.length-1;b>=0;b--){if(Ext.isArray(c)){this.realize(a.splice(b,1).shift(),c.splice(b,1).shift())}else{this.realize(a.splice(b,1).shift(),c)}}}else{if(Ext.isArray(c)&&c.length==1){c=c.shift()}if(!this.isData(c)){throw new Ext.data.DataReader.Error("realize",a)}a.phantom=false;a._phid=a.id;a.id=this.getId(c);a.data=c;a.commit()}},update:function(a,c){if(Ext.isArray(a)){for(var b=a.length-1;b>=0;b--){if(Ext.isArray(c)){this.update(a.splice(b,1).shift(),c.splice(b,1).shift())}else{this.update(a.splice(b,1).shift(),c)}}}else{if(Ext.isArray(c)&&c.length==1){c=c.shift()}if(this.isData(c)){a.data=Ext.apply(a.data,c)}a.commit()}},extractData:function(l,a){var k=(this instanceof Ext.data.JsonReader)?"json":"node";var c=[];if(this.isData(l)&&!(this instanceof Ext.data.XmlReader)){l=[l]}var h=this.recordType.prototype.fields,p=h.items,o=h.length,c=[];if(a===true){var m=this.recordType;for(var e=0;e<l.length;e++){var b=l[e];var g=new m(this.extractValues(b,p,o),this.getId(b));g[k]=b;c.push(g)}}else{for(var e=0;e<l.length;e++){var d=this.extractValues(l[e],p,o);d[this.meta.idProperty]=this.getId(l[e]);c.push(d)}}return c},isData:function(a){return(a&&Ext.isObject(a)&&!Ext.isEmpty(this.getId(a)))?true:false},onMetaChange:function(a){delete this.ef;this.meta=a;this.recordType=Ext.data.Record.create(a.fields);this.buildExtractors()}};Ext.data.DataReader.Error=Ext.extend(Ext.Error,{constructor:function(b,a){this.arg=a;Ext.Error.call(this,b)},name:"Ext.data.DataReader"});Ext.apply(Ext.data.DataReader.Error.prototype,{lang:{update:"#update received invalid data from server. Please see docs for DataReader#update and review your DataReader configuration.",realize:"#realize was called with invalid remote-data. Please see the docs for DataReader#realize and review your DataReader configuration.","invalid-response":"#readResponse received an invalid response from the server."}});Ext.data.DataWriter=function(a){Ext.apply(this,a)};Ext.data.DataWriter.prototype={writeAllFields:false,listful:false,apply:function(e,g,d,a){var c=[],b=d+"Record";if(Ext.isArray(a)){Ext.each(a,function(h){c.push(this[b](h))},this)}else{if(a instanceof Ext.data.Record){c=this[b](a)}}this.render(e,g,c)},render:Ext.emptyFn,updateRecord:Ext.emptyFn,createRecord:Ext.emptyFn,destroyRecord:Ext.emptyFn,toHash:function(g,c){var e=g.fields.map,d={},b=(this.writeAllFields===false&&g.phantom===false)?g.getChanges():g.data,a;Ext.iterate(b,function(i,h){if((a=e[i])){d[a.mapping?a.mapping:a.name]=h}});if(g.phantom){if(g.fields.containsKey(this.meta.idProperty)&&Ext.isEmpty(g.data[this.meta.idProperty])){delete d[this.meta.idProperty]}}else{d[this.meta.idProperty]=g.id}return d},toArray:function(b){var a=[];Ext.iterate(b,function(d,c){a.push({name:d,value:c})},this);return a}};Ext.data.DataProxy=function(a){a=a||{};this.api=a.api;this.url=a.url;this.restful=a.restful;this.listeners=a.listeners;this.prettyUrls=a.prettyUrls;this.addEvents("exception","beforeload","load","loadexception","beforewrite","write");Ext.data.DataProxy.superclass.constructor.call(this);try{Ext.data.Api.prepare(this)}catch(b){if(b instanceof Ext.data.Api.Error){b.toConsole()}}Ext.data.DataProxy.relayEvents(this,["beforewrite","write","exception"])};Ext.extend(Ext.data.DataProxy,Ext.util.Observable,{restful:false,setApi:function(){if(arguments.length==1){var a=Ext.data.Api.isValid(arguments[0]);if(a===true){this.api=arguments[0]}else{throw new Ext.data.Api.Error("invalid",a)}}else{if(arguments.length==2){if(!Ext.data.Api.isAction(arguments[0])){throw new Ext.data.Api.Error("invalid",arguments[0])}this.api[arguments[0]]=arguments[1]}}Ext.data.Api.prepare(this)},isApiAction:function(a){return(this.api[a])?true:false},request:function(e,b,g,a,h,d,c){if(!this.api[e]&&!this.load){throw new Ext.data.DataProxy.Error("action-undefined",e)}g=g||{};if((e===Ext.data.Api.actions.read)?this.fireEvent("beforeload",this,g):this.fireEvent("beforewrite",this,e,b,g)!==false){this.doRequest.apply(this,arguments)}else{h.call(d||this,null,c,false)}},load:null,doRequest:function(e,b,g,a,h,d,c){this.load(g,a,h,d,c)},onRead:Ext.emptyFn,onWrite:Ext.emptyFn,buildUrl:function(d,b){b=b||null;var c=(this.conn&&this.conn.url)?this.conn.url:(this.api[d])?this.api[d].url:this.url;if(!c){throw new Ext.data.Api.Error("invalid-url",d)}var e=null;var a=c.match(/(.*)(\.json|\.xml|\.html)$/);if(a){e=a[2];c=a[1]}if((this.restful===true||this.prettyUrls===true)&&b instanceof Ext.data.Record&&!b.phantom){c+="/"+b.id}return(e===null)?c:c+e},destroy:function(){this.purgeListeners()}});Ext.apply(Ext.data.DataProxy,Ext.util.Observable.prototype);Ext.util.Observable.call(Ext.data.DataProxy);Ext.data.DataProxy.Error=Ext.extend(Ext.Error,{constructor:function(b,a){this.arg=a;Ext.Error.call(this,b)},name:"Ext.data.DataProxy"});Ext.apply(Ext.data.DataProxy.Error.prototype,{lang:{"action-undefined":"DataProxy attempted to execute an API-action but found an undefined url / function. Please review your Proxy url/api-configuration.","api-invalid":"Recieved an invalid API-configuration. Please ensure your proxy API-configuration contains only the actions from Ext.data.Api.actions."}});Ext.data.Request=function(a){Ext.apply(this,a)};Ext.data.Request.prototype={action:undefined,rs:undefined,params:undefined,callback:Ext.emptyFn,scope:undefined,reader:undefined};Ext.data.Response=function(a){Ext.apply(this,a)};Ext.data.Response.prototype={action:undefined,success:undefined,message:undefined,data:undefined,raw:undefined,records:undefined};Ext.data.ScriptTagProxy=function(a){Ext.apply(this,a);Ext.data.ScriptTagProxy.superclass.constructor.call(this,a);this.head=document.getElementsByTagName("head")[0]};Ext.data.ScriptTagProxy.TRANS_ID=1000;Ext.extend(Ext.data.ScriptTagProxy,Ext.data.DataProxy,{timeout:30000,callbackParam:"callback",nocache:true,doRequest:function(e,g,d,h,k,l,m){var c=Ext.urlEncode(Ext.apply(d,this.extraParams));var b=this.buildUrl(e,g);if(!b){throw new Ext.data.Api.Error("invalid-url",b)}b=Ext.urlAppend(b,c);if(this.nocache){b=Ext.urlAppend(b,"_dc="+(new Date().getTime()))}var a=++Ext.data.ScriptTagProxy.TRANS_ID;var n={id:a,action:e,cb:"stcCallback"+a,scriptId:"stcScript"+a,params:d,arg:m,url:b,callback:k,scope:l,reader:h};window[n.cb]=this.createCallback(e,g,n);b+=String.format("&{0}={1}",this.callbackParam,n.cb);if(this.autoAbort!==false){this.abort()}n.timeoutId=this.handleFailure.defer(this.timeout,this,[n]);var i=document.createElement("script");i.setAttribute("src",b);i.setAttribute("type","text/javascript");i.setAttribute("id",n.scriptId);this.head.appendChild(i);this.trans=n},createCallback:function(d,b,c){var a=this;return function(e){a.trans=false;a.destroyTrans(c,true);if(d===Ext.data.Api.actions.read){a.onRead.call(a,d,c,e)}else{a.onWrite.call(a,d,c,e,b)}}},onRead:function(d,c,b){var a;try{a=c.reader.readRecords(b)}catch(g){this.fireEvent("loadexception",this,c,b,g);this.fireEvent("exception",this,"response",d,c,b,g);c.callback.call(c.scope||window,null,c.arg,false);return}if(a.success===false){this.fireEvent("loadexception",this,c,b);this.fireEvent("exception",this,"remote",d,c,b,null)}else{this.fireEvent("load",this,b,c.arg)}c.callback.call(c.scope||window,a,c.arg,a.success)},onWrite:function(h,g,c,b){var a=g.reader;try{var d=a.readResponse(h,c)}catch(i){this.fireEvent("exception",this,"response",h,g,d,i);g.callback.call(g.scope||window,null,d,false);return}if(!d.success===true){this.fireEvent("exception",this,"remote",h,g,d,b);g.callback.call(g.scope||window,null,d,false);return}this.fireEvent("write",this,h,d.data,d,b,g.arg);g.callback.call(g.scope||window,d.data,d,true)},isLoading:function(){return this.trans?true:false},abort:function(){if(this.isLoading()){this.destroyTrans(this.trans)}},destroyTrans:function(b,a){this.head.removeChild(document.getElementById(b.scriptId));clearTimeout(b.timeoutId);if(a){window[b.cb]=undefined;try{delete window[b.cb]}catch(c){}}else{window[b.cb]=function(){window[b.cb]=undefined;try{delete window[b.cb]}catch(d){}}}},handleFailure:function(a){this.trans=false;this.destroyTrans(a,false);if(a.action===Ext.data.Api.actions.read){this.fireEvent("loadexception",this,null,a.arg)}this.fireEvent("exception",this,"response",a.action,{response:null,options:a.arg});a.callback.call(a.scope||window,null,a.arg,false)},destroy:function(){this.abort();Ext.data.ScriptTagProxy.superclass.destroy.call(this)}});Ext.data.HttpProxy=function(a){Ext.data.HttpProxy.superclass.constructor.call(this,a);this.conn=a;this.conn.url=null;this.useAjax=!a||!a.events;var c=Ext.data.Api.actions;this.activeRequest={};for(var b in c){this.activeRequest[c[b]]=undefined}};Ext.extend(Ext.data.HttpProxy,Ext.data.DataProxy,{getConnection:function(){return this.useAjax?Ext.Ajax:this.conn},setUrl:function(a,b){this.conn.url=a;if(b===true){this.url=a;this.api=null;Ext.data.Api.prepare(this)}},doRequest:function(g,d,i,c,b,e,a){var h={method:(this.api[g])?this.api[g]["method"]:undefined,request:{callback:b,scope:e,arg:a},reader:c,callback:this.createCallback(g,d),scope:this};if(i.jsonData){h.jsonData=i.jsonData}else{if(i.xmlData){h.xmlData=i.xmlData}else{h.params=i||{}}}this.conn.url=this.buildUrl(g,d);if(this.useAjax){Ext.applyIf(h,this.conn);if(this.activeRequest[g]){}this.activeRequest[g]=Ext.Ajax.request(h)}else{this.conn.request(h)}this.conn.url=null},createCallback:function(b,a){return function(e,d,c){this.activeRequest[b]=undefined;if(!d){if(b===Ext.data.Api.actions.read){this.fireEvent("loadexception",this,e,c)}this.fireEvent("exception",this,"response",b,e,c);e.request.callback.call(e.request.scope,null,e.request.arg,false);return}if(b===Ext.data.Api.actions.read){this.onRead(b,e,c)}else{this.onWrite(b,e,c,a)}}},onRead:function(d,h,b){var a;try{a=h.reader.read(b)}catch(g){this.fireEvent("loadexception",this,h,b,g);this.fireEvent("exception",this,"response",d,h,b,g);h.request.callback.call(h.request.scope,null,h.request.arg,false);return}if(a.success===false){this.fireEvent("loadexception",this,h,b);var c=h.reader.readResponse(d,b);this.fireEvent("exception",this,"remote",d,h,c,null)}else{this.fireEvent("load",this,h,h.request.arg)}h.request.callback.call(h.request.scope,a,h.request.arg,a.success)},onWrite:function(g,i,c,b){var a=i.reader;var d;try{d=a.readResponse(g,c)}catch(h){this.fireEvent("exception",this,"response",g,i,c,h);i.request.callback.call(i.request.scope,null,i.request.arg,false);return}if(d.success===true){this.fireEvent("write",this,g,d.data,d,b,i.request.arg)}else{this.fireEvent("exception",this,"remote",g,i,d,b)}i.request.callback.call(i.request.scope,d.data,d,d.success)},destroy:function(){if(!this.useAjax){this.conn.abort()}else{if(this.activeRequest){var b=Ext.data.Api.actions;for(var a in b){if(this.activeRequest[b[a]]){Ext.Ajax.abort(this.activeRequest[b[a]])}}}}Ext.data.HttpProxy.superclass.destroy.call(this)}});Ext.data.MemoryProxy=function(b){var a={};a[Ext.data.Api.actions.read]=true;Ext.data.MemoryProxy.superclass.constructor.call(this,{api:a});this.data=b};Ext.extend(Ext.data.MemoryProxy,Ext.data.DataProxy,{doRequest:function(b,c,a,d,h,i,k){a=a||{};var l;try{l=d.readRecords(this.data)}catch(g){this.fireEvent("loadexception",this,null,k,g);this.fireEvent("exception",this,"response",b,k,null,g);h.call(i,null,k,false);return}h.call(i,l,k,true)}});Ext.data.Types=new function(){var a=Ext.data.SortTypes;Ext.apply(this,{stripRe:/[\$,%]/g,AUTO:{convert:function(b){return b},sortType:a.none,type:"auto"},STRING:{convert:function(b){return(b===undefined||b===null)?"":String(b)},sortType:a.asUCString,type:"string"},INT:{convert:function(b){return b!==undefined&&b!==null&&b!==""?parseInt(String(b).replace(Ext.data.Types.stripRe,""),10):(this.useNull?null:0)},sortType:a.none,type:"int"},FLOAT:{convert:function(b){return b!==undefined&&b!==null&&b!==""?parseFloat(String(b).replace(Ext.data.Types.stripRe,""),10):(this.useNull?null:0)},sortType:a.none,type:"float"},BOOL:{convert:function(b){return b===true||b==="true"||b==1},sortType:a.none,type:"bool"},DATE:{convert:function(c){var d=this.dateFormat;if(!c){return null}if(Ext.isDate(c)){return c}if(d){if(d=="timestamp"){return new Date(c*1000)}if(d=="time"){return new Date(parseInt(c,10))}return Date.parseDate(c,d)}var b=Date.parse(c);return b?new Date(b):null},sortType:a.asDate,type:"date"}});Ext.apply(this,{BOOLEAN:this.BOOL,INTEGER:this.INT,NUMBER:this.FLOAT})};Ext.data.JsonWriter=Ext.extend(Ext.data.DataWriter,{encode:true,encodeDelete:false,constructor:function(a){Ext.data.JsonWriter.superclass.constructor.call(this,a)},render:function(c,d,b){if(this.encode===true){Ext.apply(c,d);c[this.meta.root]=Ext.encode(b)}else{var a=Ext.apply({},d);a[this.meta.root]=b;c.jsonData=a}},createRecord:function(a){return this.toHash(a)},updateRecord:function(a){return this.toHash(a)},destroyRecord:function(b){if(this.encodeDelete){var a={};a[this.meta.idProperty]=b.id;return a}else{return b.id}}});Ext.data.JsonReader=function(a,b){a=a||{};Ext.applyIf(a,{idProperty:"id",successProperty:"success",totalProperty:"total"});Ext.data.JsonReader.superclass.constructor.call(this,a,b||a.fields)};Ext.extend(Ext.data.JsonReader,Ext.data.DataReader,{read:function(a){var b=a.responseText;var c=Ext.decode(b);if(!c){throw {message:"JsonReader.read: Json object not found"}}return this.readRecords(c)},readResponse:function(e,b){var g=(b.responseText!==undefined)?Ext.decode(b.responseText):b;if(!g){throw new Ext.data.JsonReader.Error("response")}var a=this.getRoot(g);if(e===Ext.data.Api.actions.create){var d=Ext.isDefined(a);if(d&&Ext.isEmpty(a)){throw new Ext.data.JsonReader.Error("root-empty",this.meta.root)}else{if(!d){throw new Ext.data.JsonReader.Error("root-undefined-response",this.meta.root)}}}var c=new Ext.data.Response({action:e,success:this.getSuccess(g),data:(a)?this.extractData(a,false):[],message:this.getMessage(g),raw:g});if(Ext.isEmpty(c.success)){throw new Ext.data.JsonReader.Error("successProperty-response",this.meta.successProperty)}return c},readRecords:function(a){this.jsonData=a;if(a.metaData){this.onMetaChange(a.metaData)}var n=this.meta,h=this.recordType,b=h.prototype.fields,m=b.items,i=b.length,k;var g=this.getRoot(a),e=g.length,d=e,l=true;if(n.totalProperty){k=parseInt(this.getTotal(a),10);if(!isNaN(k)){d=k}}if(n.successProperty){k=this.getSuccess(a);if(k===false||k==="false"){l=false}}return{success:l,records:this.extractData(g,true),totalRecords:d}},buildExtractors:function(){if(this.ef){return}var m=this.meta,h=this.recordType,e=h.prototype.fields,l=e.items,k=e.length;if(m.totalProperty){this.getTotal=this.createAccessor(m.totalProperty)}if(m.successProperty){this.getSuccess=this.createAccessor(m.successProperty)}if(m.messageProperty){this.getMessage=this.createAccessor(m.messageProperty)}this.getRoot=m.root?this.createAccessor(m.root):function(g){return g};if(m.id||m.idProperty){var d=this.createAccessor(m.id||m.idProperty);this.getId=function(i){var g=d(i);return(g===undefined||g==="")?null:g}}else{this.getId=function(){return null}}var c=[];for(var b=0;b<k;b++){e=l[b];var a=(e.mapping!==undefined&&e.mapping!==null)?e.mapping:e.name;c.push(this.createAccessor(a))}this.ef=c},simpleAccess:function(b,a){return b[a]},createAccessor:function(){var a=/[\[\.]/;return function(c){if(Ext.isEmpty(c)){return Ext.emptyFn}if(Ext.isFunction(c)){return c}var b=String(c).search(a);if(b>=0){return new Function("obj","return obj"+(b>0?".":"")+c)}return function(d){return d[c]}}}(),extractValues:function(h,d,a){var g,c={};for(var e=0;e<a;e++){g=d[e];var b=this.ef[e](h);c[g.name]=g.convert((b!==undefined)?b:g.defaultValue,h)}return c}});Ext.data.JsonReader.Error=Ext.extend(Ext.Error,{constructor:function(b,a){this.arg=a;Ext.Error.call(this,b)},name:"Ext.data.JsonReader"});Ext.apply(Ext.data.JsonReader.Error.prototype,{lang:{response:"An error occurred while json-decoding your server response","successProperty-response":'Could not locate your "successProperty" in your server response. Please review your JsonReader config to ensure the config-property "successProperty" matches the property in your server-response. See the JsonReader docs.',"root-undefined-config":'Your JsonReader was configured without a "root" property. Please review your JsonReader config and make sure to define the root property. See the JsonReader docs.',"idProperty-undefined":'Your JsonReader was configured without an "idProperty" Please review your JsonReader configuration and ensure the "idProperty" is set (e.g.: "id"). See the JsonReader docs.',"root-empty":'Data was expected to be returned by the server in the "root" property of the response. Please review your JsonReader configuration to ensure the "root" property matches that returned in the server-response. See JsonReader docs.'}});Ext.data.ArrayReader=Ext.extend(Ext.data.JsonReader,{readRecords:function(r){this.arrayData=r;var l=this.meta,d=l?Ext.num(l.idIndex,l.id):null,b=this.recordType,q=b.prototype.fields,z=[],e=true,g;var u=this.getRoot(r);for(var y=0,A=u.length;y<A;y++){var t=u[y],a={},p=((d||d===0)&&t[d]!==undefined&&t[d]!==""?t[d]:null);for(var x=0,m=q.length;x<m;x++){var B=q.items[x],w=B.mapping!==undefined&&B.mapping!==null?B.mapping:x;g=t[w]!==undefined?t[w]:B.defaultValue;g=B.convert(g,t);a[B.name]=g}var c=new b(a,p);c.json=t;z[z.length]=c}var h=z.length;if(l.totalProperty){g=parseInt(this.getTotal(r),10);if(!isNaN(g)){h=g}}if(l.successProperty){g=this.getSuccess(r);if(g===false||g==="false"){e=false}}return{success:e,records:z,totalRecords:h}}});Ext.data.ArrayStore=Ext.extend(Ext.data.Store,{constructor:function(a){Ext.data.ArrayStore.superclass.constructor.call(this,Ext.apply(a,{reader:new Ext.data.ArrayReader(a)}))},loadData:function(e,b){if(this.expandData===true){var d=[];for(var c=0,a=e.length;c<a;c++){d[d.length]=[e[c]]}e=d}Ext.data.ArrayStore.superclass.loadData.call(this,e,b)}});Ext.reg("arraystore",Ext.data.ArrayStore);Ext.data.SimpleStore=Ext.data.ArrayStore;Ext.reg("simplestore",Ext.data.SimpleStore);Ext.data.JsonStore=Ext.extend(Ext.data.Store,{constructor:function(a){Ext.data.JsonStore.superclass.constructor.call(this,Ext.apply(a,{reader:new Ext.data.JsonReader(a)}))}});Ext.reg("jsonstore",Ext.data.JsonStore);Ext.data.XmlWriter=function(a){Ext.data.XmlWriter.superclass.constructor.apply(this,arguments);this.tpl=(typeof(this.tpl)==="string")?new Ext.XTemplate(this.tpl).compile():this.tpl.compile()};Ext.extend(Ext.data.XmlWriter,Ext.data.DataWriter,{documentRoot:"xrequest",forceDocumentRoot:false,root:"records",xmlVersion:"1.0",xmlEncoding:"ISO-8859-15",tpl:'<tpl for="."><\u003fxml version="{version}" encoding="{encoding}"\u003f><tpl if="documentRoot"><{documentRoot}><tpl for="baseParams"><tpl for="."><{name}>{value}</{name}></tpl></tpl></tpl><tpl if="records.length>1"><{root}></tpl><tpl for="records"><{parent.record}><tpl for="."><{name}>{value}</{name}></tpl></{parent.record}></tpl><tpl if="records.length>1"></{root}></tpl><tpl if="documentRoot"></{documentRoot}></tpl></tpl>',render:function(b,c,a){c=this.toArray(c);b.xmlData=this.tpl.applyTemplate({version:this.xmlVersion,encoding:this.xmlEncoding,documentRoot:(c.length>0||this.forceDocumentRoot===true)?this.documentRoot:false,record:this.meta.record,root:this.root,baseParams:c,records:(Ext.isArray(a[0]))?a:[a]})},createRecord:function(a){return this.toArray(this.toHash(a))},updateRecord:function(a){return this.toArray(this.toHash(a))},destroyRecord:function(b){var a={};a[this.meta.idProperty]=b.id;return this.toArray(a)}});Ext.data.XmlReader=function(a,b){a=a||{};Ext.applyIf(a,{idProperty:a.idProperty||a.idPath||a.id,successProperty:a.successProperty||a.success});Ext.data.XmlReader.superclass.constructor.call(this,a,b||a.fields)};Ext.extend(Ext.data.XmlReader,Ext.data.DataReader,{read:function(a){var b=a.responseXML;if(!b){throw {message:"XmlReader.read: XML Document not available"}}return this.readRecords(b)},readRecords:function(d){this.xmlData=d;var a=d.documentElement||d,c=Ext.DomQuery,g=0,e=true;if(this.meta.totalProperty){g=this.getTotal(a,0)}if(this.meta.successProperty){e=this.getSuccess(a)}var b=this.extractData(c.select(this.meta.record,a),true);return{success:e,records:b,totalRecords:g||b.length}},readResponse:function(g,b){var e=Ext.DomQuery,h=b.responseXML,a=h.documentElement||h;var c=new Ext.data.Response({action:g,success:this.getSuccess(a),message:this.getMessage(a),data:this.extractData(e.select(this.meta.record,a)||e.select(this.meta.root,a),false),raw:h});if(Ext.isEmpty(c.success)){throw new Ext.data.DataReader.Error("successProperty-response",this.meta.successProperty)}if(g===Ext.data.Api.actions.create){var d=Ext.isDefined(c.data);if(d&&Ext.isEmpty(c.data)){throw new Ext.data.JsonReader.Error("root-empty",this.meta.root)}else{if(!d){throw new Ext.data.JsonReader.Error("root-undefined-response",this.meta.root)}}}return c},getSuccess:function(){return true},buildExtractors:function(){if(this.ef){return}var m=this.meta,h=this.recordType,e=h.prototype.fields,l=e.items,k=e.length;if(m.totalProperty){this.getTotal=this.createAccessor(m.totalProperty)}if(m.successProperty){this.getSuccess=this.createAccessor(m.successProperty)}if(m.messageProperty){this.getMessage=this.createAccessor(m.messageProperty)}this.getRoot=function(g){return(!Ext.isEmpty(g[this.meta.record]))?g[this.meta.record]:g[this.meta.root]};if(m.idPath||m.idProperty){var d=this.createAccessor(m.idPath||m.idProperty);this.getId=function(g){var i=d(g)||g.id;return(i===undefined||i==="")?null:i}}else{this.getId=function(){return null}}var c=[];for(var b=0;b<k;b++){e=l[b];var a=(e.mapping!==undefined&&e.mapping!==null)?e.mapping:e.name;c.push(this.createAccessor(a))}this.ef=c},createAccessor:function(){var a=Ext.DomQuery;return function(b){if(Ext.isFunction(b)){return b}switch(b){case this.meta.totalProperty:return function(c,d){return a.selectNumber(b,c,d)};break;case this.meta.successProperty:return function(d,e){var c=a.selectValue(b,d,true);var g=c!==false&&c!=="false";return g};break;default:return function(c,d){return a.selectValue(b,c,d)};break}}}(),extractValues:function(h,d,a){var g,c={};for(var e=0;e<a;e++){g=d[e];var b=this.ef[e](h);c[g.name]=g.convert((b!==undefined)?b:g.defaultValue,h)}return c}});Ext.data.XmlStore=Ext.extend(Ext.data.Store,{constructor:function(a){Ext.data.XmlStore.superclass.constructor.call(this,Ext.apply(a,{reader:new Ext.data.XmlReader(a)}))}});Ext.reg("xmlstore",Ext.data.XmlStore);Ext.data.GroupingStore=Ext.extend(Ext.data.Store,{constructor:function(d){d=d||{};this.hasMultiSort=true;this.multiSortInfo=this.multiSortInfo||{sorters:[]};var e=this.multiSortInfo.sorters,c=d.groupField||this.groupField,b=d.sortInfo||this.sortInfo,a=d.groupDir||this.groupDir;if(c){e.push({field:c,direction:a})}if(b){e.push(b)}Ext.data.GroupingStore.superclass.constructor.call(this,d);this.addEvents("groupchange");this.applyGroupField()},remoteGroup:false,groupOnSort:false,groupDir:"ASC",clearGrouping:function(){this.groupField=false;if(this.remoteGroup){if(this.baseParams){delete this.baseParams.groupBy;delete this.baseParams.groupDir}var a=this.lastOptions;if(a&&a.params){delete a.params.groupBy;delete a.params.groupDir}this.reload()}else{this.sort();this.fireEvent("datachanged",this)}},groupBy:function(e,a,d){d=d?(String(d).toUpperCase()=="DESC"?"DESC":"ASC"):this.groupDir;if(this.groupField==e&&this.groupDir==d&&!a){return}var c=this.multiSortInfo.sorters;if(c.length>0&&c[0].field==this.groupField){c.shift()}this.groupField=e;this.groupDir=d;this.applyGroupField();var b=function(){this.fireEvent("groupchange",this,this.getGroupState())};if(this.groupOnSort){this.sort(e,d);b.call(this);return}if(this.remoteGroup){this.on("load",b,this,{single:true});this.reload()}else{this.sort(c);b.call(this)}},sort:function(h,c){if(this.remoteSort){return Ext.data.GroupingStore.superclass.sort.call(this,h,c)}var g=[];if(Ext.isArray(arguments[0])){g=arguments[0]}else{if(h==undefined){g=this.sortInfo?[this.sortInfo]:[]}else{var e=this.fields.get(h);if(!e){return false}var b=e.name,a=this.sortInfo||null,d=this.sortToggle?this.sortToggle[b]:null;if(!c){if(a&&a.field==b){c=(this.sortToggle[b]||"ASC").toggle("ASC","DESC")}else{c=e.sortDir}}this.sortToggle[b]=c;this.sortInfo={field:b,direction:c};g=[this.sortInfo]}}if(this.groupField){g.unshift({direction:this.groupDir,field:this.groupField})}return this.multiSort.call(this,g,c)},applyGroupField:function(){if(this.remoteGroup){if(!this.baseParams){this.baseParams={}}Ext.apply(this.baseParams,{groupBy:this.groupField,groupDir:this.groupDir});var a=this.lastOptions;if(a&&a.params){a.params.groupDir=this.groupDir;delete a.params.groupBy}}},applyGrouping:function(a){if(this.groupField!==false){this.groupBy(this.groupField,true,this.groupDir);return true}else{if(a===true){this.fireEvent("datachanged",this)}return false}},getGroupState:function(){return this.groupOnSort&&this.groupField!==false?(this.sortInfo?this.sortInfo.field:undefined):this.groupField}});Ext.reg("groupingstore",Ext.data.GroupingStore);Ext.data.DirectProxy=function(a){Ext.apply(this,a);if(typeof this.paramOrder=="string"){this.paramOrder=this.paramOrder.split(/[\s,|]/)}Ext.data.DirectProxy.superclass.constructor.call(this,a)};Ext.extend(Ext.data.DirectProxy,Ext.data.DataProxy,{paramOrder:undefined,paramsAsHash:true,directFn:undefined,doRequest:function(b,c,a,e,l,m,o){var k=[],h=this.api[b]||this.directFn;switch(b){case Ext.data.Api.actions.create:k.push(a.jsonData);break;case Ext.data.Api.actions.read:if(h.directCfg.method.len>0){if(this.paramOrder){for(var d=0,g=this.paramOrder.length;d<g;d++){k.push(a[this.paramOrder[d]])}}else{if(this.paramsAsHash){k.push(a)}}}break;case Ext.data.Api.actions.update:k.push(a.jsonData);break;case Ext.data.Api.actions.destroy:k.push(a.jsonData);break}var n={params:a||{},request:{callback:l,scope:m,arg:o},reader:e};k.push(this.createCallback(b,c,n),this);h.apply(window,k)},createCallback:function(d,a,b){var c=this;return function(e,g){if(!g.status){if(d===Ext.data.Api.actions.read){c.fireEvent("loadexception",c,b,g,null)}c.fireEvent("exception",c,"remote",d,b,g,null);b.request.callback.call(b.request.scope,null,b.request.arg,false);return}if(d===Ext.data.Api.actions.read){c.onRead(d,b,e,g)}else{c.onWrite(d,b,e,g,a)}}},onRead:function(g,e,a,d){var b;try{b=e.reader.readRecords(a)}catch(c){this.fireEvent("loadexception",this,e,d,c);this.fireEvent("exception",this,"response",g,e,d,c);e.request.callback.call(e.request.scope,null,e.request.arg,false);return}this.fireEvent("load",this,d,e.request.arg);e.request.callback.call(e.request.scope,b,e.request.arg,true)},onWrite:function(g,d,a,c,b){var e=d.reader.extractData(d.reader.getRoot(a),false);var h=d.reader.getSuccess(a);h=(h!==false);if(h){this.fireEvent("write",this,g,e,c,b,d.request.arg)}else{this.fireEvent("exception",this,"remote",g,d,a,b)}d.request.callback.call(d.request.scope,e,c,h)}});Ext.data.DirectStore=Ext.extend(Ext.data.Store,{constructor:function(a){var b=Ext.apply({},{batchTransactions:false},a);Ext.data.DirectStore.superclass.constructor.call(this,Ext.apply(b,{proxy:Ext.isDefined(b.proxy)?b.proxy:new Ext.data.DirectProxy(Ext.copyTo({},b,"paramOrder,paramsAsHash,directFn,api")),reader:(!Ext.isDefined(b.reader)&&b.fields)?new Ext.data.JsonReader(Ext.copyTo({},b,"totalProperty,root,idProperty"),b.fields):b.reader}))}});Ext.reg("directstore",Ext.data.DirectStore);Ext.Direct=Ext.extend(Ext.util.Observable,{exceptions:{TRANSPORT:"xhr",PARSE:"parse",LOGIN:"login",SERVER:"exception"},constructor:function(){this.addEvents("event","exception");this.transactions={};this.providers={}},addProvider:function(e){var c=arguments;if(c.length>1){for(var d=0,b=c.length;d<b;d++){this.addProvider(c[d])}return}if(!e.events){e=new Ext.Direct.PROVIDERS[e.type](e)}e.id=e.id||Ext.id();this.providers[e.id]=e;e.on("data",this.onProviderData,this);e.on("exception",this.onProviderException,this);if(!e.isConnected()){e.connect()}return e},getProvider:function(a){return this.providers[a]},removeProvider:function(b){var a=b.id?b:this.providers[b];a.un("data",this.onProviderData,this);a.un("exception",this.onProviderException,this);delete this.providers[a.id];return a},addTransaction:function(a){this.transactions[a.tid]=a;return a},removeTransaction:function(a){delete this.transactions[a.tid||a];return a},getTransaction:function(a){return this.transactions[a.tid||a]},onProviderData:function(d,c){if(Ext.isArray(c)){for(var b=0,a=c.length;b<a;b++){this.onProviderData(d,c[b])}return}if(c.name&&c.name!="event"&&c.name!="exception"){this.fireEvent(c.name,c)}else{if(c.type=="exception"){this.fireEvent("exception",c)}}this.fireEvent("event",c,d)},createEvent:function(a,b){return new Ext.Direct.eventTypes[a.type](Ext.apply(a,b))}});Ext.Direct=new Ext.Direct();Ext.Direct.TID=1;Ext.Direct.PROVIDERS={};Ext.Direct.Transaction=function(a){Ext.apply(this,a);this.tid=++Ext.Direct.TID;this.retryCount=0};Ext.Direct.Transaction.prototype={send:function(){this.provider.queueTransaction(this)},retry:function(){this.retryCount++;this.send()},getProvider:function(){return this.provider}};Ext.Direct.Event=function(a){Ext.apply(this,a)};Ext.Direct.Event.prototype={status:true,getData:function(){return this.data}};Ext.Direct.RemotingEvent=Ext.extend(Ext.Direct.Event,{type:"rpc",getTransaction:function(){return this.transaction||Ext.Direct.getTransaction(this.tid)}});Ext.Direct.ExceptionEvent=Ext.extend(Ext.Direct.RemotingEvent,{status:false,type:"exception"});Ext.Direct.eventTypes={rpc:Ext.Direct.RemotingEvent,event:Ext.Direct.Event,exception:Ext.Direct.ExceptionEvent};Ext.direct.Provider=Ext.extend(Ext.util.Observable,{priority:1,constructor:function(a){Ext.apply(this,a);this.addEvents("connect","disconnect","data","exception");Ext.direct.Provider.superclass.constructor.call(this,a)},isConnected:function(){return false},connect:Ext.emptyFn,disconnect:Ext.emptyFn});Ext.direct.JsonProvider=Ext.extend(Ext.direct.Provider,{parseResponse:function(a){if(!Ext.isEmpty(a.responseText)){if(typeof a.responseText=="object"){return a.responseText}return Ext.decode(a.responseText)}return null},getEvents:function(k){var g=null;try{g=this.parseResponse(k)}catch(h){var d=new Ext.Direct.ExceptionEvent({data:h,xhr:k,code:Ext.Direct.exceptions.PARSE,message:"Error parsing json response: \n\n "+g});return[d]}var c=[];if(Ext.isArray(g)){for(var b=0,a=g.length;b<a;b++){c.push(Ext.Direct.createEvent(g[b]))}}else{c.push(Ext.Direct.createEvent(g))}return c}});Ext.direct.PollingProvider=Ext.extend(Ext.direct.JsonProvider,{priority:3,interval:3000,constructor:function(a){Ext.direct.PollingProvider.superclass.constructor.call(this,a);this.addEvents("beforepoll","poll")},isConnected:function(){return !!this.pollTask},connect:function(){if(this.url&&!this.pollTask){this.pollTask=Ext.TaskMgr.start({run:function(){if(this.fireEvent("beforepoll",this)!==false){if(typeof this.url=="function"){this.url(this.baseParams)}else{Ext.Ajax.request({url:this.url,callback:this.onData,scope:this,params:this.baseParams})}}},interval:this.interval,scope:this});this.fireEvent("connect",this)}else{if(!this.url){throw"Error initializing PollingProvider, no url configured."}}},disconnect:function(){if(this.pollTask){Ext.TaskMgr.stop(this.pollTask);delete this.pollTask;this.fireEvent("disconnect",this)}},onData:function(d,k,h){if(k){var c=this.getEvents(h);for(var b=0,a=c.length;b<a;b++){var g=c[b];this.fireEvent("data",this,g)}}else{var g=new Ext.Direct.ExceptionEvent({data:g,code:Ext.Direct.exceptions.TRANSPORT,message:"Unable to connect to the server.",xhr:h});this.fireEvent("data",this,g)}}});Ext.Direct.PROVIDERS.polling=Ext.direct.PollingProvider;Ext.direct.RemotingProvider=Ext.extend(Ext.direct.JsonProvider,{enableBuffer:10,maxRetries:1,timeout:undefined,constructor:function(a){Ext.direct.RemotingProvider.superclass.constructor.call(this,a);this.addEvents("beforecall","call");this.namespace=(Ext.isString(this.namespace))?Ext.ns(this.namespace):this.namespace||window;this.transactions={};this.callBuffer=[]},initAPI:function(){var h=this.actions;for(var k in h){var d=this.namespace[k]||(this.namespace[k]={}),e=h[k];for(var g=0,b=e.length;g<b;g++){var a=e[g];d[a.name]=this.createMethod(k,a)}}},isConnected:function(){return !!this.connected},connect:function(){if(this.url){this.initAPI();this.connected=true;this.fireEvent("connect",this)}else{if(!this.url){throw"Error initializing RemotingProvider, no url configured."}}},disconnect:function(){if(this.connected){this.connected=false;this.fireEvent("disconnect",this)}},onData:function(a,h,k){if(h){var l=this.getEvents(k);for(var b=0,c=l.length;b<c;b++){var d=l[b],m=this.getTransaction(d);this.fireEvent("data",this,d);if(m){this.doCallback(m,d,true);Ext.Direct.removeTransaction(m)}}}else{var g=[].concat(a.ts);for(var b=0,c=g.length;b<c;b++){var m=this.getTransaction(g[b]);if(m&&m.retryCount<this.maxRetries){m.retry()}else{var d=new Ext.Direct.ExceptionEvent({data:d,transaction:m,code:Ext.Direct.exceptions.TRANSPORT,message:"Unable to connect to the server.",xhr:k});this.fireEvent("data",this,d);if(m){this.doCallback(m,d,false);Ext.Direct.removeTransaction(m)}}}}},getCallData:function(a){return{action:a.action,method:a.method,data:a.data,type:"rpc",tid:a.tid}},doSend:function(d){var g={url:this.url,callback:this.onData,scope:this,ts:d,timeout:this.timeout},b;if(Ext.isArray(d)){b=[];for(var c=0,a=d.length;c<a;c++){b.push(this.getCallData(d[c]))}}else{b=this.getCallData(d)}if(this.enableUrlEncode){var e={};e[Ext.isString(this.enableUrlEncode)?this.enableUrlEncode:"data"]=Ext.encode(b);g.params=e}else{g.jsonData=b}Ext.Ajax.request(g)},combineAndSend:function(){var a=this.callBuffer.length;if(a>0){this.doSend(a==1?this.callBuffer[0]:this.callBuffer);this.callBuffer=[]}},queueTransaction:function(a){if(a.form){this.processForm(a);return}this.callBuffer.push(a);if(this.enableBuffer){if(!this.callTask){this.callTask=new Ext.util.DelayedTask(this.combineAndSend,this)}this.callTask.delay(Ext.isNumber(this.enableBuffer)?this.enableBuffer:10)}else{this.combineAndSend()}},doCall:function(i,a,b){var h=null,e=b[a.len],g=b[a.len+1];if(a.len!==0){h=b.slice(0,a.len)}var d=new Ext.Direct.Transaction({provider:this,args:b,action:i,method:a.name,data:h,cb:g&&Ext.isFunction(e)?e.createDelegate(g):e});if(this.fireEvent("beforecall",this,d,a)!==false){Ext.Direct.addTransaction(d);this.queueTransaction(d);this.fireEvent("call",this,d,a)}},doForm:function(k,b,g,i,e){var d=new Ext.Direct.Transaction({provider:this,action:k,method:b.name,args:[g,i,e],cb:e&&Ext.isFunction(i)?i.createDelegate(e):i,isForm:true});if(this.fireEvent("beforecall",this,d,b)!==false){Ext.Direct.addTransaction(d);var a=String(g.getAttribute("enctype")).toLowerCase()=="multipart/form-data",h={extTID:d.tid,extAction:k,extMethod:b.name,extType:"rpc",extUpload:String(a)};Ext.apply(d,{form:Ext.getDom(g),isUpload:a,params:i&&Ext.isObject(i.params)?Ext.apply(h,i.params):h});this.fireEvent("call",this,d,b);this.processForm(d)}},processForm:function(a){Ext.Ajax.request({url:this.url,params:a.params,callback:this.onData,scope:this,form:a.form,isUpload:a.isUpload,ts:a})},createMethod:function(d,a){var b;if(!a.formHandler){b=function(){this.doCall(d,a,Array.prototype.slice.call(arguments,0))}.createDelegate(this)}else{b=function(e,g,c){this.doForm(d,a,e,g,c)}.createDelegate(this)}b.directCfg={action:d,method:a};return b},getTransaction:function(a){return a&&a.tid?Ext.Direct.getTransaction(a.tid):null},doCallback:function(c,g){var d=g.status?"success":"failure";if(c&&c.cb){var b=c.cb,a=Ext.isDefined(g.result)?g.result:g.data;if(Ext.isFunction(b)){b(a,g)}else{Ext.callback(b[d],b.scope,[a,g]);Ext.callback(b.callback,b.scope,[a,g])}}}});Ext.Direct.PROVIDERS.remoting=Ext.direct.RemotingProvider;Ext.Resizable=Ext.extend(Ext.util.Observable,{constructor:function(d,e){this.el=Ext.get(d);if(e&&e.wrap){e.resizeChild=this.el;this.el=this.el.wrap(typeof e.wrap=="object"?e.wrap:{cls:"xresizable-wrap"});this.el.id=this.el.dom.id=e.resizeChild.id+"-rzwrap";this.el.setStyle("overflow","hidden");this.el.setPositioning(e.resizeChild.getPositioning());e.resizeChild.clearPositioning();if(!e.width||!e.height){var g=e.resizeChild.getSize();this.el.setSize(g.width,g.height)}if(e.pinned&&!e.adjustments){e.adjustments="auto"}}this.proxy=this.el.createProxy({tag:"div",cls:"x-resizable-proxy",id:this.el.id+"-rzproxy"},Ext.getBody());this.proxy.unselectable();this.proxy.enableDisplayMode("block");Ext.apply(this,e);if(this.pinned){this.disableTrackOver=true;this.el.addClass("x-resizable-pinned")}var l=this.el.getStyle("position");if(l!="absolute"&&l!="fixed"){this.el.setStyle("position","relative")}if(!this.handles){this.handles="s,e,se";if(this.multiDirectional){this.handles+=",n,w"}}if(this.handles=="all"){this.handles="n s e w ne nw se sw"}var p=this.handles.split(/\s*?[,;]\s*?| /);var c=Ext.Resizable.positions;for(var k=0,m=p.length;k<m;k++){if(p[k]&&c[p[k]]){var o=c[p[k]];this[o]=new Ext.Resizable.Handle(this,o,this.disableTrackOver,this.transparent,this.handleCls)}}this.corner=this.southeast;if(this.handles.indexOf("n")!=-1||this.handles.indexOf("w")!=-1){this.updateBox=true}this.activeHandle=null;if(this.resizeChild){if(typeof this.resizeChild=="boolean"){this.resizeChild=Ext.get(this.el.dom.firstChild,true)}else{this.resizeChild=Ext.get(this.resizeChild,true)}}if(this.adjustments=="auto"){var b=this.resizeChild;var n=this.west,h=this.east,a=this.north,p=this.south;if(b&&(n||a)){b.position("relative");b.setLeft(n?n.el.getWidth():0);b.setTop(a?a.el.getHeight():0)}this.adjustments=[(h?-h.el.getWidth():0)+(n?-n.el.getWidth():0),(a?-a.el.getHeight():0)+(p?-p.el.getHeight():0)-1]}if(this.draggable){this.dd=this.dynamic?this.el.initDD(null):this.el.initDDProxy(null,{dragElId:this.proxy.id});this.dd.setHandleElId(this.resizeChild?this.resizeChild.id:this.el.id);if(this.constrainTo){this.dd.constrainTo(this.constrainTo)}}this.addEvents("beforeresize","resize");if(this.width!==null&&this.height!==null){this.resizeTo(this.width,this.height)}else{this.updateChildSize()}if(Ext.isIE){this.el.dom.style.zoom=1}Ext.Resizable.superclass.constructor.call(this)},adjustments:[0,0],animate:false,disableTrackOver:false,draggable:false,duration:0.35,dynamic:false,easing:"easeOutStrong",enabled:true,handles:false,multiDirectional:false,height:null,width:null,heightIncrement:0,widthIncrement:0,minHeight:5,minWidth:5,maxHeight:10000,maxWidth:10000,minX:0,minY:0,pinned:false,preserveRatio:false,resizeChild:false,transparent:false,resizeTo:function(b,a){this.el.setSize(b,a);this.updateChildSize();this.fireEvent("resize",this,b,a,null)},startSizing:function(c,b){this.fireEvent("beforeresize",this,c);if(this.enabled){if(!this.overlay){this.overlay=this.el.createProxy({tag:"div",cls:"x-resizable-overlay",html:" "},Ext.getBody());this.overlay.unselectable();this.overlay.enableDisplayMode("block");this.overlay.on({scope:this,mousemove:this.onMouseMove,mouseup:this.onMouseUp})}this.overlay.setStyle("cursor",b.el.getStyle("cursor"));this.resizing=true;this.startBox=this.el.getBox();this.startPoint=c.getXY();this.offsets=[(this.startBox.x+this.startBox.width)-this.startPoint[0],(this.startBox.y+this.startBox.height)-this.startPoint[1]];this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.overlay.show();if(this.constrainTo){var a=Ext.get(this.constrainTo);this.resizeRegion=a.getRegion().adjust(a.getFrameWidth("t"),a.getFrameWidth("l"),-a.getFrameWidth("b"),-a.getFrameWidth("r"))}this.proxy.setStyle("visibility","hidden");this.proxy.show();this.proxy.setBox(this.startBox);if(!this.dynamic){this.proxy.setStyle("visibility","visible")}}},onMouseDown:function(a,b){if(this.enabled){b.stopEvent();this.activeHandle=a;this.startSizing(b,a)}},onMouseUp:function(b){this.activeHandle=null;var a=this.resizeElement();this.resizing=false;this.handleOut();this.overlay.hide();this.proxy.hide();this.fireEvent("resize",this,a.width,a.height,b)},updateChildSize:function(){if(this.resizeChild){var d=this.el;var e=this.resizeChild;var c=this.adjustments;if(d.dom.offsetWidth){var a=d.getSize(true);e.setSize(a.width+c[0],a.height+c[1])}if(Ext.isIE){setTimeout(function(){if(d.dom.offsetWidth){var g=d.getSize(true);e.setSize(g.width+c[0],g.height+c[1])}},10)}}},snap:function(c,e,b){if(!e||!c){return c}var d=c;var a=c%e;if(a>0){if(a>(e/2)){d=c+(e-a)}else{d=c-a}}return Math.max(b,d)},resizeElement:function(){var a=this.proxy.getBox();if(this.updateBox){this.el.setBox(a,false,this.animate,this.duration,null,this.easing)}else{this.el.setSize(a.width,a.height,this.animate,this.duration,null,this.easing)}this.updateChildSize();if(!this.dynamic){this.proxy.hide()}if(this.draggable&&this.constrainTo){this.dd.resetConstraints();this.dd.constrainTo(this.constrainTo)}return a},constrain:function(b,c,a,d){if(b-c<a){c=b-a}else{if(b-c>d){c=b-d}}return c},onMouseMove:function(A){if(this.enabled&&this.activeHandle){try{if(this.resizeRegion&&!this.resizeRegion.contains(A.getPoint())){return}var u=this.curSize||this.startBox,m=this.startBox.x,l=this.startBox.y,c=m,b=l,n=u.width,v=u.height,d=n,p=v,o=this.minWidth,B=this.minHeight,t=this.maxWidth,E=this.maxHeight,i=this.widthIncrement,a=this.heightIncrement,C=A.getXY(),s=-(this.startPoint[0]-Math.max(this.minX,C[0])),q=-(this.startPoint[1]-Math.max(this.minY,C[1])),k=this.activeHandle.position,F,g;switch(k){case"east":n+=s;n=Math.min(Math.max(o,n),t);break;case"south":v+=q;v=Math.min(Math.max(B,v),E);break;case"southeast":n+=s;v+=q;n=Math.min(Math.max(o,n),t);v=Math.min(Math.max(B,v),E);break;case"north":q=this.constrain(v,q,B,E);l+=q;v-=q;break;case"west":s=this.constrain(n,s,o,t);m+=s;n-=s;break;case"northeast":n+=s;n=Math.min(Math.max(o,n),t);q=this.constrain(v,q,B,E);l+=q;v-=q;break;case"northwest":s=this.constrain(n,s,o,t);q=this.constrain(v,q,B,E);l+=q;v-=q;m+=s;n-=s;break;case"southwest":s=this.constrain(n,s,o,t);v+=q;v=Math.min(Math.max(B,v),E);m+=s;n-=s;break}var r=this.snap(n,i,o);var D=this.snap(v,a,B);if(r!=n||D!=v){switch(k){case"northeast":l-=D-v;break;case"north":l-=D-v;break;case"southwest":m-=r-n;break;case"west":m-=r-n;break;case"northwest":m-=r-n;l-=D-v;break}n=r;v=D}if(this.preserveRatio){switch(k){case"southeast":case"east":v=p*(n/d);v=Math.min(Math.max(B,v),E);n=d*(v/p);break;case"south":n=d*(v/p);n=Math.min(Math.max(o,n),t);v=p*(n/d);break;case"northeast":n=d*(v/p);n=Math.min(Math.max(o,n),t);v=p*(n/d);break;case"north":F=n;n=d*(v/p);n=Math.min(Math.max(o,n),t);v=p*(n/d);m+=(F-n)/2;break;case"southwest":v=p*(n/d);v=Math.min(Math.max(B,v),E);F=n;n=d*(v/p);m+=F-n;break;case"west":g=v;v=p*(n/d);v=Math.min(Math.max(B,v),E);l+=(g-v)/2;F=n;n=d*(v/p);m+=F-n;break;case"northwest":F=n;g=v;v=p*(n/d);v=Math.min(Math.max(B,v),E);n=d*(v/p);l+=g-v;m+=F-n;break}}this.proxy.setBounds(m,l,n,v);if(this.dynamic){this.resizeElement()}}catch(z){}}},handleOver:function(){if(this.enabled){this.el.addClass("x-resizable-over")}},handleOut:function(){if(!this.resizing){this.el.removeClass("x-resizable-over")}},getEl:function(){return this.el},getResizeChild:function(){return this.resizeChild},destroy:function(b){Ext.destroy(this.dd,this.overlay,this.proxy);this.overlay=null;this.proxy=null;var c=Ext.Resizable.positions;for(var a in c){if(typeof c[a]!="function"&&this[c[a]]){this[c[a]].destroy()}}if(b){this.el.update("");Ext.destroy(this.el);this.el=null}this.purgeListeners()},syncHandleHeight:function(){var a=this.el.getHeight(true);if(this.west){this.west.el.setHeight(a)}if(this.east){this.east.el.setHeight(a)}}});Ext.Resizable.positions={n:"north",s:"south",e:"east",w:"west",se:"southeast",sw:"southwest",nw:"northwest",ne:"northeast"};Ext.Resizable.Handle=Ext.extend(Object,{constructor:function(d,g,c,e,a){if(!this.tpl){var b=Ext.DomHelper.createTemplate({tag:"div",cls:"x-resizable-handle x-resizable-handle-{0}"});b.compile();Ext.Resizable.Handle.prototype.tpl=b}this.position=g;this.rz=d;this.el=this.tpl.append(d.el.dom,[this.position],true);this.el.unselectable();if(e){this.el.setOpacity(0)}if(!Ext.isEmpty(a)){this.el.addClass(a)}this.el.on("mousedown",this.onMouseDown,this);if(!c){this.el.on({scope:this,mouseover:this.onMouseOver,mouseout:this.onMouseOut})}},afterResize:function(a){},onMouseDown:function(a){this.rz.onMouseDown(this,a)},onMouseOver:function(a){this.rz.handleOver(this,a)},onMouseOut:function(a){this.rz.handleOut(this,a)},destroy:function(){Ext.destroy(this.el);this.el=null}});Ext.Window=Ext.extend(Ext.Panel,{baseCls:"x-window",resizable:true,draggable:true,closable:true,closeAction:"close",constrain:false,constrainHeader:false,plain:false,minimizable:false,maximizable:false,minHeight:100,minWidth:200,expandOnShow:true,showAnimDuration:0.25,hideAnimDuration:0.25,collapsible:false,initHidden:undefined,hidden:true,elements:"header,body",frame:true,floating:true,initComponent:function(){this.initTools();Ext.Window.superclass.initComponent.call(this);this.addEvents("resize","maximize","minimize","restore");if(Ext.isDefined(this.initHidden)){this.hidden=this.initHidden}if(this.hidden===false){this.hidden=true;this.show()}},getState:function(){return Ext.apply(Ext.Window.superclass.getState.call(this)||{},this.getBox(true))},onRender:function(b,a){Ext.Window.superclass.onRender.call(this,b,a);if(this.plain){this.el.addClass("x-window-plain")}this.focusEl=this.el.createChild({tag:"a",href:"#",cls:"x-dlg-focus",tabIndex:"-1",html:" "});this.focusEl.swallowEvent("click",true);this.proxy=this.el.createProxy("x-window-proxy");this.proxy.enableDisplayMode("block");if(this.modal){this.mask=this.container.createChild({cls:"ext-el-mask"},this.el.dom);this.mask.enableDisplayMode("block");this.mask.hide();this.mon(this.mask,"click",this.focus,this)}if(this.maximizable){this.mon(this.header,"dblclick",this.toggleMaximize,this)}},initEvents:function(){Ext.Window.superclass.initEvents.call(this);if(this.animateTarget){this.setAnimateTarget(this.animateTarget)}if(this.resizable){this.resizer=new Ext.Resizable(this.el,{minWidth:this.minWidth,minHeight:this.minHeight,handles:this.resizeHandles||"all",pinned:true,resizeElement:this.resizerAction,handleCls:"x-window-handle"});this.resizer.window=this;this.mon(this.resizer,"beforeresize",this.beforeResize,this)}if(this.draggable){this.header.addClass("x-window-draggable")}this.mon(this.el,"mousedown",this.toFront,this);this.manager=this.manager||Ext.WindowMgr;this.manager.register(this);if(this.maximized){this.maximized=false;this.maximize()}if(this.closable){var a=this.getKeyMap();a.on(27,this.onEsc,this);a.disable()}},initDraggable:function(){this.dd=new Ext.Window.DD(this)},onEsc:function(a,b){b.stopEvent();this[this.closeAction]()},beforeDestroy:function(){if(this.rendered){this.hide();this.clearAnchor();Ext.destroy(this.focusEl,this.resizer,this.dd,this.proxy,this.mask)}Ext.Window.superclass.beforeDestroy.call(this)},onDestroy:function(){if(this.manager){this.manager.unregister(this)}Ext.Window.superclass.onDestroy.call(this)},initTools:function(){if(this.minimizable){this.addTool({id:"minimize",handler:this.minimize.createDelegate(this,[])})}if(this.maximizable){this.addTool({id:"maximize",handler:this.maximize.createDelegate(this,[])});this.addTool({id:"restore",handler:this.restore.createDelegate(this,[]),hidden:true})}if(this.closable){this.addTool({id:"close",handler:this[this.closeAction].createDelegate(this,[])})}},resizerAction:function(){var a=this.proxy.getBox();this.proxy.hide();this.window.handleResize(a);return a},beforeResize:function(){this.resizer.minHeight=Math.max(this.minHeight,this.getFrameHeight()+40);this.resizer.minWidth=Math.max(this.minWidth,this.getFrameWidth()+40);this.resizeBox=this.el.getBox()},updateHandles:function(){if(Ext.isIE&&this.resizer){this.resizer.syncHandleHeight();this.el.repaint()}},handleResize:function(b){var a=this.resizeBox;if(a.x!=b.x||a.y!=b.y){this.updateBox(b)}else{this.setSize(b);if(Ext.isIE6&&Ext.isStrict){this.doLayout()}}this.focus();this.updateHandles();this.saveState()},focus:function(){var e=this.focusEl,a=this.defaultButton,c=typeof a,d,b;if(Ext.isDefined(a)){if(Ext.isNumber(a)&&this.fbar){e=this.fbar.items.get(a)}else{if(Ext.isString(a)){e=Ext.getCmp(a)}else{e=a}}d=e.getEl();b=Ext.getDom(this.container);if(d&&b){if(b!=document.body&&!Ext.lib.Region.getRegion(b).contains(Ext.lib.Region.getRegion(d.dom))){return}}}e=e||this.focusEl;e.focus.defer(10,e)},setAnimateTarget:function(a){a=Ext.get(a);this.animateTarget=a},beforeShow:function(){delete this.el.lastXY;delete this.el.lastLT;if(this.x===undefined||this.y===undefined){var a=this.el.getAlignToXY(this.container,"c-c");var b=this.el.translatePoints(a[0],a[1]);this.x=this.x===undefined?b.left:this.x;this.y=this.y===undefined?b.top:this.y}this.el.setLeftTop(this.x,this.y);if(this.expandOnShow){this.expand(false)}if(this.modal){Ext.getBody().addClass("x-body-masked");this.mask.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.mask.show()}},show:function(c,a,b){if(!this.rendered){this.render(Ext.getBody())}if(this.hidden===false){this.toFront();return this}if(this.fireEvent("beforeshow",this)===false){return this}if(a){this.on("show",a,b,{single:true})}this.hidden=false;if(Ext.isDefined(c)){this.setAnimateTarget(c)}this.beforeShow();if(this.animateTarget){this.animShow()}else{this.afterShow()}return this},afterShow:function(b){if(this.isDestroyed){return false}this.proxy.hide();this.el.setStyle("display","block");this.el.show();if(this.maximized){this.fitContainer()}if(Ext.isMac&&Ext.isGecko2){this.cascade(this.setAutoScroll)}if(this.monitorResize||this.modal||this.constrain||this.constrainHeader){Ext.EventManager.onWindowResize(this.onWindowResize,this)}this.doConstrain();this.doLayout();if(this.keyMap){this.keyMap.enable()}this.toFront();this.updateHandles();if(b&&(Ext.isIE||Ext.isWebKit)){var a=this.getSize();this.onResize(a.width,a.height)}this.onShow();this.fireEvent("show",this)},animShow:function(){this.proxy.show();this.proxy.setBox(this.animateTarget.getBox());this.proxy.setOpacity(0);var a=this.getBox();this.el.setStyle("display","none");this.proxy.shift(Ext.apply(a,{callback:this.afterShow.createDelegate(this,[true],false),scope:this,easing:"easeNone",duration:this.showAnimDuration,opacity:0.5}))},hide:function(c,a,b){if(this.hidden||this.fireEvent("beforehide",this)===false){return this}if(a){this.on("hide",a,b,{single:true})}this.hidden=true;if(c!==undefined){this.setAnimateTarget(c)}if(this.modal){this.mask.hide();Ext.getBody().removeClass("x-body-masked")}if(this.animateTarget){this.animHide()}else{this.el.hide();this.afterHide()}return this},afterHide:function(){this.proxy.hide();if(this.monitorResize||this.modal||this.constrain||this.constrainHeader){Ext.EventManager.removeResizeListener(this.onWindowResize,this)}if(this.keyMap){this.keyMap.disable()}this.onHide();this.fireEvent("hide",this)},animHide:function(){this.proxy.setOpacity(0.5);this.proxy.show();var a=this.getBox(false);this.proxy.setBox(a);this.el.hide();this.proxy.shift(Ext.apply(this.animateTarget.getBox(),{callback:this.afterHide,scope:this,duration:this.hideAnimDuration,easing:"easeNone",opacity:0}))},onShow:Ext.emptyFn,onHide:Ext.emptyFn,onWindowResize:function(){if(this.maximized){this.fitContainer()}if(this.modal){this.mask.setSize("100%","100%");var a=this.mask.dom.offsetHeight;this.mask.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true))}this.doConstrain()},doConstrain:function(){if(this.constrain||this.constrainHeader){var b;if(this.constrain){b={right:this.el.shadowOffset,left:this.el.shadowOffset,bottom:this.el.shadowOffset}}else{var a=this.getSize();b={right:-(a.width-100),bottom:-(a.height-25)}}var c=this.el.getConstrainToXY(this.container,true,b);if(c){this.setPosition(c[0],c[1])}}},ghost:function(a){var c=this.createGhost(a);var b=this.getBox(true);c.setLeftTop(b.x,b.y);c.setWidth(b.width);this.el.hide();this.activeGhost=c;return c},unghost:function(b,a){if(!this.activeGhost){return}if(b!==false){this.el.show();this.focus.defer(10,this);if(Ext.isMac&&Ext.isGecko2){this.cascade(this.setAutoScroll)}}if(a!==false){this.setPosition(this.activeGhost.getLeft(true),this.activeGhost.getTop(true))}this.activeGhost.hide();this.activeGhost.remove();delete this.activeGhost},minimize:function(){this.fireEvent("minimize",this);return this},close:function(){if(this.fireEvent("beforeclose",this)!==false){if(this.hidden){this.doClose()}else{this.hide(null,this.doClose,this)}}},doClose:function(){this.fireEvent("close",this);this.destroy()},maximize:function(){if(!this.maximized){this.expand(false);this.restoreSize=this.getSize();this.restorePos=this.getPosition(true);if(this.maximizable){this.tools.maximize.hide();this.tools.restore.show()}this.maximized=true;this.el.disableShadow();if(this.dd){this.dd.lock()}if(this.collapsible){this.tools.toggle.hide()}this.el.addClass("x-window-maximized");this.container.addClass("x-window-maximized-ct");this.setPosition(0,0);this.fitContainer();this.fireEvent("maximize",this)}return this},restore:function(){if(this.maximized){var a=this.tools;this.el.removeClass("x-window-maximized");if(a.restore){a.restore.hide()}if(a.maximize){a.maximize.show()}this.setPosition(this.restorePos[0],this.restorePos[1]);this.setSize(this.restoreSize.width,this.restoreSize.height);delete this.restorePos;delete this.restoreSize;this.maximized=false;this.el.enableShadow(true);if(this.dd){this.dd.unlock()}if(this.collapsible&&a.toggle){a.toggle.show()}this.container.removeClass("x-window-maximized-ct");this.doConstrain();this.fireEvent("restore",this)}return this},toggleMaximize:function(){return this[this.maximized?"restore":"maximize"]()},fitContainer:function(){var a=this.container.getViewSize(false);this.setSize(a.width,a.height)},setZIndex:function(a){if(this.modal){this.mask.setStyle("z-index",a)}this.el.setZIndex(++a);a+=5;if(this.resizer){this.resizer.proxy.setStyle("z-index",++a)}this.lastZIndex=a},alignTo:function(b,a,c){var d=this.el.getAlignToXY(b,a,c);this.setPagePosition(d[0],d[1]);return this},anchorTo:function(c,e,d,b){this.clearAnchor();this.anchorTarget={el:c,alignment:e,offsets:d};Ext.EventManager.onWindowResize(this.doAnchor,this);var a=typeof b;if(a!="undefined"){Ext.EventManager.on(window,"scroll",this.doAnchor,this,{buffer:a=="number"?b:50})}return this.doAnchor()},doAnchor:function(){var a=this.anchorTarget;this.alignTo(a.el,a.alignment,a.offsets);return this},clearAnchor:function(){if(this.anchorTarget){Ext.EventManager.removeResizeListener(this.doAnchor,this);Ext.EventManager.un(window,"scroll",this.doAnchor,this);delete this.anchorTarget}return this},toFront:function(a){if(this.manager.bringToFront(this)){if(!a||!a.getTarget().focus){this.focus()}}return this},setActive:function(a){if(a){if(!this.maximized){this.el.enableShadow(true)}this.fireEvent("activate",this)}else{this.el.disableShadow();this.fireEvent("deactivate",this)}},toBack:function(){this.manager.sendToBack(this);return this},center:function(){var a=this.el.getAlignToXY(this.container,"c-c");this.setPagePosition(a[0],a[1]);return this}});Ext.reg("window",Ext.Window);Ext.Window.DD=Ext.extend(Ext.dd.DD,{constructor:function(a){this.win=a;Ext.Window.DD.superclass.constructor.call(this,a.el.id,"WindowDD-"+a.id);this.setHandleElId(a.header.id);this.scroll=false},moveOnly:true,headerOffsets:[100,25],startDrag:function(){var a=this.win;this.proxy=a.ghost(a.initialConfig.cls);if(a.constrain!==false){var c=a.el.shadowOffset;this.constrainTo(a.container,{right:c,left:c,bottom:c})}else{if(a.constrainHeader!==false){var b=this.proxy.getSize();this.constrainTo(a.container,{right:-(b.width-this.headerOffsets[0]),bottom:-(b.height-this.headerOffsets[1])})}}},b4Drag:Ext.emptyFn,onDrag:function(a){this.alignElWithMouse(this.proxy,a.getPageX(),a.getPageY())},endDrag:function(a){this.win.unghost();this.win.saveState()}});Ext.WindowGroup=function(){var g={};var d=[];var e=null;var c=function(k,i){return(!k._lastAccess||k._lastAccess<i._lastAccess)?-1:1};var h=function(){var m=d,k=m.length;if(k>0){m.sort(c);var l=m[0].manager.zseed;for(var n=0;n<k;n++){var o=m[n];if(o&&!o.hidden){o.setZIndex(l+(n*10))}}}a()};var b=function(i){if(i!=e){if(e){e.setActive(false)}e=i;if(i){i.setActive(true)}}};var a=function(){for(var k=d.length-1;k>=0;--k){if(!d[k].hidden){b(d[k]);return}}b(null)};return{zseed:9000,register:function(i){if(i.manager){i.manager.unregister(i)}i.manager=this;g[i.id]=i;d.push(i);i.on("hide",a)},unregister:function(i){delete i.manager;delete g[i.id];i.un("hide",a);d.remove(i)},get:function(i){return typeof i=="object"?i:g[i]},bringToFront:function(i){i=this.get(i);if(i!=e){i._lastAccess=new Date().getTime();h();return true}return false},sendToBack:function(i){i=this.get(i);i._lastAccess=-(new Date().getTime());h();return i},hideAll:function(){for(var i in g){if(g[i]&&typeof g[i]!="function"&&g[i].isVisible()){g[i].hide()}}},getActive:function(){return e},getBy:function(m,l){var n=[];for(var k=d.length-1;k>=0;--k){var o=d[k];if(m.call(l||o,o)!==false){n.push(o)}}return n},each:function(k,i){for(var l in g){if(g[l]&&typeof g[l]!="function"){if(k.call(i||g[l],g[l])===false){return}}}}}};Ext.WindowMgr=new Ext.WindowGroup();Ext.MessageBox=function(){var v,b,r,u,h,m,t,a,o,q,k,g,s,w,p,i="",d="",n=["ok","yes","no","cancel"];var c=function(y){s[y].blur();if(v.isVisible()){v.hide();x();Ext.callback(b.fn,b.scope||window,[y,w.dom.value,b],1)}};var x=function(){if(b&&b.cls){v.el.removeClass(b.cls)}o.reset()};var e=function(A,y,z){if(b&&b.closable!==false){v.hide();x()}if(z){z.stopEvent()}};var l=function(y){var A=0,z;if(!y){Ext.each(n,function(B){s[B].hide()});return A}v.footer.dom.style.display="";Ext.iterate(s,function(B,C){z=y[B];if(z){C.show();C.setText(Ext.isString(z)?z:Ext.MessageBox.buttonText[B]);A+=C.getEl().getWidth()+15}else{C.hide()}});return A};return{getDialog:function(y){if(!v){var A=[];s={};Ext.each(n,function(B){A.push(s[B]=new Ext.Button({text:this.buttonText[B],handler:c.createCallback(B),hideMode:"offsets"}))},this);v=new Ext.Window({autoCreate:true,title:y,resizable:false,constrain:true,constrainHeader:true,minimizable:false,maximizable:false,stateful:false,modal:true,shim:true,buttonAlign:"center",width:400,height:100,minHeight:80,plain:true,footer:true,closable:true,close:function(){if(b&&b.buttons&&b.buttons.no&&!b.buttons.cancel){c("no")}else{c("cancel")}},fbar:new Ext.Toolbar({items:A,enableOverflow:false})});v.render(document.body);v.getEl().addClass("x-window-dlg");r=v.mask;h=v.body.createChild({html:'<div class="ext-mb-icon"></div><div class="ext-mb-content"><span class="ext-mb-text"></span><br /><div class="ext-mb-fix-cursor"><input type="text" class="ext-mb-input" /><textarea class="ext-mb-textarea"></textarea></div></div>'});k=Ext.get(h.dom.firstChild);var z=h.dom.childNodes[1];m=Ext.get(z.firstChild);t=Ext.get(z.childNodes[2].firstChild);t.enableDisplayMode();t.addKeyListener([10,13],function(){if(v.isVisible()&&b&&b.buttons){if(b.buttons.ok){c("ok")}else{if(b.buttons.yes){c("yes")}}}});a=Ext.get(z.childNodes[2].childNodes[1]);a.enableDisplayMode();o=new Ext.ProgressBar({renderTo:h});h.createChild({cls:"x-clear"})}return v},updateText:function(B){if(!v.isVisible()&&!b.width){v.setSize(this.maxWidth,100)}m.update(B?B+" ":" ");var z=d!=""?(k.getWidth()+k.getMargins("lr")):0,D=m.getWidth()+m.getMargins("lr"),A=v.getFrameWidth("lr"),C=v.body.getFrameWidth("lr"),y;y=Math.max(Math.min(b.width||z+D+A+C,b.maxWidth||this.maxWidth),Math.max(b.minWidth||this.minWidth,p||0));if(b.prompt===true){w.setWidth(y-z-A-C)}if(b.progress===true||b.wait===true){o.setSize(y-z-A-C)}if(Ext.isIE&&y==p){y+=4}m.update(B||" ");v.setSize(y,"auto").center();return this},updateProgress:function(z,y,A){o.updateProgress(z,y);if(A){this.updateText(A)}return this},isVisible:function(){return v&&v.isVisible()},hide:function(){var y=v?v.activeGhost:null;if(this.isVisible()||y){v.hide();x();if(y){v.unghost(false,false)}}return this},show:function(B){if(this.isVisible()){this.hide()}b=B;var C=this.getDialog(b.title||" ");C.setTitle(b.title||" ");var y=(b.closable!==false&&b.progress!==true&&b.wait!==true);C.tools.close.setDisplayed(y);w=t;b.prompt=b.prompt||(b.multiline?true:false);if(b.prompt){if(b.multiline){t.hide();a.show();a.setHeight(Ext.isNumber(b.multiline)?b.multiline:this.defaultTextHeight);w=a}else{t.show();a.hide()}}else{t.hide();a.hide()}w.dom.value=b.value||"";if(b.prompt){C.focusEl=w}else{var A=b.buttons;var z=null;if(A&&A.ok){z=s.ok}else{if(A&&A.yes){z=s.yes}}if(z){C.focusEl=z}}if(Ext.isDefined(b.iconCls)){C.setIconClass(b.iconCls)}this.setIcon(Ext.isDefined(b.icon)?b.icon:i);p=l(b.buttons);o.setVisible(b.progress===true||b.wait===true);this.updateProgress(0,b.progressText);this.updateText(b.msg);if(b.cls){C.el.addClass(b.cls)}C.proxyDrag=b.proxyDrag===true;C.modal=b.modal!==false;C.mask=b.modal!==false?r:false;if(!C.isVisible()){document.body.appendChild(v.el.dom);C.setAnimateTarget(b.animEl);C.on("show",function(){if(y===true){C.keyMap.enable()}else{C.keyMap.disable()}},this,{single:true});C.show(b.animEl)}if(b.wait===true){o.wait(b.waitConfig)}return this},setIcon:function(y){if(!v){i=y;return}i=undefined;if(y&&y!=""){k.removeClass("x-hidden");k.replaceClass(d,y);h.addClass("x-dlg-icon");d=y}else{k.replaceClass(d,"x-hidden");h.removeClass("x-dlg-icon");d=""}return this},progress:function(A,z,y){this.show({title:A,msg:z,buttons:false,progress:true,closable:false,minWidth:this.minProgressWidth,progressText:y});return this},wait:function(A,z,y){this.show({title:z,msg:A,buttons:false,closable:false,wait:true,modal:true,minWidth:this.minProgressWidth,waitConfig:y});return this},alert:function(B,A,z,y){this.show({title:B,msg:A,buttons:this.OK,fn:z,scope:y,minWidth:this.minWidth});return this},confirm:function(B,A,z,y){this.show({title:B,msg:A,buttons:this.YESNO,fn:z,scope:y,icon:this.QUESTION,minWidth:this.minWidth});return this},prompt:function(D,C,A,z,y,B){this.show({title:D,msg:C,buttons:this.OKCANCEL,fn:A,minWidth:this.minPromptWidth,scope:z,prompt:true,multiline:y,value:B});return this},OK:{ok:true},CANCEL:{cancel:true},OKCANCEL:{ok:true,cancel:true},YESNO:{yes:true,no:true},YESNOCANCEL:{yes:true,no:true,cancel:true},INFO:"ext-mb-info",WARNING:"ext-mb-warning",QUESTION:"ext-mb-question",ERROR:"ext-mb-error",defaultTextHeight:75,maxWidth:600,minWidth:100,minProgressWidth:250,minPromptWidth:250,buttonText:{ok:"OK",cancel:"Cancel",yes:"Yes",no:"No"}}}();Ext.Msg=Ext.MessageBox;Ext.dd.PanelProxy=Ext.extend(Object,{constructor:function(a,b){this.panel=a;this.id=this.panel.id+"-ddproxy";Ext.apply(this,b)},insertProxy:true,setStatus:Ext.emptyFn,reset:Ext.emptyFn,update:Ext.emptyFn,stop:Ext.emptyFn,sync:Ext.emptyFn,getEl:function(){return this.ghost},getGhost:function(){return this.ghost},getProxy:function(){return this.proxy},hide:function(){if(this.ghost){if(this.proxy){this.proxy.remove();delete this.proxy}this.panel.el.dom.style.display="";this.ghost.remove();delete this.ghost}},show:function(){if(!this.ghost){this.ghost=this.panel.createGhost(this.panel.initialConfig.cls,undefined,Ext.getBody());this.ghost.setXY(this.panel.el.getXY());if(this.insertProxy){this.proxy=this.panel.el.insertSibling({cls:"x-panel-dd-spacer"});this.proxy.setSize(this.panel.getSize())}this.panel.el.dom.style.display="none"}},repair:function(b,c,a){this.hide();if(typeof c=="function"){c.call(a||this)}},moveProxy:function(a,b){if(this.proxy){a.insertBefore(this.proxy.dom,b)}}});Ext.Panel.DD=Ext.extend(Ext.dd.DragSource,{constructor:function(b,a){this.panel=b;this.dragData={panel:b};this.proxy=new Ext.dd.PanelProxy(b,a);Ext.Panel.DD.superclass.constructor.call(this,b.el,a);var d=b.header,c=b.body;if(d){this.setHandleElId(d.id);c=b.header}c.setStyle("cursor","move");this.scroll=false},showFrame:Ext.emptyFn,startDrag:Ext.emptyFn,b4StartDrag:function(a,b){this.proxy.show()},b4MouseDown:function(b){var a=b.getPageX(),c=b.getPageY();this.autoOffset(a,c)},onInitDrag:function(a,b){this.onStartDrag(a,b);return true},createFrame:Ext.emptyFn,getDragEl:function(a){return this.proxy.ghost.dom},endDrag:function(a){this.proxy.hide();this.panel.saveState()},autoOffset:function(a,b){a-=this.startPageX;b-=this.startPageY;this.setDelta(a,b)}});Ext.state.Provider=Ext.extend(Ext.util.Observable,{constructor:function(){this.addEvents("statechange");this.state={};Ext.state.Provider.superclass.constructor.call(this)},get:function(b,a){return typeof this.state[b]=="undefined"?a:this.state[b]},clear:function(a){delete this.state[a];this.fireEvent("statechange",this,a,null)},set:function(a,b){this.state[a]=b;this.fireEvent("statechange",this,a,b)},decodeValue:function(b){var e=/^(a|n|d|b|s|o|e)\:(.*)$/,h=e.exec(unescape(b)),d,c,a,g;if(!h||!h[1]){return}c=h[1];a=h[2];switch(c){case"e":return null;case"n":return parseFloat(a);case"d":return new Date(Date.parse(a));case"b":return(a=="1");case"a":d=[];if(a!=""){Ext.each(a.split("^"),function(i){d.push(this.decodeValue(i))},this)}return d;case"o":d={};if(a!=""){Ext.each(a.split("^"),function(i){g=i.split("=");d[g[0]]=this.decodeValue(g[1])},this)}return d;default:return a}},encodeValue:function(c){var b,g="",e=0,a,d;if(c==null){return"e:1"}else{if(typeof c=="number"){b="n:"+c}else{if(typeof c=="boolean"){b="b:"+(c?"1":"0")}else{if(Ext.isDate(c)){b="d:"+c.toGMTString()}else{if(Ext.isArray(c)){for(a=c.length;e<a;e++){g+=this.encodeValue(c[e]);if(e!=a-1){g+="^"}}b="a:"+g}else{if(typeof c=="object"){for(d in c){if(typeof c[d]!="function"&&c[d]!==undefined){g+=d+"="+this.encodeValue(c[d])+"^"}}b="o:"+g.substring(0,g.length-1)}else{b="s:"+c}}}}}}return escape(b)}});Ext.state.Manager=function(){var a=new Ext.state.Provider();return{setProvider:function(b){a=b},get:function(c,b){return a.get(c,b)},set:function(b,c){a.set(b,c)},clear:function(b){a.clear(b)},getProvider:function(){return a}}}();Ext.state.CookieProvider=Ext.extend(Ext.state.Provider,{constructor:function(a){Ext.state.CookieProvider.superclass.constructor.call(this);this.path="/";this.expires=new Date(new Date().getTime()+(1000*60*60*24*7));this.domain=null;this.secure=false;Ext.apply(this,a);this.state=this.readCookies()},set:function(a,b){if(typeof b=="undefined"||b===null){this.clear(a);return}this.setCookie(a,b);Ext.state.CookieProvider.superclass.set.call(this,a,b)},clear:function(a){this.clearCookie(a);Ext.state.CookieProvider.superclass.clear.call(this,a)},readCookies:function(){var d={},h=document.cookie+";",b=/\s?(.*?)=(.*?);/g,g,a,e;while((g=b.exec(h))!=null){a=g[1];e=g[2];if(a&&a.substring(0,3)=="ys-"){d[a.substr(3)]=this.decodeValue(e)}}return d},setCookie:function(a,b){document.cookie="ys-"+a+"="+this.encodeValue(b)+((this.expires==null)?"":("; expires="+this.expires.toGMTString()))+((this.path==null)?"":("; path="+this.path))+((this.domain==null)?"":("; domain="+this.domain))+((this.secure==true)?"; secure":"")},clearCookie:function(a){document.cookie="ys-"+a+"=null; expires=Thu, 01-Jan-70 00:00:01 GMT"+((this.path==null)?"":("; path="+this.path))+((this.domain==null)?"":("; domain="+this.domain))+((this.secure==true)?"; secure":"")}});Ext.DataView=Ext.extend(Ext.BoxComponent,{selectedClass:"x-view-selected",emptyText:"",deferEmptyText:true,trackOver:false,blockRefresh:false,last:false,initComponent:function(){Ext.DataView.superclass.initComponent.call(this);if(Ext.isString(this.tpl)||Ext.isArray(this.tpl)){this.tpl=new Ext.XTemplate(this.tpl)}this.addEvents("beforeclick","click","mouseenter","mouseleave","containerclick","dblclick","contextmenu","containercontextmenu","selectionchange","beforeselect");this.store=Ext.StoreMgr.lookup(this.store);this.all=new Ext.CompositeElementLite();this.selected=new Ext.CompositeElementLite()},afterRender:function(){Ext.DataView.superclass.afterRender.call(this);this.mon(this.getTemplateTarget(),{click:this.onClick,dblclick:this.onDblClick,contextmenu:this.onContextMenu,scope:this});if(this.overClass||this.trackOver){this.mon(this.getTemplateTarget(),{mouseover:this.onMouseOver,mouseout:this.onMouseOut,scope:this})}if(this.store){this.bindStore(this.store,true)}},refresh:function(){this.clearSelections(false,true);var b=this.getTemplateTarget(),a=this.store.getRange();b.update("");if(a.length<1){if(!this.deferEmptyText||this.hasSkippedEmptyText){b.update(this.emptyText)}this.all.clear()}else{this.tpl.overwrite(b,this.collectData(a,0));this.all.fill(Ext.query(this.itemSelector,b.dom));this.updateIndexes(0)}this.hasSkippedEmptyText=true},getTemplateTarget:function(){return this.el},prepareData:function(a){return a},collectData:function(b,e){var d=[],c=0,a=b.length;for(;c<a;c++){d[d.length]=this.prepareData(b[c].data,e+c,b[c])}return d},bufferRender:function(a,b){var c=document.createElement("div");this.tpl.overwrite(c,this.collectData(a,b));return Ext.query(this.itemSelector,c)},onUpdate:function(g,a){var b=this.store.indexOf(a);if(b>-1){var e=this.isSelected(b),c=this.all.elements[b],d=this.bufferRender([a],b)[0];this.all.replaceElement(b,d,true);if(e){this.selected.replaceElement(c,d);this.all.item(b).addClass(this.selectedClass)}this.updateIndexes(b,b)}},onAdd:function(g,d,e){if(this.all.getCount()===0){this.refresh();return}var c=this.bufferRender(d,e),h,b=this.all.elements;if(e<this.all.getCount()){h=this.all.item(e).insertSibling(c,"before",true);b.splice.apply(b,[e,0].concat(c))}else{h=this.all.last().insertSibling(c,"after",true);b.push.apply(b,c)}this.updateIndexes(e)},onRemove:function(c,a,b){this.deselect(b);this.all.removeElement(b,true);this.updateIndexes(b);if(this.store.getCount()===0){this.refresh()}},refreshNode:function(a){this.onUpdate(this.store,this.store.getAt(a))},updateIndexes:function(d,c){var b=this.all.elements;d=d||0;c=c||((c===0)?0:(b.length-1));for(var a=d;a<=c;a++){b[a].viewIndex=a}},getStore:function(){return this.store},bindStore:function(a,b){if(!b&&this.store){if(a!==this.store&&this.store.autoDestroy){this.store.destroy()}else{this.store.un("beforeload",this.onBeforeLoad,this);this.store.un("datachanged",this.onDataChanged,this);this.store.un("add",this.onAdd,this);this.store.un("remove",this.onRemove,this);this.store.un("update",this.onUpdate,this);this.store.un("clear",this.refresh,this)}if(!a){this.store=null}}if(a){a=Ext.StoreMgr.lookup(a);a.on({scope:this,beforeload:this.onBeforeLoad,datachanged:this.onDataChanged,add:this.onAdd,remove:this.onRemove,update:this.onUpdate,clear:this.refresh})}this.store=a;if(a){this.refresh()}},onDataChanged:function(){if(this.blockRefresh!==true){this.refresh.apply(this,arguments)}},findItemFromChild:function(a){return Ext.fly(a).findParent(this.itemSelector,this.getTemplateTarget())},onClick:function(c){var b=c.getTarget(this.itemSelector,this.getTemplateTarget()),a;if(b){a=this.indexOf(b);if(this.onItemClick(b,a,c)!==false){this.fireEvent("click",this,a,b,c)}}else{if(this.fireEvent("containerclick",this,c)!==false){this.onContainerClick(c)}}},onContainerClick:function(a){this.clearSelections()},onContextMenu:function(b){var a=b.getTarget(this.itemSelector,this.getTemplateTarget());if(a){this.fireEvent("contextmenu",this,this.indexOf(a),a,b)}else{this.fireEvent("containercontextmenu",this,b)}},onDblClick:function(b){var a=b.getTarget(this.itemSelector,this.getTemplateTarget());if(a){this.fireEvent("dblclick",this,this.indexOf(a),a,b)}},onMouseOver:function(b){var a=b.getTarget(this.itemSelector,this.getTemplateTarget());if(a&&a!==this.lastItem){this.lastItem=a;Ext.fly(a).addClass(this.overClass);this.fireEvent("mouseenter",this,this.indexOf(a),a,b)}},onMouseOut:function(a){if(this.lastItem){if(!a.within(this.lastItem,true,true)){Ext.fly(this.lastItem).removeClass(this.overClass);this.fireEvent("mouseleave",this,this.indexOf(this.lastItem),this.lastItem,a);delete this.lastItem}}},onItemClick:function(b,a,c){if(this.fireEvent("beforeclick",this,a,b,c)===false){return false}if(this.multiSelect){this.doMultiSelection(b,a,c);c.preventDefault()}else{if(this.singleSelect){this.doSingleSelection(b,a,c);c.preventDefault()}}return true},doSingleSelection:function(b,a,c){if(c.ctrlKey&&this.isSelected(a)){this.deselect(a)}else{this.select(a,false)}},doMultiSelection:function(c,a,d){if(d.shiftKey&&this.last!==false){var b=this.last;this.selectRange(b,a,d.ctrlKey);this.last=b}else{if((d.ctrlKey||this.simpleSelect)&&this.isSelected(a)){this.deselect(a)}else{this.select(a,d.ctrlKey||d.shiftKey||this.simpleSelect)}}},getSelectionCount:function(){return this.selected.getCount()},getSelectedNodes:function(){return this.selected.elements},getSelectedIndexes:function(){var b=[],d=this.selected.elements,c=0,a=d.length;for(;c<a;c++){b.push(d[c].viewIndex)}return b},getSelectedRecords:function(){return this.getRecords(this.selected.elements)},getRecords:function(c){var b=[],d=0,a=c.length;for(;d<a;d++){b[b.length]=this.store.getAt(c[d].viewIndex)}return b},getRecord:function(a){return this.store.getAt(a.viewIndex)},clearSelections:function(a,b){if((this.multiSelect||this.singleSelect)&&this.selected.getCount()>0){if(!b){this.selected.removeClass(this.selectedClass)}this.selected.clear();this.last=false;if(!a){this.fireEvent("selectionchange",this,this.selected.elements)}}},isSelected:function(a){return this.selected.contains(this.getNode(a))},deselect:function(a){if(this.isSelected(a)){a=this.getNode(a);this.selected.removeElement(a);if(this.last==a.viewIndex){this.last=false}Ext.fly(a).removeClass(this.selectedClass);this.fireEvent("selectionchange",this,this.selected.elements)}},select:function(d,g,b){if(Ext.isArray(d)){if(!g){this.clearSelections(true)}for(var c=0,a=d.length;c<a;c++){this.select(d[c],true,true)}if(!b){this.fireEvent("selectionchange",this,this.selected.elements)}}else{var e=this.getNode(d);if(!g){this.clearSelections(true)}if(e&&!this.isSelected(e)){if(this.fireEvent("beforeselect",this,e,this.selected.elements)!==false){Ext.fly(e).addClass(this.selectedClass);this.selected.add(e);this.last=e.viewIndex;if(!b){this.fireEvent("selectionchange",this,this.selected.elements)}}}}},selectRange:function(c,a,b){if(!b){this.clearSelections(true)}this.select(this.getNodes(c,a),true)},getNode:function(b){if(Ext.isString(b)){return document.getElementById(b)}else{if(Ext.isNumber(b)){return this.all.elements[b]}else{if(b instanceof Ext.data.Record){var a=this.store.indexOf(b);return this.all.elements[a]}}}return b},getNodes:function(e,a){var d=this.all.elements,b=[],c;e=e||0;a=!Ext.isDefined(a)?Math.max(d.length-1,0):a;if(e<=a){for(c=e;c<=a&&d[c];c++){b.push(d[c])}}else{for(c=e;c>=a&&d[c];c--){b.push(d[c])}}return b},indexOf:function(a){a=this.getNode(a);if(Ext.isNumber(a.viewIndex)){return a.viewIndex}return this.all.indexOf(a)},onBeforeLoad:function(){if(this.loadingText){this.clearSelections(false,true);this.getTemplateTarget().update('<div class="loading-indicator">'+this.loadingText+"</div>");this.all.clear()}},onDestroy:function(){this.all.clear();this.selected.clear();Ext.DataView.superclass.onDestroy.call(this);this.bindStore(null)}});Ext.DataView.prototype.setStore=Ext.DataView.prototype.bindStore;Ext.reg("dataview",Ext.DataView);Ext.list.ListView=Ext.extend(Ext.DataView,{itemSelector:"dl",selectedClass:"x-list-selected",overClass:"x-list-over",scrollOffset:undefined,columnResize:true,columnSort:true,maxColumnWidth:Ext.isIE?99:100,initComponent:function(){if(this.columnResize){this.colResizer=new Ext.list.ColumnResizer(this.colResizer);this.colResizer.init(this)}if(this.columnSort){this.colSorter=new Ext.list.Sorter(this.columnSort);this.colSorter.init(this)}if(!this.internalTpl){this.internalTpl=new Ext.XTemplate('<div class="x-list-header"><div class="x-list-header-inner">','<tpl for="columns">','<div style="width:{[values.width*100]}%;text-align:{align};"><em unselectable="on" id="',this.id,'-xlhd-{#}">',"{header}","</em></div>","</tpl>",'<div class="x-clear"></div>',"</div></div>",'<div class="x-list-body"><div class="x-list-body-inner">',"</div></div>")}if(!this.tpl){this.tpl=new Ext.XTemplate('<tpl for="rows">',"<dl>",'<tpl for="parent.columns">','<dt style="width:{[values.width*100]}%;text-align:{align};">','<em unselectable="on"<tpl if="cls"> class="{cls}</tpl>">',"{[values.tpl.apply(parent)]}","</em></dt>","</tpl>",'<div class="x-clear"></div>',"</dl>","</tpl>")}var l=this.columns,h=0,k=0,m=l.length,b=[];for(var g=0;g<m;g++){var n=l[g];if(!n.isColumn){n.xtype=n.xtype?(/^lv/.test(n.xtype)?n.xtype:"lv"+n.xtype):"lvcolumn";n=Ext.create(n)}if(n.width){h+=n.width*100;if(h>this.maxColumnWidth){n.width-=(h-this.maxColumnWidth)/100}k++}b.push(n)}l=this.columns=b;if(k<m){var d=m-k;if(h<this.maxColumnWidth){var a=((this.maxColumnWidth-h)/d)/100;for(var e=0;e<m;e++){var n=l[e];if(!n.width){n.width=a}}}}Ext.list.ListView.superclass.initComponent.call(this)},onRender:function(){this.autoEl={cls:"x-list-wrap"};Ext.list.ListView.superclass.onRender.apply(this,arguments);this.internalTpl.overwrite(this.el,{columns:this.columns});this.innerBody=Ext.get(this.el.dom.childNodes[1].firstChild);this.innerHd=Ext.get(this.el.dom.firstChild.firstChild);if(this.hideHeaders){this.el.dom.firstChild.style.display="none"}},getTemplateTarget:function(){return this.innerBody},collectData:function(){var a=Ext.list.ListView.superclass.collectData.apply(this,arguments);return{columns:this.columns,rows:a}},verifyInternalSize:function(){if(this.lastSize){this.onResize(this.lastSize.width,this.lastSize.height)}},onResize:function(c,e){var b=this.innerBody.dom,g=this.innerHd.dom,d=c-Ext.num(this.scrollOffset,Ext.getScrollBarWidth())+"px",a;if(!b){return}a=b.parentNode;if(Ext.isNumber(c)){if(this.reserveScrollOffset||((a.offsetWidth-a.clientWidth)>10)){b.style.width=d;g.style.width=d}else{b.style.width=c+"px";g.style.width=c+"px";setTimeout(function(){if((a.offsetWidth-a.clientWidth)>10){b.style.width=d;g.style.width=d}},10)}}if(Ext.isNumber(e)){a.style.height=Math.max(0,e-g.parentNode.offsetHeight)+"px"}},updateIndexes:function(){Ext.list.ListView.superclass.updateIndexes.apply(this,arguments);this.verifyInternalSize()},findHeaderIndex:function(g){g=g.dom||g;var a=g.parentNode,d=a.parentNode.childNodes,b=0,e;for(;e=d[b];b++){if(e==a){return b}}return -1},setHdWidths:function(){var d=this.innerHd.dom.getElementsByTagName("div"),c=0,b=this.columns,a=b.length;for(;c<a;c++){d[c].style.width=(b[c].width*100)+"%"}}});Ext.reg("listview",Ext.list.ListView);Ext.ListView=Ext.list.ListView;Ext.list.Column=Ext.extend(Object,{isColumn:true,align:"left",header:"",width:null,cls:"",constructor:function(a){if(!a.tpl){a.tpl=new Ext.XTemplate("{"+a.dataIndex+"}")}else{if(Ext.isString(a.tpl)){a.tpl=new Ext.XTemplate(a.tpl)}}Ext.apply(this,a)}});Ext.reg("lvcolumn",Ext.list.Column);Ext.list.NumberColumn=Ext.extend(Ext.list.Column,{format:"0,000.00",constructor:function(a){a.tpl=a.tpl||new Ext.XTemplate("{"+a.dataIndex+':number("'+(a.format||this.format)+'")}');Ext.list.NumberColumn.superclass.constructor.call(this,a)}});Ext.reg("lvnumbercolumn",Ext.list.NumberColumn);Ext.list.DateColumn=Ext.extend(Ext.list.Column,{format:"m/d/Y",constructor:function(a){a.tpl=a.tpl||new Ext.XTemplate("{"+a.dataIndex+':date("'+(a.format||this.format)+'")}');Ext.list.DateColumn.superclass.constructor.call(this,a)}});Ext.reg("lvdatecolumn",Ext.list.DateColumn);Ext.list.BooleanColumn=Ext.extend(Ext.list.Column,{trueText:"true",falseText:"false",undefinedText:" ",constructor:function(e){e.tpl=e.tpl||new Ext.XTemplate("{"+e.dataIndex+":this.format}");var b=this.trueText,d=this.falseText,a=this.undefinedText;e.tpl.format=function(c){if(c===undefined){return a}if(!c||c==="false"){return d}return b};Ext.list.DateColumn.superclass.constructor.call(this,e)}});Ext.reg("lvbooleancolumn",Ext.list.BooleanColumn);Ext.list.ColumnResizer=Ext.extend(Ext.util.Observable,{minPct:0.05,constructor:function(a){Ext.apply(this,a);Ext.list.ColumnResizer.superclass.constructor.call(this)},init:function(a){this.view=a;a.on("render",this.initEvents,this)},initEvents:function(a){a.mon(a.innerHd,"mousemove",this.handleHdMove,this);this.tracker=new Ext.dd.DragTracker({onBeforeStart:this.onBeforeStart.createDelegate(this),onStart:this.onStart.createDelegate(this),onDrag:this.onDrag.createDelegate(this),onEnd:this.onEnd.createDelegate(this),tolerance:3,autoStart:300});this.tracker.initEl(a.innerHd);a.on("beforedestroy",this.tracker.destroy,this.tracker)},handleHdMove:function(i,d){var c=5,b=i.getPageX(),k=i.getTarget("em",3,true);if(k){var h=k.getRegion(),g=k.dom.style,a=k.dom.parentNode;if(b-h.left<=c&&a!=a.parentNode.firstChild){this.activeHd=Ext.get(a.previousSibling.firstChild);g.cursor=Ext.isWebKit?"e-resize":"col-resize"}else{if(h.right-b<=c&&a!=a.parentNode.lastChild.previousSibling){this.activeHd=k;g.cursor=Ext.isWebKit?"w-resize":"col-resize"}else{delete this.activeHd;g.cursor=""}}}},onBeforeStart:function(a){this.dragHd=this.activeHd;return !!this.dragHd},onStart:function(g){var d=this,b=d.view,c=d.dragHd,a=d.tracker.getXY()[0];d.proxy=b.el.createChild({cls:"x-list-resizer"});d.dragX=c.getX();d.headerIndex=b.findHeaderIndex(c);d.headersDisabled=b.disableHeaders;b.disableHeaders=true;d.proxy.setHeight(b.el.getHeight());d.proxy.setX(d.dragX);d.proxy.setWidth(a-d.dragX);this.setBoundaries()},setBoundaries:function(k){var l=this.view,h=this.headerIndex,c=l.innerHd.getWidth(),k=l.innerHd.getX(),b=Math.ceil(c*this.minPct),m=c-b,e=l.columns.length,d=l.innerHd.select("em",true),g=b+k,a=m+k,i;if(e==2){this.minX=g;this.maxX=a}else{i=d.item(h+2);this.minX=d.item(h).getX()+b;this.maxX=i?i.getX()-b:a;if(h==0){this.minX=g}else{if(h==e-2){this.maxX=a}}}},onDrag:function(c){var b=this,a=b.tracker.getXY()[0].constrain(b.minX,b.maxX);b.proxy.setWidth(a-this.dragX)},onEnd:function(i){var g=this.proxy.getWidth(),h=this.headerIndex,m=this.view,c=m.columns,b=m.innerHd.getWidth(),l=Math.ceil(g*m.maxColumnWidth/b)/100,d=this.headersDisabled,n=c[h],k=c[h+1],a=n.width+k.width;this.proxy.remove();n.width=l;k.width=a-l;delete this.dragHd;m.setHdWidths();m.refresh();setTimeout(function(){m.disableHeaders=d},100)}});Ext.ListView.ColumnResizer=Ext.list.ColumnResizer;Ext.list.Sorter=Ext.extend(Ext.util.Observable,{sortClasses:["sort-asc","sort-desc"],constructor:function(a){Ext.apply(this,a);Ext.list.Sorter.superclass.constructor.call(this)},init:function(a){this.view=a;a.on("render",this.initEvents,this)},initEvents:function(a){a.mon(a.innerHd,"click",this.onHdClick,this);a.innerHd.setStyle("cursor","pointer");a.mon(a.store,"datachanged",this.updateSortState,this);this.updateSortState.defer(10,this,[a.store])},updateSortState:function(c){var g=c.getSortState();if(!g){return}this.sortState=g;var e=this.view.columns,h=-1;for(var d=0,a=e.length;d<a;d++){if(e[d].dataIndex==g.field){h=d;break}}if(h!=-1){var b=g.direction;this.updateSortIcon(h,b)}},updateSortIcon:function(b,a){var d=this.sortClasses;var c=this.view.innerHd.select("em").removeClass(d);c.item(b).addClass(d[a=="DESC"?1:0])},onHdClick:function(c){var b=c.getTarget("em",3);if(b&&!this.view.disableHeaders){var a=this.view.findHeaderIndex(b);this.view.store.sort(this.view.columns[a].dataIndex)}}});Ext.ListView.Sorter=Ext.list.Sorter;Ext.TabPanel=Ext.extend(Ext.Panel,{deferredRender:true,tabWidth:120,minTabWidth:30,resizeTabs:false,enableTabScroll:false,scrollIncrement:0,scrollRepeatInterval:400,scrollDuration:0.35,animScroll:true,tabPosition:"top",baseCls:"x-tab-panel",autoTabs:false,autoTabSelector:"div.x-tab",activeTab:undefined,tabMargin:2,plain:false,wheelIncrement:20,idDelimiter:"__",itemCls:"x-tab-item",elements:"body",headerAsText:false,frame:false,hideBorders:true,initComponent:function(){this.frame=false;Ext.TabPanel.superclass.initComponent.call(this);this.addEvents("beforetabchange","tabchange","contextmenu");this.setLayout(new Ext.layout.CardLayout(Ext.apply({layoutOnCardChange:this.layoutOnTabChange,deferredRender:this.deferredRender},this.layoutConfig)));if(this.tabPosition=="top"){this.elements+=",header";this.stripTarget="header"}else{this.elements+=",footer";this.stripTarget="footer"}if(!this.stack){this.stack=Ext.TabPanel.AccessStack()}this.initItems()},onRender:function(c,a){Ext.TabPanel.superclass.onRender.call(this,c,a);if(this.plain){var g=this.tabPosition=="top"?"header":"footer";this[g].addClass("x-tab-panel-"+g+"-plain")}var b=this[this.stripTarget];this.stripWrap=b.createChild({cls:"x-tab-strip-wrap",cn:{tag:"ul",cls:"x-tab-strip x-tab-strip-"+this.tabPosition}});var e=(this.tabPosition=="bottom"?this.stripWrap:null);b.createChild({cls:"x-tab-strip-spacer"},e);this.strip=new Ext.Element(this.stripWrap.dom.firstChild);this.edge=this.strip.createChild({tag:"li",cls:"x-tab-edge",cn:[{tag:"span",cls:"x-tab-strip-text",cn:" "}]});this.strip.createChild({cls:"x-clear"});this.body.addClass("x-tab-panel-body-"+this.tabPosition);if(!this.itemTpl){var d=new Ext.Template('<li class="{cls}" id="{id}"><a class="x-tab-strip-close"></a>','<a class="x-tab-right" href="#"><em class="x-tab-left">','<span class="x-tab-strip-inner"><span class="x-tab-strip-text {iconCls}">{text}</span></span>',"</em></a></li>");d.disableFormats=true;d.compile();Ext.TabPanel.prototype.itemTpl=d}this.items.each(this.initTab,this)},afterRender:function(){Ext.TabPanel.superclass.afterRender.call(this);if(this.autoTabs){this.readTabs(false)}if(this.activeTab!==undefined){var a=Ext.isObject(this.activeTab)?this.activeTab:this.items.get(this.activeTab);delete this.activeTab;this.setActiveTab(a)}},initEvents:function(){Ext.TabPanel.superclass.initEvents.call(this);this.mon(this.strip,{scope:this,mousedown:this.onStripMouseDown,contextmenu:this.onStripContextMenu});if(this.enableTabScroll){this.mon(this.strip,"mousewheel",this.onWheel,this)}},findTargets:function(c){var b=null,a=c.getTarget("li:not(.x-tab-edge)",this.strip);if(a){b=this.getComponent(a.id.split(this.idDelimiter)[1]);if(b.disabled){return{close:null,item:null,el:null}}}return{close:c.getTarget(".x-tab-strip-close",this.strip),item:b,el:a}},onStripMouseDown:function(b){if(b.button!==0){return}b.preventDefault();var a=this.findTargets(b);if(a.close){if(a.item.fireEvent("beforeclose",a.item)!==false){a.item.fireEvent("close",a.item);this.remove(a.item)}return}if(a.item&&a.item!=this.activeTab){this.setActiveTab(a.item)}},onStripContextMenu:function(b){b.preventDefault();var a=this.findTargets(b);if(a.item){this.fireEvent("contextmenu",this,a.item,b)}},readTabs:function(d){if(d===true){this.items.each(function(h){this.remove(h)},this)}var c=this.el.query(this.autoTabSelector);for(var b=0,a=c.length;b<a;b++){var e=c[b],g=e.getAttribute("title");e.removeAttribute("title");this.add({title:g,contentEl:e})}},initTab:function(d,b){var e=this.strip.dom.childNodes[b],g=this.getTemplateArgs(d),c=e?this.itemTpl.insertBefore(e,g):this.itemTpl.append(this.strip,g),a="x-tab-strip-over",h=Ext.get(c);h.hover(function(){if(!d.disabled){h.addClass(a)}},function(){h.removeClass(a)});if(d.tabTip){h.child("span.x-tab-strip-text",true).qtip=d.tabTip}d.tabEl=c;h.select("a").on("click",function(i){if(!i.getPageX()){this.onStripMouseDown(i)}},this,{preventDefault:true});d.on({scope:this,disable:this.onItemDisabled,enable:this.onItemEnabled,titlechange:this.onItemTitleChanged,iconchange:this.onItemIconChanged,beforeshow:this.onBeforeShowItem})},getTemplateArgs:function(b){var a=b.closable?"x-tab-strip-closable":"";if(b.disabled){a+=" x-item-disabled"}if(b.iconCls){a+=" x-tab-with-icon"}if(b.tabCls){a+=" "+b.tabCls}return{id:this.id+this.idDelimiter+b.getItemId(),text:b.title,cls:a,iconCls:b.iconCls||""}},onAdd:function(b){Ext.TabPanel.superclass.onAdd.call(this,b);if(this.rendered){var a=this.items;this.initTab(b,a.indexOf(b));this.delegateUpdates()}},onBeforeAdd:function(b){var a=b.events?(this.items.containsKey(b.getItemId())?b:null):this.items.get(b);if(a){this.setActiveTab(b);return false}Ext.TabPanel.superclass.onBeforeAdd.apply(this,arguments);var c=b.elements;b.elements=c?c.replace(",header",""):c;b.border=(b.border===true)},onRemove:function(d){var b=Ext.get(d.tabEl);if(b){b.select("a").removeAllListeners();Ext.destroy(b)}Ext.TabPanel.superclass.onRemove.call(this,d);this.stack.remove(d);delete d.tabEl;d.un("disable",this.onItemDisabled,this);d.un("enable",this.onItemEnabled,this);d.un("titlechange",this.onItemTitleChanged,this);d.un("iconchange",this.onItemIconChanged,this);d.un("beforeshow",this.onBeforeShowItem,this);if(d==this.activeTab){var a=this.stack.next();if(a){this.setActiveTab(a)}else{if(this.items.getCount()>0){this.setActiveTab(0)}else{this.setActiveTab(null)}}}if(!this.destroying){this.delegateUpdates()}},onBeforeShowItem:function(a){if(a!=this.activeTab){this.setActiveTab(a);return false}},onItemDisabled:function(b){var a=this.getTabEl(b);if(a){Ext.fly(a).addClass("x-item-disabled")}this.stack.remove(b)},onItemEnabled:function(b){var a=this.getTabEl(b);if(a){Ext.fly(a).removeClass("x-item-disabled")}},onItemTitleChanged:function(b){var a=this.getTabEl(b);if(a){Ext.fly(a).child("span.x-tab-strip-text",true).innerHTML=b.title}},onItemIconChanged:function(d,a,c){var b=this.getTabEl(d);if(b){b=Ext.get(b);b.child("span.x-tab-strip-text").replaceClass(c,a);b[Ext.isEmpty(a)?"removeClass":"addClass"]("x-tab-with-icon")}},getTabEl:function(a){var b=this.getComponent(a);return b?b.tabEl:null},onResize:function(){Ext.TabPanel.superclass.onResize.apply(this,arguments);this.delegateUpdates()},beginUpdate:function(){this.suspendUpdates=true},endUpdate:function(){this.suspendUpdates=false;this.delegateUpdates()},hideTabStripItem:function(b){b=this.getComponent(b);var a=this.getTabEl(b);if(a){a.style.display="none";this.delegateUpdates()}this.stack.remove(b)},unhideTabStripItem:function(b){b=this.getComponent(b);var a=this.getTabEl(b);if(a){a.style.display="";this.delegateUpdates()}},delegateUpdates:function(){var a=this.rendered;if(this.suspendUpdates){return}if(this.resizeTabs&&a){this.autoSizeTabs()}if(this.enableTabScroll&&a){this.autoScrollTabs()}},autoSizeTabs:function(){var h=this.items.length,b=this.tabPosition!="bottom"?"header":"footer",c=this[b].dom.offsetWidth,a=this[b].dom.clientWidth;if(!this.resizeTabs||h<1||!a){return}var l=Math.max(Math.min(Math.floor((a-4)/h)-this.tabMargin,this.tabWidth),this.minTabWidth);this.lastTabWidth=l;var n=this.strip.query("li:not(.x-tab-edge)");for(var e=0,k=n.length;e<k;e++){var m=n[e],o=Ext.fly(m).child(".x-tab-strip-inner",true),g=m.offsetWidth,d=o.offsetWidth;o.style.width=(l-(g-d))+"px"}},adjustBodyWidth:function(a){if(this.header){this.header.setWidth(a)}if(this.footer){this.footer.setWidth(a)}return a},setActiveTab:function(c){c=this.getComponent(c);if(this.fireEvent("beforetabchange",this,c,this.activeTab)===false){return}if(!this.rendered){this.activeTab=c;return}if(this.activeTab!=c){if(this.activeTab){var a=this.getTabEl(this.activeTab);if(a){Ext.fly(a).removeClass("x-tab-strip-active")}}this.activeTab=c;if(c){var b=this.getTabEl(c);Ext.fly(b).addClass("x-tab-strip-active");this.stack.add(c);this.layout.setActiveItem(c);this.delegateUpdates();if(this.scrolling){this.scrollToTab(c,this.animScroll)}}this.fireEvent("tabchange",this,c)}},getActiveTab:function(){return this.activeTab||null},getItem:function(a){return this.getComponent(a)},autoScrollTabs:function(){this.pos=this.tabPosition=="bottom"?this.footer:this.header;var h=this.items.length,d=this.pos.dom.offsetWidth,c=this.pos.dom.clientWidth,g=this.stripWrap,e=g.dom,b=e.offsetWidth,i=this.getScrollPos(),a=this.edge.getOffsetsTo(this.stripWrap)[0]+i;if(!this.enableTabScroll||b<20){return}if(h==0||a<=c){e.scrollLeft=0;g.setWidth(c);if(this.scrolling){this.scrolling=false;this.pos.removeClass("x-tab-scrolling");this.scrollLeft.hide();this.scrollRight.hide();if(Ext.isAir||Ext.isWebKit){e.style.marginLeft="";e.style.marginRight=""}}}else{if(!this.scrolling){this.pos.addClass("x-tab-scrolling");if(Ext.isAir||Ext.isWebKit){e.style.marginLeft="18px";e.style.marginRight="18px"}}c-=g.getMargins("lr");g.setWidth(c>20?c:20);if(!this.scrolling){if(!this.scrollLeft){this.createScrollers()}else{this.scrollLeft.show();this.scrollRight.show()}}this.scrolling=true;if(i>(a-c)){e.scrollLeft=a-c}else{this.scrollToTab(this.activeTab,false)}this.updateScrollButtons()}},createScrollers:function(){this.pos.addClass("x-tab-scrolling-"+this.tabPosition);var c=this.stripWrap.dom.offsetHeight;var a=this.pos.insertFirst({cls:"x-tab-scroller-left"});a.setHeight(c);a.addClassOnOver("x-tab-scroller-left-over");this.leftRepeater=new Ext.util.ClickRepeater(a,{interval:this.scrollRepeatInterval,handler:this.onScrollLeft,scope:this});this.scrollLeft=a;var b=this.pos.insertFirst({cls:"x-tab-scroller-right"});b.setHeight(c);b.addClassOnOver("x-tab-scroller-right-over");this.rightRepeater=new Ext.util.ClickRepeater(b,{interval:this.scrollRepeatInterval,handler:this.onScrollRight,scope:this});this.scrollRight=b},getScrollWidth:function(){return this.edge.getOffsetsTo(this.stripWrap)[0]+this.getScrollPos()},getScrollPos:function(){return parseInt(this.stripWrap.dom.scrollLeft,10)||0},getScrollArea:function(){return parseInt(this.stripWrap.dom.clientWidth,10)||0},getScrollAnim:function(){return{duration:this.scrollDuration,callback:this.updateScrollButtons,scope:this}},getScrollIncrement:function(){return this.scrollIncrement||(this.resizeTabs?this.lastTabWidth+2:100)},scrollToTab:function(e,a){if(!e){return}var c=this.getTabEl(e),h=this.getScrollPos(),d=this.getScrollArea(),g=Ext.fly(c).getOffsetsTo(this.stripWrap)[0]+h,b=g+c.offsetWidth;if(g<h){this.scrollTo(g,a)}else{if(b>(h+d)){this.scrollTo(b-d,a)}}},scrollTo:function(b,a){this.stripWrap.scrollTo("left",b,a?this.getScrollAnim():false);if(!a){this.updateScrollButtons()}},onWheel:function(g){var h=g.getWheelDelta()*this.wheelIncrement*-1;g.stopEvent();var i=this.getScrollPos(),c=i+h,a=this.getScrollWidth()-this.getScrollArea();var b=Math.max(0,Math.min(a,c));if(b!=i){this.scrollTo(b,false)}},onScrollRight:function(){var a=this.getScrollWidth()-this.getScrollArea(),c=this.getScrollPos(),b=Math.min(a,c+this.getScrollIncrement());if(b!=c){this.scrollTo(b,this.animScroll)}},onScrollLeft:function(){var b=this.getScrollPos(),a=Math.max(0,b-this.getScrollIncrement());if(a!=b){this.scrollTo(a,this.animScroll)}},updateScrollButtons:function(){var a=this.getScrollPos();this.scrollLeft[a===0?"addClass":"removeClass"]("x-tab-scroller-left-disabled");this.scrollRight[a>=(this.getScrollWidth()-this.getScrollArea())?"addClass":"removeClass"]("x-tab-scroller-right-disabled")},beforeDestroy:function(){Ext.destroy(this.leftRepeater,this.rightRepeater);this.deleteMembers("strip","edge","scrollLeft","scrollRight","stripWrap");this.activeTab=null;Ext.TabPanel.superclass.beforeDestroy.apply(this)}});Ext.reg("tabpanel",Ext.TabPanel);Ext.TabPanel.prototype.activate=Ext.TabPanel.prototype.setActiveTab;Ext.TabPanel.AccessStack=function(){var a=[];return{add:function(b){a.push(b);if(a.length>10){a.shift()}},remove:function(e){var d=[];for(var c=0,b=a.length;c<b;c++){if(a[c]!=e){d.push(a[c])}}a=d},next:function(){return a.pop()}}};Ext.Button=Ext.extend(Ext.BoxComponent,{hidden:false,disabled:false,pressed:false,enableToggle:false,menuAlign:"tl-bl?",type:"button",menuClassTarget:"tr:nth(2)",clickEvent:"click",handleMouseEvents:true,tooltipType:"qtip",buttonSelector:"button:first-child",scale:"small",iconAlign:"left",arrowAlign:"right",initComponent:function(){if(this.menu){this.menu=Ext.menu.MenuMgr.get(this.menu);this.menu.ownerCt=this}Ext.Button.superclass.initComponent.call(this);this.addEvents("click","toggle","mouseover","mouseout","menushow","menuhide","menutriggerover","menutriggerout");if(this.menu){this.menu.ownerCt=undefined}if(Ext.isString(this.toggleGroup)){this.enableToggle=true}},getTemplateArgs:function(){return[this.type,"x-btn-"+this.scale+" x-btn-icon-"+this.scale+"-"+this.iconAlign,this.getMenuClass(),this.cls,this.id]},setButtonClass:function(){if(this.useSetClass){if(!Ext.isEmpty(this.oldCls)){this.el.removeClass([this.oldCls,"x-btn-pressed"])}this.oldCls=(this.iconCls||this.icon)?(this.text?"x-btn-text-icon":"x-btn-icon"):"x-btn-noicon";this.el.addClass([this.oldCls,this.pressed?"x-btn-pressed":null])}},getMenuClass:function(){return this.menu?(this.arrowAlign!="bottom"?"x-btn-arrow":"x-btn-arrow-bottom"):""},onRender:function(c,a){if(!this.template){if(!Ext.Button.buttonTemplate){Ext.Button.buttonTemplate=new Ext.Template('<table id="{4}" cellspacing="0" class="x-btn {3}"><tbody class="{1}">','<tr><td class="x-btn-tl"><i> </i></td><td class="x-btn-tc"></td><td class="x-btn-tr"><i> </i></td></tr>','<tr><td class="x-btn-ml"><i> </i></td><td class="x-btn-mc"><em class="{2}" unselectable="on"><button type="{0}"></button></em></td><td class="x-btn-mr"><i> </i></td></tr>','<tr><td class="x-btn-bl"><i> </i></td><td class="x-btn-bc"></td><td class="x-btn-br"><i> </i></td></tr>',"</tbody></table>");Ext.Button.buttonTemplate.compile()}this.template=Ext.Button.buttonTemplate}var b,d=this.getTemplateArgs();if(a){b=this.template.insertBefore(a,d,true)}else{b=this.template.append(c,d,true)}this.btnEl=b.child(this.buttonSelector);this.mon(this.btnEl,{scope:this,focus:this.onFocus,blur:this.onBlur});this.initButtonEl(b,this.btnEl);Ext.ButtonToggleMgr.register(this)},initButtonEl:function(b,c){this.el=b;this.setIcon(this.icon);this.setText(this.text);this.setIconClass(this.iconCls);if(Ext.isDefined(this.tabIndex)){c.dom.tabIndex=this.tabIndex}if(this.tooltip){this.setTooltip(this.tooltip,true)}if(this.handleMouseEvents){this.mon(b,{scope:this,mouseover:this.onMouseOver,mousedown:this.onMouseDown})}if(this.menu){this.mon(this.menu,{scope:this,show:this.onMenuShow,hide:this.onMenuHide})}if(this.repeat){var a=new Ext.util.ClickRepeater(b,Ext.isObject(this.repeat)?this.repeat:{});this.mon(a,"click",this.onRepeatClick,this)}else{this.mon(b,this.clickEvent,this.onClick,this)}},afterRender:function(){Ext.Button.superclass.afterRender.call(this);this.useSetClass=true;this.setButtonClass();this.doc=Ext.getDoc();this.doAutoWidth()},setIconClass:function(a){this.iconCls=a;if(this.el){this.btnEl.dom.className="";this.btnEl.addClass(["x-btn-text",a||""]);this.setButtonClass()}return this},setTooltip:function(b,a){if(this.rendered){if(!a){this.clearTip()}if(Ext.isObject(b)){Ext.QuickTips.register(Ext.apply({target:this.btnEl.id},b));this.tooltip=b}else{this.btnEl.dom[this.tooltipType]=b}}else{this.tooltip=b}return this},clearTip:function(){if(Ext.isObject(this.tooltip)){Ext.QuickTips.unregister(this.btnEl)}},beforeDestroy:function(){if(this.rendered){this.clearTip()}if(this.menu&&this.destroyMenu!==false){Ext.destroy(this.btnEl,this.menu)}Ext.destroy(this.repeater)},onDestroy:function(){if(this.rendered){this.doc.un("mouseover",this.monitorMouseOver,this);this.doc.un("mouseup",this.onMouseUp,this);delete this.doc;delete this.btnEl;Ext.ButtonToggleMgr.unregister(this)}Ext.Button.superclass.onDestroy.call(this)},doAutoWidth:function(){if(this.autoWidth!==false&&this.el&&this.text&&this.width===undefined){this.el.setWidth("auto");if(Ext.isIE7&&Ext.isStrict){var a=this.btnEl;if(a&&a.getWidth()>20){a.clip();a.setWidth(Ext.util.TextMetrics.measure(a,this.text).width+a.getFrameWidth("lr"))}}if(this.minWidth){if(this.el.getWidth()<this.minWidth){this.el.setWidth(this.minWidth)}}}},setHandler:function(b,a){this.handler=b;this.scope=a;return this},setText:function(a){this.text=a;if(this.el){this.btnEl.update(a||" ");this.setButtonClass()}this.doAutoWidth();return this},setIcon:function(a){this.icon=a;if(this.el){this.btnEl.setStyle("background-image",a?"url("+a+")":"");this.setButtonClass()}return this},getText:function(){return this.text},toggle:function(b,a){b=b===undefined?!this.pressed:!!b;if(b!=this.pressed){if(this.rendered){this.el[b?"addClass":"removeClass"]("x-btn-pressed")}this.pressed=b;if(!a){this.fireEvent("toggle",this,b);if(this.toggleHandler){this.toggleHandler.call(this.scope||this,this,b)}}}return this},onDisable:function(){this.onDisableChange(true)},onEnable:function(){this.onDisableChange(false)},onDisableChange:function(a){if(this.el){if(!Ext.isIE6||!this.text){this.el[a?"addClass":"removeClass"](this.disabledClass)}this.el.dom.disabled=a}this.disabled=a},showMenu:function(){if(this.rendered&&this.menu){if(this.tooltip){Ext.QuickTips.getQuickTip().cancelShow(this.btnEl)}if(this.menu.isVisible()){this.menu.hide()}this.menu.ownerCt=this;this.menu.show(this.el,this.menuAlign)}return this},hideMenu:function(){if(this.hasVisibleMenu()){this.menu.hide()}return this},hasVisibleMenu:function(){return this.menu&&this.menu.ownerCt==this&&this.menu.isVisible()},onRepeatClick:function(a,b){this.onClick(b)},onClick:function(a){if(a){a.preventDefault()}if(a.button!==0){return}if(!this.disabled){this.doToggle();if(this.menu&&!this.hasVisibleMenu()&&!this.ignoreNextClick){this.showMenu()}this.fireEvent("click",this,a);if(this.handler){this.handler.call(this.scope||this,this,a)}}},doToggle:function(){if(this.enableToggle&&(this.allowDepress!==false||!this.pressed)){this.toggle()}},isMenuTriggerOver:function(b,a){return this.menu&&!a},isMenuTriggerOut:function(b,a){return this.menu&&!a},onMouseOver:function(b){if(!this.disabled){var a=b.within(this.el,true);if(!a){this.el.addClass("x-btn-over");if(!this.monitoringMouseOver){this.doc.on("mouseover",this.monitorMouseOver,this);this.monitoringMouseOver=true}this.fireEvent("mouseover",this,b)}if(this.isMenuTriggerOver(b,a)){this.fireEvent("menutriggerover",this,this.menu,b)}}},monitorMouseOver:function(a){if(a.target!=this.el.dom&&!a.within(this.el)){if(this.monitoringMouseOver){this.doc.un("mouseover",this.monitorMouseOver,this);this.monitoringMouseOver=false}this.onMouseOut(a)}},onMouseOut:function(b){var a=b.within(this.el)&&b.target!=this.el.dom;this.el.removeClass("x-btn-over");this.fireEvent("mouseout",this,b);if(this.isMenuTriggerOut(b,a)){this.fireEvent("menutriggerout",this,this.menu,b)}},focus:function(){this.btnEl.focus()},blur:function(){this.btnEl.blur()},onFocus:function(a){if(!this.disabled){this.el.addClass("x-btn-focus")}},onBlur:function(a){this.el.removeClass("x-btn-focus")},getClickEl:function(b,a){return this.el},onMouseDown:function(a){if(!this.disabled&&a.button===0){this.getClickEl(a).addClass("x-btn-click");this.doc.on("mouseup",this.onMouseUp,this)}},onMouseUp:function(a){if(a.button===0){this.getClickEl(a,true).removeClass("x-btn-click");this.doc.un("mouseup",this.onMouseUp,this)}},onMenuShow:function(a){if(this.menu.ownerCt==this){this.menu.ownerCt=this;this.ignoreNextClick=0;this.el.addClass("x-btn-menu-active");this.fireEvent("menushow",this,this.menu)}},onMenuHide:function(a){if(this.menu.ownerCt==this){this.el.removeClass("x-btn-menu-active");this.ignoreNextClick=this.restoreClick.defer(250,this);this.fireEvent("menuhide",this,this.menu);delete this.menu.ownerCt}},restoreClick:function(){this.ignoreNextClick=0}});Ext.reg("button",Ext.Button);Ext.ButtonToggleMgr=function(){var a={};function b(e,k){if(k){var h=a[e.toggleGroup];for(var d=0,c=h.length;d<c;d++){if(h[d]!=e){h[d].toggle(false)}}}}return{register:function(c){if(!c.toggleGroup){return}var d=a[c.toggleGroup];if(!d){d=a[c.toggleGroup]=[]}d.push(c);c.on("toggle",b)},unregister:function(c){if(!c.toggleGroup){return}var d=a[c.toggleGroup];if(d){d.remove(c);c.un("toggle",b)}},getPressed:function(h){var e=a[h];if(e){for(var d=0,c=e.length;d<c;d++){if(e[d].pressed===true){return e[d]}}}return null}}}();Ext.SplitButton=Ext.extend(Ext.Button,{arrowSelector:"em",split:true,initComponent:function(){Ext.SplitButton.superclass.initComponent.call(this);this.addEvents("arrowclick")},onRender:function(){Ext.SplitButton.superclass.onRender.apply(this,arguments);if(this.arrowTooltip){this.el.child(this.arrowSelector).dom[this.tooltipType]=this.arrowTooltip}},setArrowHandler:function(b,a){this.arrowHandler=b;this.scope=a},getMenuClass:function(){return"x-btn-split"+(this.arrowAlign=="bottom"?"-bottom":"")},isClickOnArrow:function(c){if(this.arrowAlign!="bottom"){var b=this.el.child("em.x-btn-split");var a=b.getRegion().right-b.getPadding("r");return c.getPageX()>a}else{return c.getPageY()>this.btnEl.getRegion().bottom}},onClick:function(b,a){b.preventDefault();if(!this.disabled){if(this.isClickOnArrow(b)){if(this.menu&&!this.menu.isVisible()&&!this.ignoreNextClick){this.showMenu()}this.fireEvent("arrowclick",this,b);if(this.arrowHandler){this.arrowHandler.call(this.scope||this,this,b)}}else{this.doToggle();this.fireEvent("click",this,b);if(this.handler){this.handler.call(this.scope||this,this,b)}}}},isMenuTriggerOver:function(a){return this.menu&&a.target.tagName==this.arrowSelector},isMenuTriggerOut:function(b,a){return this.menu&&b.target.tagName!=this.arrowSelector}});Ext.reg("splitbutton",Ext.SplitButton);Ext.CycleButton=Ext.extend(Ext.SplitButton,{getItemText:function(a){if(a&&this.showText===true){var b="";if(this.prependText){b+=this.prependText}b+=a.text;return b}return undefined},setActiveItem:function(c,a){if(!Ext.isObject(c)){c=this.menu.getComponent(c)}if(c){if(!this.rendered){this.text=this.getItemText(c);this.iconCls=c.iconCls}else{var b=this.getItemText(c);if(b){this.setText(b)}this.setIconClass(c.iconCls)}this.activeItem=c;if(!c.checked){c.setChecked(true,false)}if(this.forceIcon){this.setIconClass(this.forceIcon)}if(!a){this.fireEvent("change",this,c)}}},getActiveItem:function(){return this.activeItem},initComponent:function(){this.addEvents("change");if(this.changeHandler){this.on("change",this.changeHandler,this.scope||this);delete this.changeHandler}this.itemCount=this.items.length;this.menu={cls:"x-cycle-menu",items:[]};var a=0;Ext.each(this.items,function(c,b){Ext.apply(c,{group:c.group||this.id,itemIndex:b,checkHandler:this.checkHandler,scope:this,checked:c.checked||false});this.menu.items.push(c);if(c.checked){a=b}},this);Ext.CycleButton.superclass.initComponent.call(this);this.on("click",this.toggleSelected,this);this.setActiveItem(a,true)},checkHandler:function(a,b){if(b){this.setActiveItem(a)}},toggleSelected:function(){var a=this.menu;a.render();if(!a.hasLayout){a.doLayout()}var d,b;for(var c=1;c<this.itemCount;c++){d=(this.activeItem.itemIndex+c)%this.itemCount;b=a.items.itemAt(d);if(!b.disabled){b.setChecked(true);break}}}});Ext.reg("cycle",Ext.CycleButton);Ext.Toolbar=function(a){if(Ext.isArray(a)){a={items:a,layout:"toolbar"}}else{a=Ext.apply({layout:"toolbar"},a);if(a.buttons){a.items=a.buttons}}Ext.Toolbar.superclass.constructor.call(this,a)};(function(){var a=Ext.Toolbar;Ext.extend(a,Ext.Container,{defaultType:"button",enableOverflow:false,trackMenus:true,internalDefaults:{removeMode:"container",hideParent:true},toolbarCls:"x-toolbar",initComponent:function(){a.superclass.initComponent.call(this);this.addEvents("overflowchange")},onRender:function(c,b){if(!this.el){if(!this.autoCreate){this.autoCreate={cls:this.toolbarCls+" x-small-editor"}}this.el=c.createChild(Ext.apply({id:this.id},this.autoCreate),b);Ext.Toolbar.superclass.onRender.apply(this,arguments)}},lookupComponent:function(b){if(Ext.isString(b)){if(b=="-"){b=new a.Separator()}else{if(b==" "){b=new a.Spacer()}else{if(b=="->"){b=new a.Fill()}else{b=new a.TextItem(b)}}}this.applyDefaults(b)}else{if(b.isFormField||b.render){b=this.createComponent(b)}else{if(b.tag){b=new a.Item({autoEl:b})}else{if(b.tagName){b=new a.Item({el:b})}else{if(Ext.isObject(b)){b=b.xtype?this.createComponent(b):this.constructButton(b)}}}}}return b},applyDefaults:function(e){if(!Ext.isString(e)){e=Ext.Toolbar.superclass.applyDefaults.call(this,e);var b=this.internalDefaults;if(e.events){Ext.applyIf(e.initialConfig,b);Ext.apply(e,b)}else{Ext.applyIf(e,b)}}return e},addSeparator:function(){return this.add(new a.Separator())},addSpacer:function(){return this.add(new a.Spacer())},addFill:function(){this.add(new a.Fill())},addElement:function(b){return this.addItem(new a.Item({el:b}))},addItem:function(b){return this.add.apply(this,arguments)},addButton:function(c){if(Ext.isArray(c)){var e=[];for(var d=0,b=c.length;d<b;d++){e.push(this.addButton(c[d]))}return e}return this.add(this.constructButton(c))},addText:function(b){return this.addItem(new a.TextItem(b))},addDom:function(b){return this.add(new a.Item({autoEl:b}))},addField:function(b){return this.add(b)},insertButton:function(c,g){if(Ext.isArray(g)){var e=[];for(var d=0,b=g.length;d<b;d++){e.push(this.insertButton(c+d,g[d]))}return e}return Ext.Toolbar.superclass.insert.call(this,c,g)},trackMenu:function(c,b){if(this.trackMenus&&c.menu){var d=b?"mun":"mon";this[d](c,"menutriggerover",this.onButtonTriggerOver,this);this[d](c,"menushow",this.onButtonMenuShow,this);this[d](c,"menuhide",this.onButtonMenuHide,this)}},constructButton:function(d){var c=d.events?d:this.createComponent(d,d.split?"splitbutton":this.defaultType);return c},onAdd:function(b){Ext.Toolbar.superclass.onAdd.call(this);this.trackMenu(b);if(this.disabled){b.disable()}},onRemove:function(b){Ext.Toolbar.superclass.onRemove.call(this);if(b==this.activeMenuBtn){delete this.activeMenuBtn}this.trackMenu(b,true)},onDisable:function(){this.items.each(function(b){if(b.disable){b.disable()}})},onEnable:function(){this.items.each(function(b){if(b.enable){b.enable()}})},onButtonTriggerOver:function(b){if(this.activeMenuBtn&&this.activeMenuBtn!=b){this.activeMenuBtn.hideMenu();b.showMenu();this.activeMenuBtn=b}},onButtonMenuShow:function(b){this.activeMenuBtn=b},onButtonMenuHide:function(b){delete this.activeMenuBtn}});Ext.reg("toolbar",Ext.Toolbar);a.Item=Ext.extend(Ext.BoxComponent,{hideParent:true,enable:Ext.emptyFn,disable:Ext.emptyFn,focus:Ext.emptyFn});Ext.reg("tbitem",a.Item);a.Separator=Ext.extend(a.Item,{onRender:function(c,b){this.el=c.createChild({tag:"span",cls:"xtb-sep"},b)}});Ext.reg("tbseparator",a.Separator);a.Spacer=Ext.extend(a.Item,{onRender:function(c,b){this.el=c.createChild({tag:"div",cls:"xtb-spacer",style:this.width?"width:"+this.width+"px":""},b)}});Ext.reg("tbspacer",a.Spacer);a.Fill=Ext.extend(a.Item,{render:Ext.emptyFn,isFill:true});Ext.reg("tbfill",a.Fill);a.TextItem=Ext.extend(a.Item,{constructor:function(b){a.TextItem.superclass.constructor.call(this,Ext.isString(b)?{text:b}:b)},onRender:function(c,b){this.autoEl={cls:"xtb-text",html:this.text||""};a.TextItem.superclass.onRender.call(this,c,b)},setText:function(b){if(this.rendered){this.el.update(b)}else{this.text=b}}});Ext.reg("tbtext",a.TextItem);a.Button=Ext.extend(Ext.Button,{});a.SplitButton=Ext.extend(Ext.SplitButton,{});Ext.reg("tbbutton",a.Button);Ext.reg("tbsplit",a.SplitButton)})();Ext.ButtonGroup=Ext.extend(Ext.Panel,{baseCls:"x-btn-group",layout:"table",defaultType:"button",frame:true,internalDefaults:{removeMode:"container",hideParent:true},initComponent:function(){this.layoutConfig=this.layoutConfig||{};Ext.applyIf(this.layoutConfig,{columns:this.columns});if(!this.title){this.addClass("x-btn-group-notitle")}this.on("afterlayout",this.onAfterLayout,this);Ext.ButtonGroup.superclass.initComponent.call(this)},applyDefaults:function(b){b=Ext.ButtonGroup.superclass.applyDefaults.call(this,b);var a=this.internalDefaults;if(b.events){Ext.applyIf(b.initialConfig,a);Ext.apply(b,a)}else{Ext.applyIf(b,a)}return b},onAfterLayout:function(){var a=this.body.getFrameWidth("lr")+this.body.dom.firstChild.offsetWidth;this.body.setWidth(a);this.el.setWidth(a+this.getFrameWidth())}});Ext.reg("buttongroup",Ext.ButtonGroup);(function(){var a=Ext.Toolbar;Ext.PagingToolbar=Ext.extend(Ext.Toolbar,{pageSize:20,displayMsg:"Displaying {0} - {1} of {2}",emptyMsg:"No data to display",beforePageText:"Page",afterPageText:"of {0}",firstText:"First Page",prevText:"Previous Page",nextText:"Next Page",lastText:"Last Page",refreshText:"Refresh",initComponent:function(){var c=[this.first=new a.Button({tooltip:this.firstText,overflowText:this.firstText,iconCls:"x-tbar-page-first",disabled:true,handler:this.moveFirst,scope:this}),this.prev=new a.Button({tooltip:this.prevText,overflowText:this.prevText,iconCls:"x-tbar-page-prev",disabled:true,handler:this.movePrevious,scope:this}),"-",this.beforePageText,this.inputItem=new Ext.form.NumberField({cls:"x-tbar-page-number",allowDecimals:false,allowNegative:false,enableKeyEvents:true,selectOnFocus:true,submitValue:false,listeners:{scope:this,keydown:this.onPagingKeyDown,blur:this.onPagingBlur}}),this.afterTextItem=new a.TextItem({text:String.format(this.afterPageText,1)}),"-",this.next=new a.Button({tooltip:this.nextText,overflowText:this.nextText,iconCls:"x-tbar-page-next",disabled:true,handler:this.moveNext,scope:this}),this.last=new a.Button({tooltip:this.lastText,overflowText:this.lastText,iconCls:"x-tbar-page-last",disabled:true,handler:this.moveLast,scope:this}),"-",this.refresh=new a.Button({tooltip:this.refreshText,overflowText:this.refreshText,iconCls:"x-tbar-loading",handler:this.doRefresh,scope:this})];var b=this.items||this.buttons||[];if(this.prependButtons){this.items=b.concat(c)}else{this.items=c.concat(b)}delete this.buttons;if(this.displayInfo){this.items.push("->");this.items.push(this.displayItem=new a.TextItem({}))}Ext.PagingToolbar.superclass.initComponent.call(this);this.addEvents("change","beforechange");this.on("afterlayout",this.onFirstLayout,this,{single:true});this.cursor=0;this.bindStore(this.store,true)},onFirstLayout:function(){if(this.dsLoaded){this.onLoad.apply(this,this.dsLoaded)}},updateInfo:function(){if(this.displayItem){var b=this.store.getCount();var c=b==0?this.emptyMsg:String.format(this.displayMsg,this.cursor+1,this.cursor+b,this.store.getTotalCount());this.displayItem.setText(c)}},onLoad:function(b,e,k){if(!this.rendered){this.dsLoaded=[b,e,k];return}var g=this.getParams();this.cursor=(k.params&&k.params[g.start])?k.params[g.start]:0;var i=this.getPageData(),c=i.activePage,h=i.pages;this.afterTextItem.setText(String.format(this.afterPageText,i.pages));this.inputItem.setValue(c);this.first.setDisabled(c==1);this.prev.setDisabled(c==1);this.next.setDisabled(c==h);this.last.setDisabled(c==h);this.refresh.enable();this.updateInfo();this.fireEvent("change",this,i)},getPageData:function(){var b=this.store.getTotalCount();return{total:b,activePage:Math.ceil((this.cursor+this.pageSize)/this.pageSize),pages:b<this.pageSize?1:Math.ceil(b/this.pageSize)}},changePage:function(b){this.doLoad(((b-1)*this.pageSize).constrain(0,this.store.getTotalCount()))},onLoadError:function(){if(!this.rendered){return}this.refresh.enable()},readPage:function(e){var b=this.inputItem.getValue(),c;if(!b||isNaN(c=parseInt(b,10))){this.inputItem.setValue(e.activePage);return false}return c},onPagingFocus:function(){this.inputItem.select()},onPagingBlur:function(b){this.inputItem.setValue(this.getPageData().activePage)},onPagingKeyDown:function(i,h){var c=h.getKey(),l=this.getPageData(),g;if(c==h.RETURN){h.stopEvent();g=this.readPage(l);if(g!==false){g=Math.min(Math.max(1,g),l.pages)-1;this.doLoad(g*this.pageSize)}}else{if(c==h.HOME||c==h.END){h.stopEvent();g=c==h.HOME?1:l.pages;i.setValue(g)}else{if(c==h.UP||c==h.PAGEUP||c==h.DOWN||c==h.PAGEDOWN){h.stopEvent();if((g=this.readPage(l))){var b=h.shiftKey?10:1;if(c==h.DOWN||c==h.PAGEDOWN){b*=-1}g+=b;if(g>=1&g<=l.pages){i.setValue(g)}}}}}},getParams:function(){return this.paramNames||this.store.paramNames},beforeLoad:function(){if(this.rendered&&this.refresh){this.refresh.disable()}},doLoad:function(d){var c={},b=this.getParams();c[b.start]=d;c[b.limit]=this.pageSize;if(this.fireEvent("beforechange",this,c)!==false){this.store.load({params:c})}},moveFirst:function(){this.doLoad(0)},movePrevious:function(){this.doLoad(Math.max(0,this.cursor-this.pageSize))},moveNext:function(){this.doLoad(this.cursor+this.pageSize)},moveLast:function(){var c=this.store.getTotalCount(),b=c%this.pageSize;this.doLoad(b?(c-b):c-this.pageSize)},doRefresh:function(){this.doLoad(this.cursor)},bindStore:function(c,d){var b;if(!d&&this.store){if(c!==this.store&&this.store.autoDestroy){this.store.destroy()}else{this.store.un("beforeload",this.beforeLoad,this);this.store.un("load",this.onLoad,this);this.store.un("exception",this.onLoadError,this)}if(!c){this.store=null}}if(c){c=Ext.StoreMgr.lookup(c);c.on({scope:this,beforeload:this.beforeLoad,load:this.onLoad,exception:this.onLoadError});b=true}this.store=c;if(b){this.onLoad(c,null,{})}},unbind:function(b){this.bindStore(null)},bind:function(b){this.bindStore(b)},onDestroy:function(){this.bindStore(null);Ext.PagingToolbar.superclass.onDestroy.call(this)}})})();Ext.reg("paging",Ext.PagingToolbar);Ext.History=(function(){var e,c;var l=false;var d;function g(){var m=location.href,n=m.indexOf("#");return n>=0?m.substr(n+1):null}function a(){c.value=d}function h(m){d=m;Ext.History.fireEvent("change",m)}function i(n){var m=['<html><body><div id="state">',Ext.util.Format.htmlEncode(n),"</div></body></html>"].join("");try{var p=e.contentWindow.document;p.open();p.write(m);p.close();return true}catch(o){return false}}function b(){if(!e.contentWindow||!e.contentWindow.document){setTimeout(b,10);return}var p=e.contentWindow.document;var n=p.getElementById("state");var m=n?n.innerText:null;var o=g();setInterval(function(){p=e.contentWindow.document;n=p.getElementById("state");var r=n?n.innerText:null;var q=g();if(r!==m){m=r;h(m);top.location.hash=m;o=m;a()}else{if(q!==o){o=q;i(q)}}},50);l=true;Ext.History.fireEvent("ready",Ext.History)}function k(){d=c.value?c.value:g();if(Ext.isIE){b()}else{var m=g();setInterval(function(){var n=g();if(n!==m){m=n;h(m);a()}},50);l=true;Ext.History.fireEvent("ready",Ext.History)}}return{fieldId:"x-history-field",iframeId:"x-history-frame",events:{},init:function(n,m){if(l){Ext.callback(n,m,[this]);return}if(!Ext.isReady){Ext.onReady(function(){Ext.History.init(n,m)});return}c=Ext.getDom(Ext.History.fieldId);if(Ext.isIE){e=Ext.getDom(Ext.History.iframeId)}this.addEvents("ready","change");if(n){this.on("ready",n,m,{single:true})}k()},add:function(m,n){if(n!==false){if(this.getToken()==m){return true}}if(Ext.isIE){return i(m)}else{top.location.hash=m;return true}},back:function(){history.go(-1)},forward:function(){history.go(1)},getToken:function(){return l?d:g()}}})();Ext.apply(Ext.History,new Ext.util.Observable());Ext.Tip=Ext.extend(Ext.Panel,{minWidth:40,maxWidth:300,shadow:"sides",defaultAlign:"tl-bl?",autoRender:true,quickShowInterval:250,frame:true,hidden:true,baseCls:"x-tip",floating:{shadow:true,shim:true,useDisplay:true,constrain:false},autoHeight:true,closeAction:"hide",initComponent:function(){Ext.Tip.superclass.initComponent.call(this);if(this.closable&&!this.title){this.elements+=",header"}},afterRender:function(){Ext.Tip.superclass.afterRender.call(this);if(this.closable){this.addTool({id:"close",handler:this[this.closeAction],scope:this})}},showAt:function(a){Ext.Tip.superclass.show.call(this);if(this.measureWidth!==false&&(!this.initialConfig||typeof this.initialConfig.width!="number")){this.doAutoWidth()}if(this.constrainPosition){a=this.el.adjustForConstraints(a)}this.setPagePosition(a[0],a[1])},doAutoWidth:function(a){a=a||0;var b=this.body.getTextWidth();if(this.title){b=Math.max(b,this.header.child("span").getTextWidth(this.title))}b+=this.getFrameWidth()+(this.closable?20:0)+this.body.getPadding("lr")+a;this.setWidth(b.constrain(this.minWidth,this.maxWidth));if(Ext.isIE7&&!this.repainted){this.el.repaint();this.repainted=true}},showBy:function(a,b){if(!this.rendered){this.render(Ext.getBody())}this.showAt(this.el.getAlignToXY(a,b||this.defaultAlign))},initDraggable:function(){this.dd=new Ext.Tip.DD(this,typeof this.draggable=="boolean"?null:this.draggable);this.header.addClass("x-tip-draggable")}});Ext.reg("tip",Ext.Tip);Ext.Tip.DD=function(b,a){Ext.apply(this,a);this.tip=b;Ext.Tip.DD.superclass.constructor.call(this,b.el.id,"WindowDD-"+b.id);this.setHandleElId(b.header.id);this.scroll=false};Ext.extend(Ext.Tip.DD,Ext.dd.DD,{moveOnly:true,scroll:false,headerOffsets:[100,25],startDrag:function(){this.tip.el.disableShadow()},endDrag:function(a){this.tip.el.enableShadow(true)}});Ext.ToolTip=Ext.extend(Ext.Tip,{showDelay:500,hideDelay:200,dismissDelay:5000,trackMouse:false,anchorToTarget:true,anchorOffset:0,targetCounter:0,constrainPosition:false,initComponent:function(){Ext.ToolTip.superclass.initComponent.call(this);this.lastActive=new Date();this.initTarget(this.target);this.origAnchor=this.anchor},onRender:function(b,a){Ext.ToolTip.superclass.onRender.call(this,b,a);this.anchorCls="x-tip-anchor-"+this.getAnchorPosition();this.anchorEl=this.el.createChild({cls:"x-tip-anchor "+this.anchorCls})},afterRender:function(){Ext.ToolTip.superclass.afterRender.call(this);this.anchorEl.setStyle("z-index",this.el.getZIndex()+1).setVisibilityMode(Ext.Element.DISPLAY)},initTarget:function(c){var a;if((a=Ext.get(c))){if(this.target){var b=Ext.get(this.target);this.mun(b,"mouseover",this.onTargetOver,this);this.mun(b,"mouseout",this.onTargetOut,this);this.mun(b,"mousemove",this.onMouseMove,this)}this.mon(a,{mouseover:this.onTargetOver,mouseout:this.onTargetOut,mousemove:this.onMouseMove,scope:this});this.target=a}if(this.anchor){this.anchorTarget=this.target}},onMouseMove:function(b){var a=this.delegate?b.getTarget(this.delegate):this.triggerElement=true;if(a){this.targetXY=b.getXY();if(a===this.triggerElement){if(!this.hidden&&this.trackMouse){this.setPagePosition(this.getTargetXY())}}else{this.hide();this.lastActive=new Date(0);this.onTargetOver(b)}}else{if(!this.closable&&this.isVisible()){this.hide()}}},getTargetXY:function(){if(this.delegate){this.anchorTarget=this.triggerElement}if(this.anchor){this.targetCounter++;var c=this.getOffsets(),m=(this.anchorToTarget&&!this.trackMouse)?this.el.getAlignToXY(this.anchorTarget,this.getAnchorAlign()):this.targetXY,a=Ext.lib.Dom.getViewWidth()-5,h=Ext.lib.Dom.getViewHeight()-5,i=document.documentElement,e=document.body,l=(i.scrollLeft||e.scrollLeft||0)+5,k=(i.scrollTop||e.scrollTop||0)+5,b=[m[0]+c[0],m[1]+c[1]],g=this.getSize();this.anchorEl.removeClass(this.anchorCls);if(this.targetCounter<2){if(b[0]<l){if(this.anchorToTarget){this.defaultAlign="l-r";if(this.mouseOffset){this.mouseOffset[0]*=-1}}this.anchor="left";return this.getTargetXY()}if(b[0]+g.width>a){if(this.anchorToTarget){this.defaultAlign="r-l";if(this.mouseOffset){this.mouseOffset[0]*=-1}}this.anchor="right";return this.getTargetXY()}if(b[1]<k){if(this.anchorToTarget){this.defaultAlign="t-b";if(this.mouseOffset){this.mouseOffset[1]*=-1}}this.anchor="top";return this.getTargetXY()}if(b[1]+g.height>h){if(this.anchorToTarget){this.defaultAlign="b-t";if(this.mouseOffset){this.mouseOffset[1]*=-1}}this.anchor="bottom";return this.getTargetXY()}}this.anchorCls="x-tip-anchor-"+this.getAnchorPosition();this.anchorEl.addClass(this.anchorCls);this.targetCounter=0;return b}else{var d=this.getMouseOffset();return[this.targetXY[0]+d[0],this.targetXY[1]+d[1]]}},getMouseOffset:function(){var a=this.anchor?[0,0]:[15,18];if(this.mouseOffset){a[0]+=this.mouseOffset[0];a[1]+=this.mouseOffset[1]}return a},getAnchorPosition:function(){if(this.anchor){this.tipAnchor=this.anchor.charAt(0)}else{var a=this.defaultAlign.match(/^([a-z]+)-([a-z]+)(\?)?$/);if(!a){throw"AnchorTip.defaultAlign is invalid"}this.tipAnchor=a[1].charAt(0)}switch(this.tipAnchor){case"t":return"top";case"b":return"bottom";case"r":return"right"}return"left"},getAnchorAlign:function(){switch(this.anchor){case"top":return"tl-bl";case"left":return"tl-tr";case"right":return"tr-tl";default:return"bl-tl"}},getOffsets:function(){var b,a=this.getAnchorPosition().charAt(0);if(this.anchorToTarget&&!this.trackMouse){switch(a){case"t":b=[0,9];break;case"b":b=[0,-13];break;case"r":b=[-13,0];break;default:b=[9,0];break}}else{switch(a){case"t":b=[-15-this.anchorOffset,30];break;case"b":b=[-19-this.anchorOffset,-13-this.el.dom.offsetHeight];break;case"r":b=[-15-this.el.dom.offsetWidth,-13-this.anchorOffset];break;default:b=[25,-13-this.anchorOffset];break}}var c=this.getMouseOffset();b[0]+=c[0];b[1]+=c[1];return b},onTargetOver:function(b){if(this.disabled||b.within(this.target.dom,true)){return}var a=b.getTarget(this.delegate);if(a){this.triggerElement=a;this.clearTimer("hide");this.targetXY=b.getXY();this.delayShow()}},delayShow:function(){if(this.hidden&&!this.showTimer){if(this.lastActive.getElapsed()<this.quickShowInterval){this.show()}else{this.showTimer=this.show.defer(this.showDelay,this)}}else{if(!this.hidden&&this.autoHide!==false){this.show()}}},onTargetOut:function(a){if(this.disabled||a.within(this.target.dom,true)){return}this.clearTimer("show");if(this.autoHide!==false){this.delayHide()}},delayHide:function(){if(!this.hidden&&!this.hideTimer){this.hideTimer=this.hide.defer(this.hideDelay,this)}},hide:function(){this.clearTimer("dismiss");this.lastActive=new Date();if(this.anchorEl){this.anchorEl.hide()}Ext.ToolTip.superclass.hide.call(this);delete this.triggerElement},show:function(){if(this.anchor){this.showAt([-1000,-1000]);this.origConstrainPosition=this.constrainPosition;this.constrainPosition=false;this.anchor=this.origAnchor}this.showAt(this.getTargetXY());if(this.anchor){this.anchorEl.show();this.syncAnchor();this.constrainPosition=this.origConstrainPosition}else{this.anchorEl.hide()}},showAt:function(a){this.lastActive=new Date();this.clearTimers();Ext.ToolTip.superclass.showAt.call(this,a);if(this.dismissDelay&&this.autoHide!==false){this.dismissTimer=this.hide.defer(this.dismissDelay,this)}if(this.anchor&&!this.anchorEl.isVisible()){this.syncAnchor();this.anchorEl.show()}else{this.anchorEl.hide()}},syncAnchor:function(){var a,b,c;switch(this.tipAnchor.charAt(0)){case"t":a="b";b="tl";c=[20+this.anchorOffset,2];break;case"r":a="l";b="tr";c=[-2,11+this.anchorOffset];break;case"b":a="t";b="bl";c=[20+this.anchorOffset,-2];break;default:a="r";b="tl";c=[2,11+this.anchorOffset];break}this.anchorEl.alignTo(this.el,a+"-"+b,c)},setPagePosition:function(a,b){Ext.ToolTip.superclass.setPagePosition.call(this,a,b);if(this.anchor){this.syncAnchor()}},clearTimer:function(a){a=a+"Timer";clearTimeout(this[a]);delete this[a]},clearTimers:function(){this.clearTimer("show");this.clearTimer("dismiss");this.clearTimer("hide")},onShow:function(){Ext.ToolTip.superclass.onShow.call(this);Ext.getDoc().on("mousedown",this.onDocMouseDown,this)},onHide:function(){Ext.ToolTip.superclass.onHide.call(this);Ext.getDoc().un("mousedown",this.onDocMouseDown,this)},onDocMouseDown:function(a){if(this.autoHide!==true&&!this.closable&&!a.within(this.el.dom)){this.disable();this.doEnable.defer(100,this)}},doEnable:function(){if(!this.isDestroyed){this.enable()}},onDisable:function(){this.clearTimers();this.hide()},adjustPosition:function(a,d){if(this.contstrainPosition){var c=this.targetXY[1],b=this.getSize().height;if(d<=c&&(d+b)>=c){d=c-b-5}}return{x:a,y:d}},beforeDestroy:function(){this.clearTimers();Ext.destroy(this.anchorEl);delete this.anchorEl;delete this.target;delete this.anchorTarget;delete this.triggerElement;Ext.ToolTip.superclass.beforeDestroy.call(this)},onDestroy:function(){Ext.getDoc().un("mousedown",this.onDocMouseDown,this);Ext.ToolTip.superclass.onDestroy.call(this)}});Ext.reg("tooltip",Ext.ToolTip);Ext.QuickTip=Ext.extend(Ext.ToolTip,{interceptTitles:false,tagConfig:{namespace:"ext",attribute:"qtip",width:"qwidth",target:"target",title:"qtitle",hide:"hide",cls:"qclass",align:"qalign",anchor:"anchor"},initComponent:function(){this.target=this.target||Ext.getDoc();this.targets=this.targets||{};Ext.QuickTip.superclass.initComponent.call(this)},register:function(e){var h=Ext.isArray(e)?e:arguments;for(var g=0,a=h.length;g<a;g++){var l=h[g];var k=l.target;if(k){if(Ext.isArray(k)){for(var d=0,b=k.length;d<b;d++){this.targets[Ext.id(k[d])]=l}}else{this.targets[Ext.id(k)]=l}}}},unregister:function(a){delete this.targets[Ext.id(a)]},cancelShow:function(b){var a=this.activeTarget;b=Ext.get(b).dom;if(this.isVisible()){if(a&&a.el==b){this.hide()}}else{if(a&&a.el==b){this.clearTimer("show")}}},getTipCfg:function(d){var b=d.getTarget(),c,a;if(this.interceptTitles&&b.title&&Ext.isString(b.title)){c=b.title;b.qtip=c;b.removeAttribute("title");d.preventDefault()}else{a=this.tagConfig;c=b.qtip||Ext.fly(b).getAttribute(a.attribute,a.namespace)}return c},onTargetOver:function(i){if(this.disabled){return}this.targetXY=i.getXY();var c=i.getTarget();if(!c||c.nodeType!==1||c==document||c==document.body){return}if(this.activeTarget&&((c==this.activeTarget.el)||Ext.fly(this.activeTarget.el).contains(c))){this.clearTimer("hide");this.show();return}if(c&&this.targets[c.id]){this.activeTarget=this.targets[c.id];this.activeTarget.el=c;this.anchor=this.activeTarget.anchor;if(this.anchor){this.anchorTarget=c}this.delayShow();return}var g,h=Ext.fly(c),b=this.tagConfig,d=b.namespace;if(g=this.getTipCfg(i)){var a=h.getAttribute(b.hide,d);this.activeTarget={el:c,text:g,width:h.getAttribute(b.width,d),autoHide:a!="user"&&a!=="false",title:h.getAttribute(b.title,d),cls:h.getAttribute(b.cls,d),align:h.getAttribute(b.align,d)};this.anchor=h.getAttribute(b.anchor,d);if(this.anchor){this.anchorTarget=c}this.delayShow()}},onTargetOut:function(a){if(this.activeTarget&&a.within(this.activeTarget.el)&&!this.getTipCfg(a)){return}this.clearTimer("show");if(this.autoHide!==false){this.delayHide()}},showAt:function(b){var a=this.activeTarget;if(a){if(!this.rendered){this.render(Ext.getBody());this.activeTarget=a}if(a.width){this.setWidth(a.width);this.body.setWidth(this.adjustBodyWidth(a.width-this.getFrameWidth()));this.measureWidth=false}else{this.measureWidth=true}this.setTitle(a.title||"");this.body.update(a.text);this.autoHide=a.autoHide;this.dismissDelay=a.dismissDelay||this.dismissDelay;if(this.lastCls){this.el.removeClass(this.lastCls);delete this.lastCls}if(a.cls){this.el.addClass(a.cls);this.lastCls=a.cls}if(this.anchor){this.constrainPosition=false}else{if(a.align){b=this.el.getAlignToXY(a.el,a.align);this.constrainPosition=false}else{this.constrainPosition=true}}}Ext.QuickTip.superclass.showAt.call(this,b)},hide:function(){delete this.activeTarget;Ext.QuickTip.superclass.hide.call(this)}});Ext.reg("quicktip",Ext.QuickTip);Ext.QuickTips=function(){var b,a=false;return{init:function(c){if(!b){if(!Ext.isReady){Ext.onReady(function(){Ext.QuickTips.init(c)});return}b=new Ext.QuickTip({elements:"header,body",disabled:a});if(c!==false){b.render(Ext.getBody())}}},ddDisable:function(){if(b&&!a){b.disable()}},ddEnable:function(){if(b&&!a){b.enable()}},enable:function(){if(b){b.enable()}a=false},disable:function(){if(b){b.disable()}a=true},isEnabled:function(){return b!==undefined&&!b.disabled},getQuickTip:function(){return b},register:function(){b.register.apply(b,arguments)},unregister:function(){b.unregister.apply(b,arguments)},tips:function(){b.register.apply(b,arguments)}}}();Ext.slider.Tip=Ext.extend(Ext.Tip,{minWidth:10,offsets:[0,-10],init:function(a){a.on({scope:this,dragstart:this.onSlide,drag:this.onSlide,dragend:this.hide,destroy:this.destroy})},onSlide:function(b,c,a){this.show();this.body.update(this.getText(a));this.doAutoWidth();this.el.alignTo(a.el,"b-t?",this.offsets)},getText:function(a){return String(a.value)}});Ext.ux.SliderTip=Ext.slider.Tip;Ext.tree.TreePanel=Ext.extend(Ext.Panel,{rootVisible:true,animate:Ext.enableFx,lines:true,enableDD:false,hlDrop:Ext.enableFx,pathSeparator:"/",bubbleEvents:[],initComponent:function(){Ext.tree.TreePanel.superclass.initComponent.call(this);if(!this.eventModel){this.eventModel=new Ext.tree.TreeEventModel(this)}var a=this.loader;if(!a){a=new Ext.tree.TreeLoader({dataUrl:this.dataUrl,requestMethod:this.requestMethod})}else{if(Ext.isObject(a)&&!a.load){a=new Ext.tree.TreeLoader(a)}}this.loader=a;this.nodeHash={};if(this.root){var b=this.root;delete this.root;this.setRootNode(b)}this.addEvents("append","remove","movenode","insert","beforeappend","beforeremove","beforemovenode","beforeinsert","beforeload","load","textchange","beforeexpandnode","beforecollapsenode","expandnode","disabledchange","collapsenode","beforeclick","click","containerclick","checkchange","beforedblclick","dblclick","containerdblclick","contextmenu","containercontextmenu","beforechildrenrendered","startdrag","enddrag","dragdrop","beforenodedrop","nodedrop","nodedragover");if(this.singleExpand){this.on("beforeexpandnode",this.restrictExpand,this)}},proxyNodeEvent:function(c,b,a,h,g,e,d){if(c=="collapse"||c=="expand"||c=="beforecollapse"||c=="beforeexpand"||c=="move"||c=="beforemove"){c=c+"node"}return this.fireEvent(c,b,a,h,g,e,d)},getRootNode:function(){return this.root},setRootNode:function(b){this.destroyRoot();if(!b.render){b=this.loader.createNode(b)}this.root=b;b.ownerTree=this;b.isRoot=true;this.registerNode(b);if(!this.rootVisible){var a=b.attributes.uiProvider;b.ui=a?new a(b):new Ext.tree.RootTreeNodeUI(b)}if(this.innerCt){this.clearInnerCt();this.renderRoot()}return b},clearInnerCt:function(){this.innerCt.update("")},renderRoot:function(){this.root.render();if(!this.rootVisible){this.root.renderChildren()}},getNodeById:function(a){return this.nodeHash[a]},registerNode:function(a){this.nodeHash[a.id]=a},unregisterNode:function(a){delete this.nodeHash[a.id]},toString:function(){return"[Tree"+(this.id?" "+this.id:"")+"]"},restrictExpand:function(a){var b=a.parentNode;if(b){if(b.expandedChild&&b.expandedChild.parentNode==b){b.expandedChild.collapse()}b.expandedChild=a}},getChecked:function(b,c){c=c||this.root;var d=[];var e=function(){if(this.attributes.checked){d.push(!b?this:(b=="id"?this.id:this.attributes[b]))}};c.cascade(e);return d},getLoader:function(){return this.loader},expandAll:function(){this.root.expand(true)},collapseAll:function(){this.root.collapse(true)},getSelectionModel:function(){if(!this.selModel){this.selModel=new Ext.tree.DefaultSelectionModel()}return this.selModel},expandPath:function(g,a,h){if(Ext.isEmpty(g)){if(h){h(false,undefined)}return}a=a||"id";var d=g.split(this.pathSeparator);var c=this.root;if(c.attributes[a]!=d[1]){if(h){h(false,null)}return}var b=1;var e=function(){if(++b==d.length){if(h){h(true,c)}return}var i=c.findChild(a,d[b]);if(!i){if(h){h(false,c)}return}c=i;i.expand(false,false,e)};c.expand(false,false,e)},selectPath:function(e,a,g){if(Ext.isEmpty(e)){if(g){g(false,undefined)}return}a=a||"id";var c=e.split(this.pathSeparator),b=c.pop();if(c.length>1){var d=function(i,h){if(i&&h){var k=h.findChild(a,b);if(k){k.select();if(g){g(true,k)}}else{if(g){g(false,k)}}}else{if(g){g(false,k)}}};this.expandPath(c.join(this.pathSeparator),a,d)}else{this.root.select();if(g){g(true,this.root)}}},getTreeEl:function(){return this.body},onRender:function(b,a){Ext.tree.TreePanel.superclass.onRender.call(this,b,a);this.el.addClass("x-tree");this.innerCt=this.body.createChild({tag:"ul",cls:"x-tree-root-ct "+(this.useArrows?"x-tree-arrows":this.lines?"x-tree-lines":"x-tree-no-lines")})},initEvents:function(){Ext.tree.TreePanel.superclass.initEvents.call(this);if(this.containerScroll){Ext.dd.ScrollManager.register(this.body)}if((this.enableDD||this.enableDrop)&&!this.dropZone){this.dropZone=new Ext.tree.TreeDropZone(this,this.dropConfig||{ddGroup:this.ddGroup||"TreeDD",appendOnly:this.ddAppendOnly===true})}if((this.enableDD||this.enableDrag)&&!this.dragZone){this.dragZone=new Ext.tree.TreeDragZone(this,this.dragConfig||{ddGroup:this.ddGroup||"TreeDD",scroll:this.ddScroll})}this.getSelectionModel().init(this)},afterRender:function(){Ext.tree.TreePanel.superclass.afterRender.call(this);this.renderRoot()},beforeDestroy:function(){if(this.rendered){Ext.dd.ScrollManager.unregister(this.body);Ext.destroy(this.dropZone,this.dragZone)}this.destroyRoot();Ext.destroy(this.loader);this.nodeHash=this.root=this.loader=null;Ext.tree.TreePanel.superclass.beforeDestroy.call(this)},destroyRoot:function(){if(this.root&&this.root.destroy){this.root.destroy(true)}}});Ext.tree.TreePanel.nodeTypes={};Ext.reg("treepanel",Ext.tree.TreePanel);Ext.tree.TreeEventModel=function(a){this.tree=a;this.tree.on("render",this.initEvents,this)};Ext.tree.TreeEventModel.prototype={initEvents:function(){var a=this.tree;if(a.trackMouseOver!==false){a.mon(a.innerCt,{scope:this,mouseover:this.delegateOver,mouseout:this.delegateOut})}a.mon(a.getTreeEl(),{scope:this,click:this.delegateClick,dblclick:this.delegateDblClick,contextmenu:this.delegateContextMenu})},getNode:function(b){var a;if(a=b.getTarget(".x-tree-node-el",10)){var c=Ext.fly(a,"_treeEvents").getAttribute("tree-node-id","ext");if(c){return this.tree.getNodeById(c)}}return null},getNodeTarget:function(b){var a=b.getTarget(".x-tree-node-icon",1);if(!a){a=b.getTarget(".x-tree-node-el",6)}return a},delegateOut:function(b,a){if(!this.beforeEvent(b)){return}if(b.getTarget(".x-tree-ec-icon",1)){var c=this.getNode(b);this.onIconOut(b,c);if(c==this.lastEcOver){delete this.lastEcOver}}if((a=this.getNodeTarget(b))&&!b.within(a,true)){this.onNodeOut(b,this.getNode(b))}},delegateOver:function(b,a){if(!this.beforeEvent(b)){return}if(Ext.isGecko&&!this.trackingDoc){Ext.getBody().on("mouseover",this.trackExit,this);this.trackingDoc=true}if(this.lastEcOver){this.onIconOut(b,this.lastEcOver);delete this.lastEcOver}if(b.getTarget(".x-tree-ec-icon",1)){this.lastEcOver=this.getNode(b);this.onIconOver(b,this.lastEcOver)}if(a=this.getNodeTarget(b)){this.onNodeOver(b,this.getNode(b))}},trackExit:function(a){if(this.lastOverNode){if(this.lastOverNode.ui&&!a.within(this.lastOverNode.ui.getEl())){this.onNodeOut(a,this.lastOverNode)}delete this.lastOverNode;Ext.getBody().un("mouseover",this.trackExit,this);this.trackingDoc=false}},delegateClick:function(b,a){if(this.beforeEvent(b)){if(b.getTarget("input[type=checkbox]",1)){this.onCheckboxClick(b,this.getNode(b))}else{if(b.getTarget(".x-tree-ec-icon",1)){this.onIconClick(b,this.getNode(b))}else{if(this.getNodeTarget(b)){this.onNodeClick(b,this.getNode(b))}}}}else{this.checkContainerEvent(b,"click")}},delegateDblClick:function(b,a){if(this.beforeEvent(b)){if(this.getNodeTarget(b)){this.onNodeDblClick(b,this.getNode(b))}}else{this.checkContainerEvent(b,"dblclick")}},delegateContextMenu:function(b,a){if(this.beforeEvent(b)){if(this.getNodeTarget(b)){this.onNodeContextMenu(b,this.getNode(b))}}else{this.checkContainerEvent(b,"contextmenu")}},checkContainerEvent:function(b,a){if(this.disabled){b.stopEvent();return false}this.onContainerEvent(b,a)},onContainerEvent:function(b,a){this.tree.fireEvent("container"+a,this.tree,b)},onNodeClick:function(b,a){a.ui.onClick(b)},onNodeOver:function(b,a){this.lastOverNode=a;a.ui.onOver(b)},onNodeOut:function(b,a){a.ui.onOut(b)},onIconOver:function(b,a){a.ui.addClass("x-tree-ec-over")},onIconOut:function(b,a){a.ui.removeClass("x-tree-ec-over")},onIconClick:function(b,a){a.ui.ecClick(b)},onCheckboxClick:function(b,a){a.ui.onCheckChange(b)},onNodeDblClick:function(b,a){a.ui.onDblClick(b)},onNodeContextMenu:function(b,a){a.ui.onContextMenu(b)},beforeEvent:function(b){var a=this.getNode(b);if(this.disabled||!a||!a.ui){b.stopEvent();return false}return true},disable:function(){this.disabled=true},enable:function(){this.disabled=false}};Ext.tree.DefaultSelectionModel=Ext.extend(Ext.util.Observable,{constructor:function(a){this.selNode=null;this.addEvents("selectionchange","beforeselect");Ext.apply(this,a);Ext.tree.DefaultSelectionModel.superclass.constructor.call(this)},init:function(a){this.tree=a;a.mon(a.getTreeEl(),"keydown",this.onKeyDown,this);a.on("click",this.onNodeClick,this)},onNodeClick:function(a,b){this.select(a)},select:function(c,a){if(!Ext.fly(c.ui.wrap).isVisible()&&a){return a.call(this,c)}var b=this.selNode;if(c==b){c.ui.onSelectedChange(true)}else{if(this.fireEvent("beforeselect",this,c,b)!==false){if(b&&b.ui){b.ui.onSelectedChange(false)}this.selNode=c;c.ui.onSelectedChange(true);this.fireEvent("selectionchange",this,c,b)}}return c},unselect:function(b,a){if(this.selNode==b){this.clearSelections(a)}},clearSelections:function(a){var b=this.selNode;if(b){b.ui.onSelectedChange(false);this.selNode=null;if(a!==true){this.fireEvent("selectionchange",this,null)}}return b},getSelectedNode:function(){return this.selNode},isSelected:function(a){return this.selNode==a},selectPrevious:function(a){if(!(a=a||this.selNode||this.lastSelNode)){return null}var c=a.previousSibling;if(c){if(!c.isExpanded()||c.childNodes.length<1){return this.select(c,this.selectPrevious)}else{var b=c.lastChild;while(b&&b.isExpanded()&&Ext.fly(b.ui.wrap).isVisible()&&b.childNodes.length>0){b=b.lastChild}return this.select(b,this.selectPrevious)}}else{if(a.parentNode&&(this.tree.rootVisible||!a.parentNode.isRoot)){return this.select(a.parentNode,this.selectPrevious)}}return null},selectNext:function(b){if(!(b=b||this.selNode||this.lastSelNode)){return null}if(b.firstChild&&b.isExpanded()&&Ext.fly(b.ui.wrap).isVisible()){return this.select(b.firstChild,this.selectNext)}else{if(b.nextSibling){return this.select(b.nextSibling,this.selectNext)}else{if(b.parentNode){var a=null;b.parentNode.bubble(function(){if(this.nextSibling){a=this.getOwnerTree().selModel.select(this.nextSibling,this.selectNext);return false}});return a}}}return null},onKeyDown:function(c){var b=this.selNode||this.lastSelNode;var d=this;if(!b){return}var a=c.getKey();switch(a){case c.DOWN:c.stopEvent();this.selectNext();break;case c.UP:c.stopEvent();this.selectPrevious();break;case c.RIGHT:c.preventDefault();if(b.hasChildNodes()){if(!b.isExpanded()){b.expand()}else{if(b.firstChild){this.select(b.firstChild,c)}}}break;case c.LEFT:c.preventDefault();if(b.hasChildNodes()&&b.isExpanded()){b.collapse()}else{if(b.parentNode&&(this.tree.rootVisible||b.parentNode!=this.tree.getRootNode())){this.select(b.parentNode,c)}}break}}});Ext.tree.MultiSelectionModel=Ext.extend(Ext.util.Observable,{constructor:function(a){this.selNodes=[];this.selMap={};this.addEvents("selectionchange");Ext.apply(this,a);Ext.tree.MultiSelectionModel.superclass.constructor.call(this)},init:function(a){this.tree=a;a.mon(a.getTreeEl(),"keydown",this.onKeyDown,this);a.on("click",this.onNodeClick,this)},onNodeClick:function(a,b){if(b.ctrlKey&&this.isSelected(a)){this.unselect(a)}else{this.select(a,b,b.ctrlKey)}},select:function(a,c,b){if(b!==true){this.clearSelections(true)}if(this.isSelected(a)){this.lastSelNode=a;return a}this.selNodes.push(a);this.selMap[a.id]=a;this.lastSelNode=a;a.ui.onSelectedChange(true);this.fireEvent("selectionchange",this,this.selNodes);return a},unselect:function(b){if(this.selMap[b.id]){b.ui.onSelectedChange(false);var c=this.selNodes;var a=c.indexOf(b);if(a!=-1){this.selNodes.splice(a,1)}delete this.selMap[b.id];this.fireEvent("selectionchange",this,this.selNodes)}},clearSelections:function(b){var d=this.selNodes;if(d.length>0){for(var c=0,a=d.length;c<a;c++){d[c].ui.onSelectedChange(false)}this.selNodes=[];this.selMap={};if(b!==true){this.fireEvent("selectionchange",this,this.selNodes)}}},isSelected:function(a){return this.selMap[a.id]?true:false},getSelectedNodes:function(){return this.selNodes.concat([])},onKeyDown:Ext.tree.DefaultSelectionModel.prototype.onKeyDown,selectNext:Ext.tree.DefaultSelectionModel.prototype.selectNext,selectPrevious:Ext.tree.DefaultSelectionModel.prototype.selectPrevious});Ext.data.Tree=Ext.extend(Ext.util.Observable,{constructor:function(a){this.nodeHash={};this.root=null;if(a){this.setRootNode(a)}this.addEvents("append","remove","move","insert","beforeappend","beforeremove","beforemove","beforeinsert");Ext.data.Tree.superclass.constructor.call(this)},pathSeparator:"/",proxyNodeEvent:function(){return this.fireEvent.apply(this,arguments)},getRootNode:function(){return this.root},setRootNode:function(a){this.root=a;a.ownerTree=this;a.isRoot=true;this.registerNode(a);return a},getNodeById:function(a){return this.nodeHash[a]},registerNode:function(a){this.nodeHash[a.id]=a},unregisterNode:function(a){delete this.nodeHash[a.id]},toString:function(){return"[Tree"+(this.id?" "+this.id:"")+"]"}});Ext.data.Node=Ext.extend(Ext.util.Observable,{constructor:function(a){this.attributes=a||{};this.leaf=this.attributes.leaf;this.id=this.attributes.id;if(!this.id){this.id=Ext.id(null,"xnode-");this.attributes.id=this.id}this.childNodes=[];this.parentNode=null;this.firstChild=null;this.lastChild=null;this.previousSibling=null;this.nextSibling=null;this.addEvents({append:true,remove:true,move:true,insert:true,beforeappend:true,beforeremove:true,beforemove:true,beforeinsert:true});this.listeners=this.attributes.listeners;Ext.data.Node.superclass.constructor.call(this)},fireEvent:function(b){if(Ext.data.Node.superclass.fireEvent.apply(this,arguments)===false){return false}var a=this.getOwnerTree();if(a){if(a.proxyNodeEvent.apply(a,arguments)===false){return false}}return true},isLeaf:function(){return this.leaf===true},setFirstChild:function(a){this.firstChild=a},setLastChild:function(a){this.lastChild=a},isLast:function(){return(!this.parentNode?true:this.parentNode.lastChild==this)},isFirst:function(){return(!this.parentNode?true:this.parentNode.firstChild==this)},hasChildNodes:function(){return !this.isLeaf()&&this.childNodes.length>0},isExpandable:function(){return this.attributes.expandable||this.hasChildNodes()},appendChild:function(e){var g=false;if(Ext.isArray(e)){g=e}else{if(arguments.length>1){g=arguments}}if(g){for(var d=0,a=g.length;d<a;d++){this.appendChild(g[d])}}else{if(this.fireEvent("beforeappend",this.ownerTree,this,e)===false){return false}var b=this.childNodes.length;var c=e.parentNode;if(c){if(e.fireEvent("beforemove",e.getOwnerTree(),e,c,this,b)===false){return false}c.removeChild(e)}b=this.childNodes.length;if(b===0){this.setFirstChild(e)}this.childNodes.push(e);e.parentNode=this;var h=this.childNodes[b-1];if(h){e.previousSibling=h;h.nextSibling=e}else{e.previousSibling=null}e.nextSibling=null;this.setLastChild(e);e.setOwnerTree(this.getOwnerTree());this.fireEvent("append",this.ownerTree,this,e,b);if(c){e.fireEvent("move",this.ownerTree,e,c,this,b)}return e}},removeChild:function(c,b){var a=this.childNodes.indexOf(c);if(a==-1){return false}if(this.fireEvent("beforeremove",this.ownerTree,this,c)===false){return false}this.childNodes.splice(a,1);if(c.previousSibling){c.previousSibling.nextSibling=c.nextSibling}if(c.nextSibling){c.nextSibling.previousSibling=c.previousSibling}if(this.firstChild==c){this.setFirstChild(c.nextSibling)}if(this.lastChild==c){this.setLastChild(c.previousSibling)}this.fireEvent("remove",this.ownerTree,this,c);if(b){c.destroy(true)}else{c.clear()}return c},clear:function(a){this.setOwnerTree(null,a);this.parentNode=this.previousSibling=this.nextSibling=null;if(a){this.firstChild=this.lastChild=null}},destroy:function(a){if(a===true){this.purgeListeners();this.clear(true);Ext.each(this.childNodes,function(b){b.destroy(true)});this.childNodes=null}else{this.remove(true)}},insertBefore:function(d,a){if(!a){return this.appendChild(d)}if(d==a){return false}if(this.fireEvent("beforeinsert",this.ownerTree,this,d,a)===false){return false}var b=this.childNodes.indexOf(a);var c=d.parentNode;var e=b;if(c==this&&this.childNodes.indexOf(d)<b){e--}if(c){if(d.fireEvent("beforemove",d.getOwnerTree(),d,c,this,b,a)===false){return false}c.removeChild(d)}if(e===0){this.setFirstChild(d)}this.childNodes.splice(e,0,d);d.parentNode=this;var g=this.childNodes[e-1];if(g){d.previousSibling=g;g.nextSibling=d}else{d.previousSibling=null}d.nextSibling=a;a.previousSibling=d;d.setOwnerTree(this.getOwnerTree());this.fireEvent("insert",this.ownerTree,this,d,a);if(c){d.fireEvent("move",this.ownerTree,d,c,this,e,a)}return d},remove:function(a){if(this.parentNode){this.parentNode.removeChild(this,a)}return this},removeAll:function(a){var c=this.childNodes,b;while((b=c[0])){this.removeChild(b,a)}return this},item:function(a){return this.childNodes[a]},replaceChild:function(a,c){var b=c?c.nextSibling:null;this.removeChild(c);this.insertBefore(a,b);return c},indexOf:function(a){return this.childNodes.indexOf(a)},getOwnerTree:function(){if(!this.ownerTree){var a=this;while(a){if(a.ownerTree){this.ownerTree=a.ownerTree;break}a=a.parentNode}}return this.ownerTree},getDepth:function(){var b=0;var a=this;while(a.parentNode){++b;a=a.parentNode}return b},setOwnerTree:function(a,b){if(a!=this.ownerTree){if(this.ownerTree){this.ownerTree.unregisterNode(this)}this.ownerTree=a;if(b!==true){Ext.each(this.childNodes,function(c){c.setOwnerTree(a)})}if(a){a.registerNode(this)}}},setId:function(b){if(b!==this.id){var a=this.ownerTree;if(a){a.unregisterNode(this)}this.id=this.attributes.id=b;if(a){a.registerNode(this)}this.onIdChange(b)}},onIdChange:Ext.emptyFn,getPath:function(c){c=c||"id";var e=this.parentNode;var a=[this.attributes[c]];while(e){a.unshift(e.attributes[c]);e=e.parentNode}var d=this.getOwnerTree().pathSeparator;return d+a.join(d)},bubble:function(c,b,a){var d=this;while(d){if(c.apply(b||d,a||[d])===false){break}d=d.parentNode}},cascade:function(g,e,b){if(g.apply(e||this,b||[this])!==false){var d=this.childNodes;for(var c=0,a=d.length;c<a;c++){d[c].cascade(g,e,b)}}},eachChild:function(g,e,b){var d=this.childNodes;for(var c=0,a=d.length;c<a;c++){if(g.apply(e||d[c],b||[d[c]])===false){break}}},findChild:function(b,c,a){return this.findChildBy(function(){return this.attributes[b]==c},null,a)},findChildBy:function(h,g,b){var e=this.childNodes,a=e.length,d=0,k,c;for(;d<a;d++){k=e[d];if(h.call(g||k,k)===true){return k}else{if(b){c=k.findChildBy(h,g,b);if(c!=null){return c}}}}return null},sort:function(e,d){var c=this.childNodes;var a=c.length;if(a>0){var g=d?function(){e.apply(d,arguments)}:e;c.sort(g);for(var b=0;b<a;b++){var h=c[b];h.previousSibling=c[b-1];h.nextSibling=c[b+1];if(b===0){this.setFirstChild(h)}if(b==a-1){this.setLastChild(h)}}}},contains:function(a){return a.isAncestor(this)},isAncestor:function(a){var b=this.parentNode;while(b){if(b==a){return true}b=b.parentNode}return false},toString:function(){return"[Node"+(this.id?" "+this.id:"")+"]"}});Ext.tree.TreeNode=Ext.extend(Ext.data.Node,{constructor:function(a){a=a||{};if(Ext.isString(a)){a={text:a}}this.childrenRendered=false;this.rendered=false;Ext.tree.TreeNode.superclass.constructor.call(this,a);this.expanded=a.expanded===true;this.isTarget=a.isTarget!==false;this.draggable=a.draggable!==false&&a.allowDrag!==false;this.allowChildren=a.allowChildren!==false&&a.allowDrop!==false;this.text=a.text;this.disabled=a.disabled===true;this.hidden=a.hidden===true;this.addEvents("textchange","beforeexpand","beforecollapse","expand","disabledchange","collapse","beforeclick","click","checkchange","beforedblclick","dblclick","contextmenu","beforechildrenrendered");var b=this.attributes.uiProvider||this.defaultUI||Ext.tree.TreeNodeUI;this.ui=new b(this)},preventHScroll:true,isExpanded:function(){return this.expanded},getUI:function(){return this.ui},getLoader:function(){var a;return this.loader||((a=this.getOwnerTree())&&a.loader?a.loader:(this.loader=new Ext.tree.TreeLoader()))},setFirstChild:function(a){var b=this.firstChild;Ext.tree.TreeNode.superclass.setFirstChild.call(this,a);if(this.childrenRendered&&b&&a!=b){b.renderIndent(true,true)}if(this.rendered){this.renderIndent(true,true)}},setLastChild:function(b){var a=this.lastChild;Ext.tree.TreeNode.superclass.setLastChild.call(this,b);if(this.childrenRendered&&a&&b!=a){a.renderIndent(true,true)}if(this.rendered){this.renderIndent(true,true)}},appendChild:function(b){if(!b.render&&!Ext.isArray(b)){b=this.getLoader().createNode(b)}var a=Ext.tree.TreeNode.superclass.appendChild.call(this,b);if(a&&this.childrenRendered){a.render()}this.ui.updateExpandIcon();return a},removeChild:function(b,a){this.ownerTree.getSelectionModel().unselect(b);Ext.tree.TreeNode.superclass.removeChild.apply(this,arguments);if(!a){var c=b.ui.rendered;if(c){b.ui.remove()}if(c&&this.childNodes.length<1){this.collapse(false,false)}else{this.ui.updateExpandIcon()}if(!this.firstChild&&!this.isHiddenRoot()){this.childrenRendered=false}}return b},insertBefore:function(c,a){if(!c.render){c=this.getLoader().createNode(c)}var b=Ext.tree.TreeNode.superclass.insertBefore.call(this,c,a);if(b&&a&&this.childrenRendered){c.render()}this.ui.updateExpandIcon();return b},setText:function(b){var a=this.text;this.text=this.attributes.text=b;if(this.rendered){this.ui.onTextChange(this,b,a)}this.fireEvent("textchange",this,b,a)},setIconCls:function(b){var a=this.attributes.iconCls;this.attributes.iconCls=b;if(this.rendered){this.ui.onIconClsChange(this,b,a)}},setTooltip:function(a,b){this.attributes.qtip=a;this.attributes.qtipTitle=b;if(this.rendered){this.ui.onTipChange(this,a,b)}},setIcon:function(a){this.attributes.icon=a;if(this.rendered){this.ui.onIconChange(this,a)}},setHref:function(a,b){this.attributes.href=a;this.attributes.hrefTarget=b;if(this.rendered){this.ui.onHrefChange(this,a,b)}},setCls:function(b){var a=this.attributes.cls;this.attributes.cls=b;if(this.rendered){this.ui.onClsChange(this,b,a)}},select:function(){var a=this.getOwnerTree();if(a){a.getSelectionModel().select(this)}},unselect:function(a){var b=this.getOwnerTree();if(b){b.getSelectionModel().unselect(this,a)}},isSelected:function(){var a=this.getOwnerTree();return a?a.getSelectionModel().isSelected(this):false},expand:function(a,c,d,b){if(!this.expanded){if(this.fireEvent("beforeexpand",this,a,c)===false){return}if(!this.childrenRendered){this.renderChildren()}this.expanded=true;if(!this.isHiddenRoot()&&(this.getOwnerTree().animate&&c!==false)||c){this.ui.animExpand(function(){this.fireEvent("expand",this);this.runCallback(d,b||this,[this]);if(a===true){this.expandChildNodes(true,true)}}.createDelegate(this));return}else{this.ui.expand();this.fireEvent("expand",this);this.runCallback(d,b||this,[this])}}else{this.runCallback(d,b||this,[this])}if(a===true){this.expandChildNodes(true)}},runCallback:function(a,c,b){if(Ext.isFunction(a)){a.apply(c,b)}},isHiddenRoot:function(){return this.isRoot&&!this.getOwnerTree().rootVisible},collapse:function(b,g,h,e){if(this.expanded&&!this.isHiddenRoot()){if(this.fireEvent("beforecollapse",this,b,g)===false){return}this.expanded=false;if((this.getOwnerTree().animate&&g!==false)||g){this.ui.animCollapse(function(){this.fireEvent("collapse",this);this.runCallback(h,e||this,[this]);if(b===true){this.collapseChildNodes(true)}}.createDelegate(this));return}else{this.ui.collapse();this.fireEvent("collapse",this);this.runCallback(h,e||this,[this])}}else{if(!this.expanded){this.runCallback(h,e||this,[this])}}if(b===true){var d=this.childNodes;for(var c=0,a=d.length;c<a;c++){d[c].collapse(true,false)}}},delayedExpand:function(a){if(!this.expandProcId){this.expandProcId=this.expand.defer(a,this)}},cancelExpand:function(){if(this.expandProcId){clearTimeout(this.expandProcId)}this.expandProcId=false},toggle:function(){if(this.expanded){this.collapse()}else{this.expand()}},ensureVisible:function(c,b){var a=this.getOwnerTree();a.expandPath(this.parentNode?this.parentNode.getPath():this.getPath(),false,function(){var d=a.getNodeById(this.id);a.getTreeEl().scrollChildIntoView(d.ui.anchor);this.runCallback(c,b||this,[this])}.createDelegate(this))},expandChildNodes:function(b,e){var d=this.childNodes,c,a=d.length;for(c=0;c<a;c++){d[c].expand(b,e)}},collapseChildNodes:function(b){var d=this.childNodes;for(var c=0,a=d.length;c<a;c++){d[c].collapse(b)}},disable:function(){this.disabled=true;this.unselect();if(this.rendered&&this.ui.onDisableChange){this.ui.onDisableChange(this,true)}this.fireEvent("disabledchange",this,true)},enable:function(){this.disabled=false;if(this.rendered&&this.ui.onDisableChange){this.ui.onDisableChange(this,false)}this.fireEvent("disabledchange",this,false)},renderChildren:function(b){if(b!==false){this.fireEvent("beforechildrenrendered",this)}var d=this.childNodes;for(var c=0,a=d.length;c<a;c++){d[c].render(true)}this.childrenRendered=true},sort:function(e,d){Ext.tree.TreeNode.superclass.sort.apply(this,arguments);if(this.childrenRendered){var c=this.childNodes;for(var b=0,a=c.length;b<a;b++){c[b].render(true)}}},render:function(a){this.ui.render(a);if(!this.rendered){this.getOwnerTree().registerNode(this);this.rendered=true;if(this.expanded){this.expanded=false;this.expand(false,false)}}},renderIndent:function(b,e){if(e){this.ui.childIndent=null}this.ui.renderIndent();if(b===true&&this.childrenRendered){var d=this.childNodes;for(var c=0,a=d.length;c<a;c++){d[c].renderIndent(true,e)}}},beginUpdate:function(){this.childrenRendered=false},endUpdate:function(){if(this.expanded&&this.rendered){this.renderChildren()}},destroy:function(a){if(a===true){this.unselect(true)}Ext.tree.TreeNode.superclass.destroy.call(this,a);Ext.destroy(this.ui,this.loader);this.ui=this.loader=null},onIdChange:function(a){this.ui.onIdChange(a)}});Ext.tree.TreePanel.nodeTypes.node=Ext.tree.TreeNode;Ext.tree.AsyncTreeNode=function(a){this.loaded=a&&a.loaded===true;this.loading=false;Ext.tree.AsyncTreeNode.superclass.constructor.apply(this,arguments);this.addEvents("beforeload","load")};Ext.extend(Ext.tree.AsyncTreeNode,Ext.tree.TreeNode,{expand:function(b,e,h,c){if(this.loading){var g;var d=function(){if(!this.loading){clearInterval(g);this.expand(b,e,h,c)}}.createDelegate(this);g=setInterval(d,200);return}if(!this.loaded){if(this.fireEvent("beforeload",this)===false){return}this.loading=true;this.ui.beforeLoad(this);var a=this.loader||this.attributes.loader||this.getOwnerTree().getLoader();if(a){a.load(this,this.loadComplete.createDelegate(this,[b,e,h,c]),this);return}}Ext.tree.AsyncTreeNode.superclass.expand.call(this,b,e,h,c)},isLoading:function(){return this.loading},loadComplete:function(a,c,d,b){this.loading=false;this.loaded=true;this.ui.afterLoad(this);this.fireEvent("load",this);this.expand(a,c,d,b)},isLoaded:function(){return this.loaded},hasChildNodes:function(){if(!this.isLeaf()&&!this.loaded){return true}else{return Ext.tree.AsyncTreeNode.superclass.hasChildNodes.call(this)}},reload:function(b,a){this.collapse(false,false);while(this.firstChild){this.removeChild(this.firstChild).destroy()}this.childrenRendered=false;this.loaded=false;if(this.isHiddenRoot()){this.expanded=false}this.expand(false,false,b,a)}});Ext.tree.TreePanel.nodeTypes.async=Ext.tree.AsyncTreeNode;Ext.tree.TreeNodeUI=Ext.extend(Object,{constructor:function(a){Ext.apply(this,{node:a,rendered:false,animating:false,wasLeaf:true,ecc:"x-tree-ec-icon x-tree-elbow",emptyIcon:Ext.BLANK_IMAGE_URL})},removeChild:function(a){if(this.rendered){this.ctNode.removeChild(a.ui.getEl())}},beforeLoad:function(){this.addClass("x-tree-node-loading")},afterLoad:function(){this.removeClass("x-tree-node-loading")},onTextChange:function(b,c,a){if(this.rendered){this.textNode.innerHTML=c}},onIconClsChange:function(c,a,b){if(this.rendered){Ext.fly(this.iconNode).replaceClass(b,a)}},onIconChange:function(b,a){if(this.rendered){var c=Ext.isEmpty(a);this.iconNode.src=c?this.emptyIcon:a;Ext.fly(this.iconNode)[c?"removeClass":"addClass"]("x-tree-node-inline-icon")}},onTipChange:function(b,c,d){if(this.rendered){var a=Ext.isDefined(d);if(this.textNode.setAttributeNS){this.textNode.setAttributeNS("ext","qtip",c);if(a){this.textNode.setAttributeNS("ext","qtitle",d)}}else{this.textNode.setAttribute("ext:qtip",c);if(a){this.textNode.setAttribute("ext:qtitle",d)}}}},onHrefChange:function(b,a,c){if(this.rendered){this.anchor.href=this.getHref(a);if(Ext.isDefined(c)){this.anchor.target=c}}},onClsChange:function(c,a,b){if(this.rendered){Ext.fly(this.elNode).replaceClass(b,a)}},onDisableChange:function(a,b){this.disabled=b;if(this.checkbox){this.checkbox.disabled=b}this[b?"addClass":"removeClass"]("x-tree-node-disabled")},onSelectedChange:function(a){if(a){this.focus();this.addClass("x-tree-selected")}else{this.removeClass("x-tree-selected")}},onMove:function(a,h,e,g,d,b){this.childIndent=null;if(this.rendered){var i=g.ui.getContainer();if(!i){this.holder=document.createElement("div");this.holder.appendChild(this.wrap);return}var c=b?b.ui.getEl():null;if(c){i.insertBefore(this.wrap,c)}else{i.appendChild(this.wrap)}this.node.renderIndent(true,e!=g)}},addClass:function(a){if(this.elNode){Ext.fly(this.elNode).addClass(a)}},removeClass:function(a){if(this.elNode){Ext.fly(this.elNode).removeClass(a)}},remove:function(){if(this.rendered){this.holder=document.createElement("div");this.holder.appendChild(this.wrap)}},fireEvent:function(){return this.node.fireEvent.apply(this.node,arguments)},initEvents:function(){this.node.on("move",this.onMove,this);if(this.node.disabled){this.onDisableChange(this.node,true)}if(this.node.hidden){this.hide()}var b=this.node.getOwnerTree();var a=b.enableDD||b.enableDrag||b.enableDrop;if(a&&(!this.node.isRoot||b.rootVisible)){Ext.dd.Registry.register(this.elNode,{node:this.node,handles:this.getDDHandles(),isHandle:false})}},getDDHandles:function(){return[this.iconNode,this.textNode,this.elNode]},hide:function(){this.node.hidden=true;if(this.wrap){this.wrap.style.display="none"}},show:function(){this.node.hidden=false;if(this.wrap){this.wrap.style.display=""}},onContextMenu:function(a){if(this.node.hasListener("contextmenu")||this.node.getOwnerTree().hasListener("contextmenu")){a.preventDefault();this.focus();this.fireEvent("contextmenu",this.node,a)}},onClick:function(c){if(this.dropping){c.stopEvent();return}if(this.fireEvent("beforeclick",this.node,c)!==false){var b=c.getTarget("a");if(!this.disabled&&this.node.attributes.href&&b){this.fireEvent("click",this.node,c);return}else{if(b&&c.ctrlKey){c.stopEvent()}}c.preventDefault();if(this.disabled){return}if(this.node.attributes.singleClickExpand&&!this.animating&&this.node.isExpandable()){this.node.toggle()}this.fireEvent("click",this.node,c)}else{c.stopEvent()}},onDblClick:function(a){a.preventDefault();if(this.disabled){return}if(this.fireEvent("beforedblclick",this.node,a)!==false){if(this.checkbox){this.toggleCheck()}if(!this.animating&&this.node.isExpandable()){this.node.toggle()}this.fireEvent("dblclick",this.node,a)}},onOver:function(a){this.addClass("x-tree-node-over")},onOut:function(a){this.removeClass("x-tree-node-over")},onCheckChange:function(){var a=this.checkbox.checked;this.checkbox.defaultChecked=a;this.node.attributes.checked=a;this.fireEvent("checkchange",this.node,a)},ecClick:function(a){if(!this.animating&&this.node.isExpandable()){this.node.toggle()}},startDrop:function(){this.dropping=true},endDrop:function(){setTimeout(function(){this.dropping=false}.createDelegate(this),50)},expand:function(){this.updateExpandIcon();this.ctNode.style.display=""},focus:function(){if(!this.node.preventHScroll){try{this.anchor.focus()}catch(c){}}else{try{var b=this.node.getOwnerTree().getTreeEl().dom;var a=b.scrollLeft;this.anchor.focus();b.scrollLeft=a}catch(c){}}},toggleCheck:function(b){var a=this.checkbox;if(a){a.checked=(b===undefined?!a.checked:b);this.onCheckChange()}},blur:function(){try{this.anchor.blur()}catch(a){}},animExpand:function(b){var a=Ext.get(this.ctNode);a.stopFx();if(!this.node.isExpandable()){this.updateExpandIcon();this.ctNode.style.display="";Ext.callback(b);return}this.animating=true;this.updateExpandIcon();a.slideIn("t",{callback:function(){this.animating=false;Ext.callback(b)},scope:this,duration:this.node.ownerTree.duration||0.25})},highlight:function(){var a=this.node.getOwnerTree();Ext.fly(this.wrap).highlight(a.hlColor||"C3DAF9",{endColor:a.hlBaseColor})},collapse:function(){this.updateExpandIcon();this.ctNode.style.display="none"},animCollapse:function(b){var a=Ext.get(this.ctNode);a.enableDisplayMode("block");a.stopFx();this.animating=true;this.updateExpandIcon();a.slideOut("t",{callback:function(){this.animating=false;Ext.callback(b)},scope:this,duration:this.node.ownerTree.duration||0.25})},getContainer:function(){return this.ctNode},getEl:function(){return this.wrap},appendDDGhost:function(a){a.appendChild(this.elNode.cloneNode(true))},getDDRepairXY:function(){return Ext.lib.Dom.getXY(this.iconNode)},onRender:function(){this.render()},render:function(c){var e=this.node,b=e.attributes;var d=e.parentNode?e.parentNode.ui.getContainer():e.ownerTree.innerCt.dom;if(!this.rendered){this.rendered=true;this.renderElements(e,b,d,c);if(b.qtip){this.onTipChange(e,b.qtip,b.qtipTitle)}else{if(b.qtipCfg){b.qtipCfg.target=Ext.id(this.textNode);Ext.QuickTips.register(b.qtipCfg)}}this.initEvents();if(!this.node.expanded){this.updateExpandIcon(true)}}else{if(c===true){d.appendChild(this.wrap)}}},renderElements:function(e,l,k,m){this.indentMarkup=e.parentNode?e.parentNode.ui.getChildIndent():"";var g=Ext.isBoolean(l.checked),b,c=this.getHref(l.href),d=['<li class="x-tree-node"><div ext:tree-node-id="',e.id,'" class="x-tree-node-el x-tree-node-leaf x-unselectable ',l.cls,'" unselectable="on">','<span class="x-tree-node-indent">',this.indentMarkup,"</span>",'<img alt="" src="',this.emptyIcon,'" class="x-tree-ec-icon x-tree-elbow" />','<img alt="" src="',l.icon||this.emptyIcon,'" class="x-tree-node-icon',(l.icon?" x-tree-node-inline-icon":""),(l.iconCls?" "+l.iconCls:""),'" unselectable="on" />',g?('<input class="x-tree-node-cb" type="checkbox" '+(l.checked?'checked="checked" />':"/>")):"",'<a hidefocus="on" class="x-tree-node-anchor" href="',c,'" tabIndex="1" ',l.hrefTarget?' target="'+l.hrefTarget+'"':"",'><span unselectable="on">',e.text,"</span></a></div>",'<ul class="x-tree-node-ct" style="display:none;"></ul>',"</li>"].join("");if(m!==true&&e.nextSibling&&(b=e.nextSibling.ui.getEl())){this.wrap=Ext.DomHelper.insertHtml("beforeBegin",b,d)}else{this.wrap=Ext.DomHelper.insertHtml("beforeEnd",k,d)}this.elNode=this.wrap.childNodes[0];this.ctNode=this.wrap.childNodes[1];var i=this.elNode.childNodes;this.indentNode=i[0];this.ecNode=i[1];this.iconNode=i[2];var h=3;if(g){this.checkbox=i[3];this.checkbox.defaultChecked=this.checkbox.checked;h++}this.anchor=i[h];this.textNode=i[h].firstChild},getHref:function(a){return Ext.isEmpty(a)?(Ext.isGecko?"":"#"):a},getAnchor:function(){return this.anchor},getTextEl:function(){return this.textNode},getIconEl:function(){return this.iconNode},isChecked:function(){return this.checkbox?this.checkbox.checked:false},updateExpandIcon:function(){if(this.rendered){var g=this.node,d,c,a=g.isLast()?"x-tree-elbow-end":"x-tree-elbow",e=g.hasChildNodes();if(e||g.attributes.expandable){if(g.expanded){a+="-minus";d="x-tree-node-collapsed";c="x-tree-node-expanded"}else{a+="-plus";d="x-tree-node-expanded";c="x-tree-node-collapsed"}if(this.wasLeaf){this.removeClass("x-tree-node-leaf");this.wasLeaf=false}if(this.c1!=d||this.c2!=c){Ext.fly(this.elNode).replaceClass(d,c);this.c1=d;this.c2=c}}else{if(!this.wasLeaf){Ext.fly(this.elNode).replaceClass("x-tree-node-expanded","x-tree-node-collapsed");delete this.c1;delete this.c2;this.wasLeaf=true}}var b="x-tree-ec-icon "+a;if(this.ecc!=b){this.ecNode.className=b;this.ecc=b}}},onIdChange:function(a){if(this.rendered){this.elNode.setAttribute("ext:tree-node-id",a)}},getChildIndent:function(){if(!this.childIndent){var a=[],b=this.node;while(b){if(!b.isRoot||(b.isRoot&&b.ownerTree.rootVisible)){if(!b.isLast()){a.unshift('<img alt="" src="'+this.emptyIcon+'" class="x-tree-elbow-line" />')}else{a.unshift('<img alt="" src="'+this.emptyIcon+'" class="x-tree-icon" />')}}b=b.parentNode}this.childIndent=a.join("")}return this.childIndent},renderIndent:function(){if(this.rendered){var a="",b=this.node.parentNode;if(b){a=b.ui.getChildIndent()}if(this.indentMarkup!=a){this.indentNode.innerHTML=a;this.indentMarkup=a}this.updateExpandIcon()}},destroy:function(){if(this.elNode){Ext.dd.Registry.unregister(this.elNode.id)}Ext.each(["textnode","anchor","checkbox","indentNode","ecNode","iconNode","elNode","ctNode","wrap","holder"],function(a){if(this[a]){Ext.fly(this[a]).remove();delete this[a]}},this);delete this.node}});Ext.tree.RootTreeNodeUI=Ext.extend(Ext.tree.TreeNodeUI,{render:function(){if(!this.rendered){var a=this.node.ownerTree.innerCt.dom;this.node.expanded=true;a.innerHTML='<div class="x-tree-root-node"></div>';this.wrap=this.ctNode=a.firstChild}},collapse:Ext.emptyFn,expand:Ext.emptyFn});Ext.tree.TreeLoader=function(a){this.baseParams={};Ext.apply(this,a);this.addEvents("beforeload","load","loadexception");Ext.tree.TreeLoader.superclass.constructor.call(this);if(Ext.isString(this.paramOrder)){this.paramOrder=this.paramOrder.split(/[\s,|]/)}};Ext.extend(Ext.tree.TreeLoader,Ext.util.Observable,{uiProviders:{},clearOnLoad:true,paramOrder:undefined,paramsAsHash:false,nodeParameter:"node",directFn:undefined,load:function(b,c,a){if(this.clearOnLoad){while(b.firstChild){b.removeChild(b.firstChild)}}if(this.doPreload(b)){this.runCallback(c,a||b,[b])}else{if(this.directFn||this.dataUrl||this.url){this.requestData(b,c,a||b)}}},doPreload:function(d){if(d.attributes.children){if(d.childNodes.length<1){var c=d.attributes.children;d.beginUpdate();for(var b=0,a=c.length;b<a;b++){var e=d.appendChild(this.createNode(c[b]));if(this.preloadChildren){this.doPreload(e)}}d.endUpdate()}return true}return false},getParams:function(g){var e=Ext.apply({},this.baseParams),h=this.nodeParameter,b=this.paramOrder;h&&(e[h]=g.id);if(this.directFn){var c=[g.id];if(b){if(h&&b.indexOf(h)>-1){c=[]}for(var d=0,a=b.length;d<a;d++){c.push(e[b[d]])}}else{if(this.paramsAsHash){c=[e]}}return c}else{return e}},requestData:function(c,d,b){if(this.fireEvent("beforeload",this,c,d)!==false){if(this.directFn){var a=this.getParams(c);a.push(this.processDirectResponse.createDelegate(this,[{callback:d,node:c,scope:b}],true));this.directFn.apply(window,a)}else{this.transId=Ext.Ajax.request({method:this.requestMethod,url:this.dataUrl||this.url,success:this.handleResponse,failure:this.handleFailure,scope:this,argument:{callback:d,node:c,scope:b},params:this.getParams(c)})}}else{this.runCallback(d,b||c,[])}},processDirectResponse:function(a,b,c){if(b.status){this.handleResponse({responseData:Ext.isArray(a)?a:null,responseText:a,argument:c})}else{this.handleFailure({argument:c})}},runCallback:function(a,c,b){if(Ext.isFunction(a)){a.apply(c,b)}},isLoading:function(){return !!this.transId},abort:function(){if(this.isLoading()){Ext.Ajax.abort(this.transId)}},createNode:function(attr){if(this.baseAttrs){Ext.applyIf(attr,this.baseAttrs)}if(this.applyLoader!==false&&!attr.loader){attr.loader=this}if(Ext.isString(attr.uiProvider)){attr.uiProvider=this.uiProviders[attr.uiProvider]||eval(attr.uiProvider)}if(attr.nodeType){return new Ext.tree.TreePanel.nodeTypes[attr.nodeType](attr)}else{return attr.leaf?new Ext.tree.TreeNode(attr):new Ext.tree.AsyncTreeNode(attr)}},processResponse:function(d,c,l,m){var p=d.responseText;try{var a=d.responseData||Ext.decode(p);c.beginUpdate();for(var g=0,h=a.length;g<h;g++){var b=this.createNode(a[g]);if(b){c.appendChild(b)}}c.endUpdate();this.runCallback(l,m||c,[c])}catch(k){this.handleFailure(d)}},handleResponse:function(c){this.transId=false;var b=c.argument;this.processResponse(c,b.node,b.callback,b.scope);this.fireEvent("load",this,b.node,c)},handleFailure:function(c){this.transId=false;var b=c.argument;this.fireEvent("loadexception",this,b.node,c);this.runCallback(b.callback,b.scope||b.node,[b.node])},destroy:function(){this.abort();this.purgeListeners()}});Ext.tree.TreeFilter=function(a,b){this.tree=a;this.filtered={};Ext.apply(this,b)};Ext.tree.TreeFilter.prototype={clearBlank:false,reverse:false,autoClear:false,remove:false,filter:function(d,a,b){a=a||"text";var c;if(typeof d=="string"){var e=d.length;if(e==0&&this.clearBlank){this.clear();return}d=d.toLowerCase();c=function(g){return g.attributes[a].substr(0,e).toLowerCase()==d}}else{if(d.exec){c=function(g){return d.test(g.attributes[a])}}else{throw"Illegal filter type, must be string or regex"}}this.filterBy(c,null,b)},filterBy:function(d,c,b){b=b||this.tree.root;if(this.autoClear){this.clear()}var a=this.filtered,i=this.reverse;var e=function(l){if(l==b){return true}if(a[l.id]){return false}var k=d.call(c||l,l);if(!k||i){a[l.id]=l;l.ui.hide();return false}return true};b.cascade(e);if(this.remove){for(var h in a){if(typeof h!="function"){var g=a[h];if(g&&g.parentNode){g.parentNode.removeChild(g)}}}}},clear:function(){var b=this.tree;var a=this.filtered;for(var d in a){if(typeof d!="function"){var c=a[d];if(c){c.ui.show()}}}this.filtered={}}};Ext.tree.TreeSorter=Ext.extend(Object,{constructor:function(a,b){Ext.apply(this,b);a.on({scope:this,beforechildrenrendered:this.doSort,append:this.updateSort,insert:this.updateSort,textchange:this.updateSortParent});var c=this.dir&&this.dir.toLowerCase()=="desc",d=this.property||"text";sortType=this.sortType;folderSort=this.folderSort;caseSensitive=this.caseSensitive===true;leafAttr=this.leafAttr||"leaf";if(Ext.isString(sortType)){sortType=Ext.data.SortTypes[sortType]}this.sortFn=function(l,i){var g=l.attributes,e=i.attributes;if(folderSort){if(g[leafAttr]&&!e[leafAttr]){return 1}if(!g[leafAttr]&&e[leafAttr]){return -1}}var k=g[d],h=e[d],m=sortType?sortType(k):(caseSensitive?k:k.toUpperCase());v2=sortType?sortType(h):(caseSensitive?h:h.toUpperCase());if(m<v2){return c?1:-1}else{if(m>v2){return c?-1:1}}return 0}},doSort:function(a){a.sort(this.sortFn)},updateSort:function(a,b){if(b.childrenRendered){this.doSort.defer(1,this,[b])}},updateSortParent:function(a){var b=a.parentNode;if(b&&b.childrenRendered){this.doSort.defer(1,this,[b])}}});if(Ext.dd.DropZone){Ext.tree.TreeDropZone=function(a,b){this.allowParentInsert=b.allowParentInsert||false;this.allowContainerDrop=b.allowContainerDrop||false;this.appendOnly=b.appendOnly||false;Ext.tree.TreeDropZone.superclass.constructor.call(this,a.getTreeEl(),b);this.tree=a;this.dragOverData={};this.lastInsertClass="x-tree-no-status"};Ext.extend(Ext.tree.TreeDropZone,Ext.dd.DropZone,{ddGroup:"TreeDD",expandDelay:1000,expandNode:function(a){if(a.hasChildNodes()&&!a.isExpanded()){a.expand(false,null,this.triggerCacheRefresh.createDelegate(this))}},queueExpand:function(a){this.expandProcId=this.expandNode.defer(this.expandDelay,this,[a])},cancelExpand:function(){if(this.expandProcId){clearTimeout(this.expandProcId);this.expandProcId=false}},isValidDropPoint:function(a,l,i,d,c){if(!a||!c){return false}var g=a.node;var h=c.node;if(!(g&&g.isTarget&&l)){return false}if(l=="append"&&g.allowChildren===false){return false}if((l=="above"||l=="below")&&(g.parentNode&&g.parentNode.allowChildren===false)){return false}if(h&&(g==h||h.contains(g))){return false}var b=this.dragOverData;b.tree=this.tree;b.target=g;b.data=c;b.point=l;b.source=i;b.rawEvent=d;b.dropNode=h;b.cancel=false;var k=this.tree.fireEvent("nodedragover",b);return b.cancel===false&&k!==false},getDropPoint:function(h,g,m){var o=g.node;if(o.isRoot){return o.allowChildren!==false?"append":false}var c=g.ddel;var p=Ext.lib.Dom.getY(c),k=p+c.offsetHeight;var i=Ext.lib.Event.getPageY(h);var l=o.allowChildren===false||o.isLeaf();if(this.appendOnly||o.parentNode.allowChildren===false){return l?false:"append"}var d=false;if(!this.allowParentInsert){d=o.hasChildNodes()&&o.isExpanded()}var a=(k-p)/(l?2:3);if(i>=p&&i<(p+a)){return"above"}else{if(!d&&(l||i>=k-a&&i<=k)){return"below"}else{return"append"}}},onNodeEnter:function(d,a,c,b){this.cancelExpand()},onContainerOver:function(a,c,b){if(this.allowContainerDrop&&this.isValidDropPoint({ddel:this.tree.getRootNode().ui.elNode,node:this.tree.getRootNode()},"append",a,c,b)){return this.dropAllowed}return this.dropNotAllowed},onNodeOver:function(b,i,h,g){var l=this.getDropPoint(h,b,i);var c=b.node;if(!this.expandProcId&&l=="append"&&c.hasChildNodes()&&!b.node.isExpanded()){this.queueExpand(c)}else{if(l!="append"){this.cancelExpand()}}var d=this.dropNotAllowed;if(this.isValidDropPoint(b,l,i,h,g)){if(l){var a=b.ddel;var k;if(l=="above"){d=b.node.isFirst()?"x-tree-drop-ok-above":"x-tree-drop-ok-between";k="x-tree-drag-insert-above"}else{if(l=="below"){d=b.node.isLast()?"x-tree-drop-ok-below":"x-tree-drop-ok-between";k="x-tree-drag-insert-below"}else{d="x-tree-drop-ok-append";k="x-tree-drag-append"}}if(this.lastInsertClass!=k){Ext.fly(a).replaceClass(this.lastInsertClass,k);this.lastInsertClass=k}}}return d},onNodeOut:function(d,a,c,b){this.cancelExpand();this.removeDropIndicators(d)},onNodeDrop:function(i,b,h,d){var a=this.getDropPoint(h,i,b);var g=i.node;g.ui.startDrop();if(!this.isValidDropPoint(i,a,b,h,d)){g.ui.endDrop();return false}var c=d.node||(b.getTreeNode?b.getTreeNode(d,g,a,h):null);return this.processDrop(g,d,a,b,h,c)},onContainerDrop:function(a,g,c){if(this.allowContainerDrop&&this.isValidDropPoint({ddel:this.tree.getRootNode().ui.elNode,node:this.tree.getRootNode()},"append",a,g,c)){var d=this.tree.getRootNode();d.ui.startDrop();var b=c.node||(a.getTreeNode?a.getTreeNode(c,d,"append",g):null);return this.processDrop(d,c,"append",a,g,b)}return false},processDrop:function(k,h,b,a,i,d){var g={tree:this.tree,target:k,data:h,point:b,source:a,rawEvent:i,dropNode:d,cancel:!d,dropStatus:false};var c=this.tree.fireEvent("beforenodedrop",g);if(c===false||g.cancel===true||!g.dropNode){k.ui.endDrop();return g.dropStatus}k=g.target;if(b=="append"&&!k.isExpanded()){k.expand(false,null,function(){this.completeDrop(g)}.createDelegate(this))}else{this.completeDrop(g)}return true},completeDrop:function(h){var d=h.dropNode,e=h.point,c=h.target;if(!Ext.isArray(d)){d=[d]}var g;for(var b=0,a=d.length;b<a;b++){g=d[b];if(e=="above"){c.parentNode.insertBefore(g,c)}else{if(e=="below"){c.parentNode.insertBefore(g,c.nextSibling)}else{c.appendChild(g)}}}g.ui.focus();if(Ext.enableFx&&this.tree.hlDrop){g.ui.highlight()}c.ui.endDrop();this.tree.fireEvent("nodedrop",h)},afterNodeMoved:function(a,c,g,d,b){if(Ext.enableFx&&this.tree.hlDrop){b.ui.focus();b.ui.highlight()}this.tree.fireEvent("nodedrop",this.tree,d,c,a,g)},getTree:function(){return this.tree},removeDropIndicators:function(b){if(b&&b.ddel){var a=b.ddel;Ext.fly(a).removeClass(["x-tree-drag-insert-above","x-tree-drag-insert-below","x-tree-drag-append"]);this.lastInsertClass="_noclass"}},beforeDragDrop:function(b,a,c){this.cancelExpand();return true},afterRepair:function(a){if(a&&Ext.enableFx){a.node.ui.highlight()}this.hideProxy()}})}if(Ext.dd.DragZone){Ext.tree.TreeDragZone=function(a,b){Ext.tree.TreeDragZone.superclass.constructor.call(this,a.innerCt,b);this.tree=a};Ext.extend(Ext.tree.TreeDragZone,Ext.dd.DragZone,{ddGroup:"TreeDD",onBeforeDrag:function(a,b){var c=a.node;return c&&c.draggable&&!c.disabled},onInitDrag:function(b){var a=this.dragData;this.tree.getSelectionModel().select(a.node);this.tree.eventModel.disable();this.proxy.update("");a.node.ui.appendDDGhost(this.proxy.ghost.dom);this.tree.fireEvent("startdrag",this.tree,a.node,b)},getRepairXY:function(b,a){return a.node.ui.getDDRepairXY()},onEndDrag:function(a,b){this.tree.eventModel.enable.defer(100,this.tree.eventModel);this.tree.fireEvent("enddrag",this.tree,a.node,b)},onValidDrop:function(a,b,c){this.tree.fireEvent("dragdrop",this.tree,this.dragData.node,a,b);this.hideProxy()},beforeInvalidDrop:function(a,c){var b=this.tree.getSelectionModel();b.clearSelections();b.select(this.dragData.node)},afterRepair:function(){if(Ext.enableFx&&this.tree.hlDrop){Ext.Element.fly(this.dragData.ddel).highlight(this.hlColor||"c3daf9")}this.dragging=false}})}Ext.tree.TreeEditor=function(a,c,b){c=c||{};var d=c.events?c:new Ext.form.TextField(c);Ext.tree.TreeEditor.superclass.constructor.call(this,d,b);this.tree=a;if(!a.rendered){a.on("render",this.initEditor,this)}else{this.initEditor(a)}};Ext.extend(Ext.tree.TreeEditor,Ext.Editor,{alignment:"l-l",autoSize:false,hideEl:false,cls:"x-small-editor x-tree-editor",shim:false,shadow:"frame",maxWidth:250,editDelay:350,initEditor:function(a){a.on({scope:this,beforeclick:this.beforeNodeClick,dblclick:this.onNodeDblClick});this.on({scope:this,complete:this.updateNode,beforestartedit:this.fitToTree,specialkey:this.onSpecialKey});this.on("startedit",this.bindScroll,this,{delay:10})},fitToTree:function(b,c){var e=this.tree.getTreeEl().dom,d=c.dom;if(e.scrollLeft>d.offsetLeft){e.scrollLeft=d.offsetLeft}var a=Math.min(this.maxWidth,(e.clientWidth>20?e.clientWidth:e.offsetWidth)-Math.max(0,d.offsetLeft-e.scrollLeft)-5);this.setSize(a,"")},triggerEdit:function(a,c){this.completeEdit();if(a.attributes.editable!==false){this.editNode=a;if(this.tree.autoScroll){Ext.fly(a.ui.getEl()).scrollIntoView(this.tree.body)}var b=a.text||"";if(!Ext.isGecko&&Ext.isEmpty(a.text)){a.setText(" ")}this.autoEditTimer=this.startEdit.defer(this.editDelay,this,[a.ui.textNode,b]);return false}},bindScroll:function(){this.tree.getTreeEl().on("scroll",this.cancelEdit,this)},beforeNodeClick:function(a,b){clearTimeout(this.autoEditTimer);if(this.tree.getSelectionModel().isSelected(a)){b.stopEvent();return this.triggerEdit(a)}},onNodeDblClick:function(a,b){clearTimeout(this.autoEditTimer)},updateNode:function(a,b){this.tree.getTreeEl().un("scroll",this.cancelEdit,this);this.editNode.setText(b)},onHide:function(){Ext.tree.TreeEditor.superclass.onHide.call(this);if(this.editNode){this.editNode.ui.focus.defer(50,this.editNode.ui)}},onSpecialKey:function(c,b){var a=b.getKey();if(a==b.ESC){b.stopEvent();this.cancelEdit()}else{if(a==b.ENTER&&!b.hasModifier()){b.stopEvent();this.completeEdit()}}},onDestroy:function(){clearTimeout(this.autoEditTimer);Ext.tree.TreeEditor.superclass.onDestroy.call(this);var a=this.tree;a.un("beforeclick",this.beforeNodeClick,this);a.un("dblclick",this.onNodeDblClick,this)}}); -/* SWFObject v2.2 <http://code.google.com/p/swfobject/> - is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> +/* SWFObject v2.2 <http://code.google.com/p/swfobject/> + is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> */ var swfobject=function(){var F="undefined",t="object",U="Shockwave Flash",Y="ShockwaveFlash.ShockwaveFlash",s="application/x-shockwave-flash",T="SWFObjectExprInst",z="onreadystatechange",Q=window,l=document,v=navigator,V=false,W=[i],q=[],P=[],K=[],n,S,G,D,L=false,a=false,p,I,o=true,O=function(){var ac=typeof l.getElementById!=F&&typeof l.getElementsByTagName!=F&&typeof l.createElement!=F,aj=v.userAgent.toLowerCase(),aa=v.platform.toLowerCase(),ag=aa?(/win/).test(aa):/win/.test(aj),ae=aa?(/mac/).test(aa):/mac/.test(aj),ah=/webkit/.test(aj)?parseFloat(aj.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,Z=!+"\v1",ai=[0,0,0],ad=null;if(typeof v.plugins!=F&&typeof v.plugins[U]==t){ad=v.plugins[U].description;if(ad&&!(typeof v.mimeTypes!=F&&v.mimeTypes[s]&&!v.mimeTypes[s].enabledPlugin)){V=true;Z=false;ad=ad.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ai[0]=parseInt(ad.replace(/^(.*)\..*$/,"$1"),10);ai[1]=parseInt(ad.replace(/^.*\.(.*)\s.*$/,"$1"),10);ai[2]=/[a-zA-Z]/.test(ad)?parseInt(ad.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof Q.ActiveXObject!=F){try{var af=new ActiveXObject(Y);if(af){ad=af.GetVariable("$version");if(ad){Z=true;ad=ad.split(" ")[1].split(",");ai=[parseInt(ad[0],10),parseInt(ad[1],10),parseInt(ad[2],10)]}}}catch(ab){}}}return{w3:ac,pv:ai,wk:ah,ie:Z,win:ag,mac:ae}}(),m=function(){if(!O.w3){return}if((typeof l.readyState!=F&&l.readyState=="complete")||(typeof l.readyState==F&&(l.getElementsByTagName("body")[0]||l.body))){g()}if(!L){if(typeof l.addEventListener!=F){l.addEventListener("DOMContentLoaded",g,false)}if(O.ie&&O.win){l.attachEvent(z,function(){if(l.readyState=="complete"){l.detachEvent(z,arguments.callee);g()}});if(Q==top){(function(){if(L){return}try{l.documentElement.doScroll("left")}catch(Z){setTimeout(arguments.callee,0);return}g()})()}}if(O.wk){(function(){if(L){return}if(!(/loaded|complete/).test(l.readyState)){setTimeout(arguments.callee,0);return}g()})()}u(g)}}();function g(){if(L){return}try{var ab=l.getElementsByTagName("body")[0].appendChild(E("span"));ab.parentNode.removeChild(ab)}catch(ac){return}L=true;var Z=W.length;for(var aa=0;aa<Z;aa++){W[aa]()}}function M(Z){if(L){Z()}else{W[W.length]=Z}}function u(aa){if(typeof Q.addEventListener!=F){Q.addEventListener("load",aa,false)}else{if(typeof l.addEventListener!=F){l.addEventListener("load",aa,false)}else{if(typeof Q.attachEvent!=F){k(Q,"onload",aa)}else{if(typeof Q.onload=="function"){var Z=Q.onload;Q.onload=function(){Z();aa()}}else{Q.onload=aa}}}}}function i(){if(V){X()}else{J()}}function X(){var Z=l.getElementsByTagName("body")[0];var ac=E(t);ac.setAttribute("type",s);var ab=Z.appendChild(ac);if(ab){var aa=0;(function(){if(typeof ab.GetVariable!=F){var ad=ab.GetVariable("$version");if(ad){ad=ad.split(" ")[1].split(",");O.pv=[parseInt(ad[0],10),parseInt(ad[1],10),parseInt(ad[2],10)]}}else{if(aa<10){aa++;setTimeout(arguments.callee,10);return}}Z.removeChild(ac);ab=null;J()})()}else{J()}}function J(){var ai=q.length;if(ai>0){for(var ah=0;ah<ai;ah++){var aa=q[ah].id;var ad=q[ah].callbackFn;var ac={success:false,id:aa};if(O.pv[0]>0){var ag=c(aa);if(ag){if(H(q[ah].swfVersion)&&!(O.wk&&O.wk<312)){y(aa,true);if(ad){ac.success=true;ac.ref=B(aa);ad(ac)}}else{if(q[ah].expressInstall&&C()){var ak={};ak.data=q[ah].expressInstall;ak.width=ag.getAttribute("width")||"0";ak.height=ag.getAttribute("height")||"0";if(ag.getAttribute("class")){ak.styleclass=ag.getAttribute("class")}if(ag.getAttribute("align")){ak.align=ag.getAttribute("align")}var aj={};var Z=ag.getElementsByTagName("param");var ae=Z.length;for(var af=0;af<ae;af++){if(Z[af].getAttribute("name").toLowerCase()!="movie"){aj[Z[af].getAttribute("name")]=Z[af].getAttribute("value")}}R(ak,aj,aa,ad)}else{r(ag);if(ad){ad(ac)}}}}}else{y(aa,true);if(ad){var ab=B(aa);if(ab&&typeof ab.SetVariable!=F){ac.success=true;ac.ref=ab}ad(ac)}}}}}function B(ac){var Z=null;var aa=c(ac);if(aa&&aa.nodeName=="OBJECT"){if(typeof aa.SetVariable!=F){Z=aa}else{var ab=aa.getElementsByTagName(t)[0];if(ab){Z=ab}}}return Z}function C(){return !a&&H("6.0.65")&&(O.win||O.mac)&&!(O.wk&&O.wk<312)}function R(ac,ad,Z,ab){a=true;G=ab||null;D={success:false,id:Z};var ag=c(Z);if(ag){if(ag.nodeName=="OBJECT"){n=h(ag);S=null}else{n=ag;S=Z}ac.id=T;if(typeof ac.width==F||(!(/%$/).test(ac.width)&&parseInt(ac.width,10)<310)){ac.width="310"}if(typeof ac.height==F||(!(/%$/).test(ac.height)&&parseInt(ac.height,10)<137)){ac.height="137"}l.title=l.title.slice(0,47)+" - Flash Player Installation";var af=O.ie&&O.win?"ActiveX":"PlugIn",ae="MMredirectURL="+Q.location.toString().replace(/&/g,"%26")+"&MMplayerType="+af+"&MMdoctitle="+l.title;if(typeof ad.flashvars!=F){ad.flashvars+="&"+ae}else{ad.flashvars=ae}if(O.ie&&O.win&&ag.readyState!=4){var aa=E("div");Z+="SWFObjectNew";aa.setAttribute("id",Z);ag.parentNode.insertBefore(aa,ag);ag.style.display="none";(function(){if(ag.readyState==4){ag.parentNode.removeChild(ag)}else{setTimeout(arguments.callee,10)}})()}w(ac,ad,Z)}}function r(aa){if(O.ie&&O.win&&aa.readyState!=4){var Z=E("div");aa.parentNode.insertBefore(Z,aa);Z.parentNode.replaceChild(h(aa),Z);aa.style.display="none";(function(){if(aa.readyState==4){aa.parentNode.removeChild(aa)}else{setTimeout(arguments.callee,10)}})()}else{aa.parentNode.replaceChild(h(aa),aa)}}function h(ae){var ad=E("div");if(O.win&&O.ie){ad.innerHTML=ae.innerHTML}else{var aa=ae.getElementsByTagName(t)[0];if(aa){var af=aa.childNodes;if(af){var Z=af.length;for(var ab=0;ab<Z;ab++){if(!(af[ab].nodeType==1&&af[ab].nodeName=="PARAM")&&!(af[ab].nodeType==8)){ad.appendChild(af[ab].cloneNode(true))}}}}}return ad}function w(ak,ai,aa){var Z,ac=c(aa);if(O.wk&&O.wk<312){return Z}if(ac){if(typeof ak.id==F){ak.id=aa}if(O.ie&&O.win){var aj="";for(var ag in ak){if(ak[ag]!=Object.prototype[ag]){if(ag.toLowerCase()=="data"){ai.movie=ak[ag]}else{if(ag.toLowerCase()=="styleclass"){aj+=' class="'+ak[ag]+'"'}else{if(ag.toLowerCase()!="classid"){aj+=" "+ag+'="'+ak[ag]+'"'}}}}}var ah="";for(var af in ai){if(ai[af]!=Object.prototype[af]){ah+='<param name="'+af+'" value="'+ai[af]+'" />'}}ac.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+aj+">"+ah+"</object>";P[P.length]=ak.id;Z=c(ak.id)}else{var ab=E(t);ab.setAttribute("type",s);for(var ae in ak){if(ak[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="styleclass"){ab.setAttribute("class",ak[ae])}else{if(ae.toLowerCase()!="classid"){ab.setAttribute(ae,ak[ae])}}}}for(var ad in ai){if(ai[ad]!=Object.prototype[ad]&&ad.toLowerCase()!="movie"){e(ab,ad,ai[ad])}}ac.parentNode.replaceChild(ab,ac);Z=ab}}return Z}function e(ab,Z,aa){var ac=E("param");ac.setAttribute("name",Z);ac.setAttribute("value",aa);ab.appendChild(ac)}function A(aa){var Z=c(aa);if(Z&&Z.nodeName=="OBJECT"){if(O.ie&&O.win){Z.style.display="none";(function(){if(Z.readyState==4){b(aa)}else{setTimeout(arguments.callee,10)}})()}else{Z.parentNode.removeChild(Z)}}}function b(ab){var aa=c(ab);if(aa){for(var Z in aa){if(typeof aa[Z]=="function"){aa[Z]=null}}aa.parentNode.removeChild(aa)}}function c(ab){var Z=null;try{Z=l.getElementById(ab)}catch(aa){}return Z}function E(Z){return l.createElement(Z)}function k(ab,Z,aa){ab.attachEvent(Z,aa);K[K.length]=[ab,Z,aa]}function H(ab){var aa=O.pv,Z=ab.split(".");Z[0]=parseInt(Z[0],10);Z[1]=parseInt(Z[1],10)||0;Z[2]=parseInt(Z[2],10)||0;return(aa[0]>Z[0]||(aa[0]==Z[0]&&aa[1]>Z[1])||(aa[0]==Z[0]&&aa[1]==Z[1]&&aa[2]>=Z[2]))?true:false}function x(ae,aa,af,ad){if(O.ie&&O.mac){return}var ac=l.getElementsByTagName("head")[0];if(!ac){return}var Z=(af&&typeof af=="string")?af:"screen";if(ad){p=null;I=null}if(!p||I!=Z){var ab=E("style");ab.setAttribute("type","text/css");ab.setAttribute("media",Z);p=ac.appendChild(ab);if(O.ie&&O.win&&typeof l.styleSheets!=F&&l.styleSheets.length>0){p=l.styleSheets[l.styleSheets.length-1]}I=Z}if(O.ie&&O.win){if(p&&typeof p.addRule==t){p.addRule(ae,aa)}}else{if(p&&typeof l.createTextNode!=F){p.appendChild(l.createTextNode(ae+" {"+aa+"}"))}}}function y(ab,Z){if(!o){return}var aa=Z?"visible":"hidden";if(L&&c(ab)){c(ab).style.visibility=aa}else{x("#"+ab,"visibility:"+aa)}}function N(aa){var ab=/[\\\"<>\.;]/;var Z=ab.exec(aa)!=null;return Z&&typeof encodeURIComponent!=F?encodeURIComponent(aa):aa}var d=function(){if(O.ie&&O.win){window.attachEvent("onunload",function(){var ae=K.length;for(var ad=0;ad<ae;ad++){K[ad][0].detachEvent(K[ad][1],K[ad][2])}var ab=P.length;for(var ac=0;ac<ab;ac++){A(P[ac])}for(var aa in O){O[aa]=null}O=null;for(var Z in swfobject){swfobject[Z]=null}swfobject=null})}}();return{registerObject:function(ad,Z,ac,ab){if(O.w3&&ad&&Z){var aa={};aa.id=ad;aa.swfVersion=Z;aa.expressInstall=ac;aa.callbackFn=ab;q[q.length]=aa;y(ad,false)}else{if(ab){ab({success:false,id:ad})}}},getObjectById:function(Z){if(O.w3){return B(Z)}},embedSWF:function(ad,aj,ag,ai,aa,ac,ab,af,ah,ae){var Z={success:false,id:aj};if(O.w3&&!(O.wk&&O.wk<312)&&ad&&aj&&ag&&ai&&aa){y(aj,false);M(function(){ag+="";ai+="";var al={};if(ah&&typeof ah===t){for(var an in ah){al[an]=ah[an]}}al.data=ad;al.width=ag;al.height=ai;var ao={};if(af&&typeof af===t){for(var am in af){ao[am]=af[am]}}if(ab&&typeof ab===t){for(var ak in ab){if(typeof ao.flashvars!=F){ao.flashvars+="&"+ak+"="+ab[ak]}else{ao.flashvars=ak+"="+ab[ak]}}}if(H(aa)){var ap=w(al,ao,aj);if(al.id==aj){y(aj,true)}Z.success=true;Z.ref=ap}else{if(ac&&C()){al.data=ac;R(al,ao,aj,ae);return}else{y(aj,true)}}if(ae){ae(Z)}})}else{if(ae){ae(Z)}}},switchOffAutoHideShow:function(){o=false},ua:O,getFlashPlayerVersion:function(){return{major:O.pv[0],minor:O.pv[1],release:O.pv[2]}},hasFlashPlayerVersion:H,createSWF:function(ab,aa,Z){if(O.w3){return w(ab,aa,Z)}else{return undefined}},showExpressInstall:function(ab,ac,Z,aa){if(O.w3&&C()){R(ab,ac,Z,aa)}},removeSWF:function(Z){if(O.w3){A(Z)}},createCSS:function(ac,ab,aa,Z){if(O.w3){x(ac,ab,aa,Z)}},addDomLoadEvent:M,addLoadEvent:u,getQueryParamValue:function(ac){var ab=l.location.search||l.location.hash;if(ab){if(/\?/.test(ab)){ab=ab.split("?")[1]}if(ac==null){return N(ab)}var aa=ab.split("&");for(var Z=0;Z<aa.length;Z++){if(aa[Z].substring(0,aa[Z].indexOf("="))==ac){return N(aa[Z].substring((aa[Z].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var Z=c(T);if(Z&&n){Z.parentNode.replaceChild(n,Z);if(S){y(S,true);if(O.ie&&O.win){n.style.display="block"}}if(G){G(D)}}a=false}}}}();Ext.FlashComponent=Ext.extend(Ext.BoxComponent,{flashVersion:"9.0.115",backgroundColor:"#ffffff",wmode:"opaque",flashVars:undefined,flashParams:undefined,url:undefined,swfId:undefined,swfWidth:"100%",swfHeight:"100%",expressInstall:false,initComponent:function(){Ext.FlashComponent.superclass.initComponent.call(this);this.addEvents("initialize")},onRender:function(){Ext.FlashComponent.superclass.onRender.apply(this,arguments);var b=Ext.apply({allowScriptAccess:"always",bgcolor:this.backgroundColor,wmode:this.wmode},this.flashParams),a=Ext.apply({allowedDomain:document.location.hostname,YUISwfId:this.getId(),YUIBridgeCallback:"Ext.FlashEventProxy.onEvent"},this.flashVars);new swfobject.embedSWF(this.url,this.id,this.swfWidth,this.swfHeight,this.flashVersion,this.expressInstall?Ext.FlashComponent.EXPRESS_INSTALL_URL:undefined,a,b);this.swf=Ext.getDom(this.id);this.el=Ext.get(this.swf)},getSwfId:function(){return this.swfId||(this.swfId="extswf"+(++Ext.Component.AUTO_ID))},getId:function(){return this.id||(this.id="extflashcmp"+(++Ext.Component.AUTO_ID))},onFlashEvent:function(a){switch(a.type){case"swfReady":this.initSwf();return;case"log":return}a.component=this;this.fireEvent(a.type.toLowerCase().replace(/event$/,""),a)},initSwf:function(){this.onSwfReady(!!this.isInitialized);this.isInitialized=true;this.fireEvent("initialize",this)},beforeDestroy:function(){if(this.rendered){swfobject.removeSWF(this.swf.id)}Ext.FlashComponent.superclass.beforeDestroy.call(this)},onSwfReady:Ext.emptyFn});Ext.FlashComponent.EXPRESS_INSTALL_URL="http://swfobject.googlecode.com/svn/trunk/swfobject/expressInstall.swf";Ext.reg("flash",Ext.FlashComponent);Ext.FlashEventProxy={onEvent:function(c,b){var a=Ext.getCmp(c);if(a){a.onFlashEvent(b)}else{arguments.callee.defer(10,this,[c,b])}}};Ext.chart.Chart=Ext.extend(Ext.FlashComponent,{refreshBuffer:100,chartStyle:{padding:10,animationEnabled:true,font:{name:"Tahoma",color:4473924,size:11},dataTip:{padding:5,border:{color:10075112,size:1},background:{color:14346230,alpha:0.9},font:{name:"Tahoma",color:1393291,size:10,bold:true}}},extraStyle:null,seriesStyles:null,disableCaching:Ext.isIE||Ext.isOpera,disableCacheParam:"_dc",initComponent:function(){Ext.chart.Chart.superclass.initComponent.call(this);if(!this.url){this.url=Ext.chart.Chart.CHART_URL}if(this.disableCaching){this.url=Ext.urlAppend(this.url,String.format("{0}={1}",this.disableCacheParam,new Date().getTime()))}this.addEvents("itemmouseover","itemmouseout","itemclick","itemdoubleclick","itemdragstart","itemdrag","itemdragend","beforerefresh","refresh");this.store=Ext.StoreMgr.lookup(this.store)},setStyle:function(a,b){this.swf.setStyle(a,Ext.encode(b))},setStyles:function(a){this.swf.setStyles(Ext.encode(a))},setSeriesStyles:function(b){this.seriesStyles=b;var a=[];Ext.each(b,function(c){a.push(Ext.encode(c))});this.swf.setSeriesStyles(a)},setCategoryNames:function(a){this.swf.setCategoryNames(a)},setLegendRenderer:function(c,b){var a=this;b=b||a;a.removeFnProxy(a.legendFnName);a.legendFnName=a.createFnProxy(function(d){return c.call(b,d)});a.swf.setLegendLabelFunction(a.legendFnName)},setTipRenderer:function(c,b){var a=this;b=b||a;a.removeFnProxy(a.tipFnName);a.tipFnName=a.createFnProxy(function(h,e,g){var d=a.store.getAt(e);return c.call(b,a,d,e,g)});a.swf.setDataTipFunction(a.tipFnName)},setSeries:function(a){this.series=a;this.refresh()},bindStore:function(a,b){if(!b&&this.store){if(a!==this.store&&this.store.autoDestroy){this.store.destroy()}else{this.store.un("datachanged",this.refresh,this);this.store.un("add",this.delayRefresh,this);this.store.un("remove",this.delayRefresh,this);this.store.un("update",this.delayRefresh,this);this.store.un("clear",this.refresh,this)}}if(a){a=Ext.StoreMgr.lookup(a);a.on({scope:this,datachanged:this.refresh,add:this.delayRefresh,remove:this.delayRefresh,update:this.delayRefresh,clear:this.refresh})}this.store=a;if(a&&!b){this.refresh()}},onSwfReady:function(b){Ext.chart.Chart.superclass.onSwfReady.call(this,b);var a;this.swf.setType(this.type);if(this.chartStyle){this.setStyles(Ext.apply({},this.extraStyle,this.chartStyle))}if(this.categoryNames){this.setCategoryNames(this.categoryNames)}if(this.tipRenderer){a=this.getFunctionRef(this.tipRenderer);this.setTipRenderer(a.fn,a.scope)}if(this.legendRenderer){a=this.getFunctionRef(this.legendRenderer);this.setLegendRenderer(a.fn,a.scope)}if(!b){this.bindStore(this.store,true)}this.refresh.defer(10,this)},delayRefresh:function(){if(!this.refreshTask){this.refreshTask=new Ext.util.DelayedTask(this.refresh,this)}this.refreshTask.delay(this.refreshBuffer)},refresh:function(){if(this.fireEvent("beforerefresh",this)!==false){var m=false;var k=[],c=this.store.data.items;for(var g=0,l=c.length;g<l;g++){k[g]=c[g].data}var e=[];var d=0;var n=null;var h=0;if(this.series){d=this.series.length;for(h=0;h<d;h++){n=this.series[h];var b={};for(var a in n){if(a=="style"&&n.style!==null){b.style=Ext.encode(n.style);m=true}else{b[a]=n[a]}}e.push(b)}}if(d>0){for(h=0;h<d;h++){n=e[h];if(!n.type){n.type=this.type}n.dataProvider=k}}else{e.push({type:this.type,dataProvider:k})}this.swf.setDataProvider(e);if(this.seriesStyles){this.setSeriesStyles(this.seriesStyles)}this.fireEvent("refresh",this)}},createFnProxy:function(a){var b="extFnProxy"+(++Ext.chart.Chart.PROXY_FN_ID);Ext.chart.Chart.proxyFunction[b]=a;return"Ext.chart.Chart.proxyFunction."+b},removeFnProxy:function(a){if(!Ext.isEmpty(a)){a=a.replace("Ext.chart.Chart.proxyFunction.","");delete Ext.chart.Chart.proxyFunction[a]}},getFunctionRef:function(a){if(Ext.isFunction(a)){return{fn:a,scope:this}}else{return{fn:a.fn,scope:a.scope||this}}},onDestroy:function(){if(this.refreshTask&&this.refreshTask.cancel){this.refreshTask.cancel()}Ext.chart.Chart.superclass.onDestroy.call(this);this.bindStore(null);this.removeFnProxy(this.tipFnName);this.removeFnProxy(this.legendFnName)}});Ext.reg("chart",Ext.chart.Chart);Ext.chart.Chart.PROXY_FN_ID=0;Ext.chart.Chart.proxyFunction={};Ext.chart.Chart.CHART_URL="http://yui.yahooapis.com/2.8.2/build/charts/assets/charts.swf";Ext.chart.PieChart=Ext.extend(Ext.chart.Chart,{type:"pie",onSwfReady:function(a){Ext.chart.PieChart.superclass.onSwfReady.call(this,a);this.setDataField(this.dataField);this.setCategoryField(this.categoryField)},setDataField:function(a){this.dataField=a;this.swf.setDataField(a)},setCategoryField:function(a){this.categoryField=a;this.swf.setCategoryField(a)}});Ext.reg("piechart",Ext.chart.PieChart);Ext.chart.CartesianChart=Ext.extend(Ext.chart.Chart,{onSwfReady:function(a){Ext.chart.CartesianChart.superclass.onSwfReady.call(this,a);this.labelFn=[];if(this.xField){this.setXField(this.xField)}if(this.yField){this.setYField(this.yField)}if(this.xAxis){this.setXAxis(this.xAxis)}if(this.xAxes){this.setXAxes(this.xAxes)}if(this.yAxis){this.setYAxis(this.yAxis)}if(this.yAxes){this.setYAxes(this.yAxes)}if(Ext.isDefined(this.constrainViewport)){this.swf.setConstrainViewport(this.constrainViewport)}},setXField:function(a){this.xField=a;this.swf.setHorizontalField(a)},setYField:function(a){this.yField=a;this.swf.setVerticalField(a)},setXAxis:function(a){this.xAxis=this.createAxis("xAxis",a);this.swf.setHorizontalAxis(this.xAxis)},setXAxes:function(c){var b;for(var a=0;a<c.length;a++){b=this.createAxis("xAxis"+a,c[a]);this.swf.setHorizontalAxis(b)}},setYAxis:function(a){this.yAxis=this.createAxis("yAxis",a);this.swf.setVerticalAxis(this.yAxis)},setYAxes:function(c){var b;for(var a=0;a<c.length;a++){b=this.createAxis("yAxis"+a,c[a]);this.swf.setVerticalAxis(b)}},createAxis:function(b,d){var e=Ext.apply({},d),c,a;if(this[b]){a=this[b].labelFunction;this.removeFnProxy(a);this.labelFn.remove(a)}if(e.labelRenderer){c=this.getFunctionRef(e.labelRenderer);e.labelFunction=this.createFnProxy(function(g){return c.fn.call(c.scope,g)});delete e.labelRenderer;this.labelFn.push(e.labelFunction)}if(b.indexOf("xAxis")>-1&&e.position=="left"){e.position="bottom"}return e},onDestroy:function(){Ext.chart.CartesianChart.superclass.onDestroy.call(this);Ext.each(this.labelFn,function(a){this.removeFnProxy(a)},this)}});Ext.reg("cartesianchart",Ext.chart.CartesianChart);Ext.chart.LineChart=Ext.extend(Ext.chart.CartesianChart,{type:"line"});Ext.reg("linechart",Ext.chart.LineChart);Ext.chart.ColumnChart=Ext.extend(Ext.chart.CartesianChart,{type:"column"});Ext.reg("columnchart",Ext.chart.ColumnChart);Ext.chart.StackedColumnChart=Ext.extend(Ext.chart.CartesianChart,{type:"stackcolumn"});Ext.reg("stackedcolumnchart",Ext.chart.StackedColumnChart);Ext.chart.BarChart=Ext.extend(Ext.chart.CartesianChart,{type:"bar"});Ext.reg("barchart",Ext.chart.BarChart);Ext.chart.StackedBarChart=Ext.extend(Ext.chart.CartesianChart,{type:"stackbar"});Ext.reg("stackedbarchart",Ext.chart.StackedBarChart);Ext.chart.Axis=function(a){Ext.apply(this,a)};Ext.chart.Axis.prototype={type:null,orientation:"horizontal",reverse:false,labelFunction:null,hideOverlappingLabels:true,labelSpacing:2};Ext.chart.NumericAxis=Ext.extend(Ext.chart.Axis,{type:"numeric",minimum:NaN,maximum:NaN,majorUnit:NaN,minorUnit:NaN,snapToUnits:true,alwaysShowZero:true,scale:"linear",roundMajorUnit:true,calculateByLabelSize:true,position:"left",adjustMaximumByMajorUnit:true,adjustMinimumByMajorUnit:true});Ext.chart.TimeAxis=Ext.extend(Ext.chart.Axis,{type:"time",minimum:null,maximum:null,majorUnit:NaN,majorTimeUnit:null,minorUnit:NaN,minorTimeUnit:null,snapToUnits:true,stackingEnabled:false,calculateByLabelSize:true});Ext.chart.CategoryAxis=Ext.extend(Ext.chart.Axis,{type:"category",categoryNames:null,calculateCategoryCount:false});Ext.chart.Series=function(a){Ext.apply(this,a)};Ext.chart.Series.prototype={type:null,displayName:null};Ext.chart.CartesianSeries=Ext.extend(Ext.chart.Series,{xField:null,yField:null,showInLegend:true,axis:"primary"});Ext.chart.ColumnSeries=Ext.extend(Ext.chart.CartesianSeries,{type:"column"});Ext.chart.LineSeries=Ext.extend(Ext.chart.CartesianSeries,{type:"line"});Ext.chart.BarSeries=Ext.extend(Ext.chart.CartesianSeries,{type:"bar"});Ext.chart.PieSeries=Ext.extend(Ext.chart.Series,{type:"pie",dataField:null,categoryField:null});Ext.menu.Menu=Ext.extend(Ext.Container,{minWidth:120,shadow:"sides",subMenuAlign:"tl-tr?",defaultAlign:"tl-bl?",allowOtherMenus:false,ignoreParentClicks:false,enableScrolling:true,maxHeight:null,scrollIncrement:24,showSeparator:true,defaultOffsets:[0,0],plain:false,floating:true,zIndex:15000,hidden:true,layout:"menu",hideMode:"offsets",scrollerHeight:8,autoLayout:true,defaultType:"menuitem",bufferResize:false,initComponent:function(){if(Ext.isArray(this.initialConfig)){Ext.apply(this,{items:this.initialConfig})}this.addEvents("click","mouseover","mouseout","itemclick");Ext.menu.MenuMgr.register(this);if(this.floating){Ext.EventManager.onWindowResize(this.hide,this)}else{if(this.initialConfig.hidden!==false){this.hidden=false}this.internalDefaults={hideOnClick:false}}Ext.menu.Menu.superclass.initComponent.call(this);if(this.autoLayout){var a=this.doLayout.createDelegate(this,[]);this.on({add:a,remove:a})}},getLayoutTarget:function(){return this.ul},onRender:function(b,a){if(!b){b=Ext.getBody()}var c={id:this.getId(),cls:"x-menu "+((this.floating)?"x-menu-floating x-layer ":"")+(this.cls||"")+(this.plain?" x-menu-plain":"")+(this.showSeparator?"":" x-menu-nosep"),style:this.style,cn:[{tag:"a",cls:"x-menu-focus",href:"#",onclick:"return false;",tabIndex:"-1"},{tag:"ul",cls:"x-menu-list"}]};if(this.floating){this.el=new Ext.Layer({shadow:this.shadow,dh:c,constrain:false,parentEl:b,zindex:this.zIndex})}else{this.el=b.createChild(c)}Ext.menu.Menu.superclass.onRender.call(this,b,a);if(!this.keyNav){this.keyNav=new Ext.menu.MenuNav(this)}this.focusEl=this.el.child("a.x-menu-focus");this.ul=this.el.child("ul.x-menu-list");this.mon(this.ul,{scope:this,click:this.onClick,mouseover:this.onMouseOver,mouseout:this.onMouseOut});if(this.enableScrolling){this.mon(this.el,{scope:this,delegate:".x-menu-scroller",click:this.onScroll,mouseover:this.deactivateActive})}},findTargetItem:function(b){var a=b.getTarget(".x-menu-list-item",this.ul,true);if(a&&a.menuItemId){return this.items.get(a.menuItemId)}},onClick:function(b){var a=this.findTargetItem(b);if(a){if(a.isFormField){this.setActiveItem(a)}else{if(a instanceof Ext.menu.BaseItem){if(a.menu&&this.ignoreParentClicks){a.expandMenu();b.preventDefault()}else{if(a.onClick){a.onClick(b);this.fireEvent("click",this,a,b)}}}}}},setActiveItem:function(a,b){if(a!=this.activeItem){this.deactivateActive();if((this.activeItem=a).isFormField){a.focus()}else{a.activate(b)}}else{if(b){a.expandMenu()}}},deactivateActive:function(){var b=this.activeItem;if(b){if(b.isFormField){if(b.collapse){b.collapse()}}else{b.deactivate()}delete this.activeItem}},tryActivate:function(g,e){var b=this.items;for(var c=g,a=b.length;c>=0&&c<a;c+=e){var d=b.get(c);if(d.isVisible()&&!d.disabled&&(d.canActivate||d.isFormField)){this.setActiveItem(d,false);return d}}return false},onMouseOver:function(b){var a=this.findTargetItem(b);if(a){if(a.canActivate&&!a.disabled){this.setActiveItem(a,true)}}this.over=true;this.fireEvent("mouseover",this,b,a)},onMouseOut:function(b){var a=this.findTargetItem(b);if(a){if(a==this.activeItem&&a.shouldDeactivate&&a.shouldDeactivate(b)){this.activeItem.deactivate();delete this.activeItem}}this.over=false;this.fireEvent("mouseout",this,b,a)},onScroll:function(d,b){if(d){d.stopEvent()}var a=this.ul.dom,c=Ext.fly(b).is(".x-menu-scroller-top");a.scrollTop+=this.scrollIncrement*(c?-1:1);if(c?a.scrollTop<=0:a.scrollTop+this.activeMax>=a.scrollHeight){this.onScrollerOut(null,b)}},onScrollerIn:function(d,b){var a=this.ul.dom,c=Ext.fly(b).is(".x-menu-scroller-top");if(c?a.scrollTop>0:a.scrollTop+this.activeMax<a.scrollHeight){Ext.fly(b).addClass(["x-menu-item-active","x-menu-scroller-active"])}},onScrollerOut:function(b,a){Ext.fly(a).removeClass(["x-menu-item-active","x-menu-scroller-active"])},show:function(b,c,a){if(this.floating){this.parentMenu=a;if(!this.el){this.render();this.doLayout(false,true)}this.showAt(this.el.getAlignToXY(b,c||this.defaultAlign,this.defaultOffsets),a)}else{Ext.menu.Menu.superclass.show.call(this)}},showAt:function(b,a){if(this.fireEvent("beforeshow",this)!==false){this.parentMenu=a;if(!this.el){this.render()}if(this.enableScrolling){this.el.setXY(b);b[1]=this.constrainScroll(b[1]);b=[this.el.adjustForConstraints(b)[0],b[1]]}else{b=this.el.adjustForConstraints(b)}this.el.setXY(b);this.el.show();Ext.menu.Menu.superclass.onShow.call(this);if(Ext.isIE){this.fireEvent("autosize",this);if(!Ext.isIE8){this.el.repaint()}}this.hidden=false;this.focus();this.fireEvent("show",this)}},constrainScroll:function(i){var b,d=this.ul.setHeight("auto").getHeight(),a=i,h,e,g,c;if(this.floating){e=Ext.fly(this.el.dom.parentNode);g=e.getScroll().top;c=e.getViewSize().height;h=i-g;b=this.maxHeight?this.maxHeight:c-h;if(d>c){b=c;a=i-h}else{if(b<d){a=i-(d-b);b=d}}}else{b=this.getHeight()}if(this.maxHeight){b=Math.min(this.maxHeight,b)}if(d>b&&b>0){this.activeMax=b-this.scrollerHeight*2-this.el.getFrameWidth("tb")-Ext.num(this.el.shadowOffset,0);this.ul.setHeight(this.activeMax);this.createScrollers();this.el.select(".x-menu-scroller").setDisplayed("")}else{this.ul.setHeight(d);this.el.select(".x-menu-scroller").setDisplayed("none")}this.ul.dom.scrollTop=0;return a},createScrollers:function(){if(!this.scroller){this.scroller={pos:0,top:this.el.insertFirst({tag:"div",cls:"x-menu-scroller x-menu-scroller-top",html:" "}),bottom:this.el.createChild({tag:"div",cls:"x-menu-scroller x-menu-scroller-bottom",html:" "})};this.scroller.top.hover(this.onScrollerIn,this.onScrollerOut,this);this.scroller.topRepeater=new Ext.util.ClickRepeater(this.scroller.top,{listeners:{click:this.onScroll.createDelegate(this,[null,this.scroller.top],false)}});this.scroller.bottom.hover(this.onScrollerIn,this.onScrollerOut,this);this.scroller.bottomRepeater=new Ext.util.ClickRepeater(this.scroller.bottom,{listeners:{click:this.onScroll.createDelegate(this,[null,this.scroller.bottom],false)}})}},onLayout:function(){if(this.isVisible()){if(this.enableScrolling){this.constrainScroll(this.el.getTop())}if(this.floating){this.el.sync()}}},focus:function(){if(!this.hidden){this.doFocus.defer(50,this)}},doFocus:function(){if(!this.hidden){this.focusEl.focus()}},hide:function(a){if(!this.isDestroyed){this.deepHide=a;Ext.menu.Menu.superclass.hide.call(this);delete this.deepHide}},onHide:function(){Ext.menu.Menu.superclass.onHide.call(this);this.deactivateActive();if(this.el&&this.floating){this.el.hide()}var a=this.parentMenu;if(this.deepHide===true&&a){if(a.floating){a.hide(true)}else{a.deactivateActive()}}},lookupComponent:function(a){if(Ext.isString(a)){a=(a=="separator"||a=="-")?new Ext.menu.Separator():new Ext.menu.TextItem(a);this.applyDefaults(a)}else{if(Ext.isObject(a)){a=this.getMenuItem(a)}else{if(a.tagName||a.el){a=new Ext.BoxComponent({el:a})}}}return a},applyDefaults:function(b){if(!Ext.isString(b)){b=Ext.menu.Menu.superclass.applyDefaults.call(this,b);var a=this.internalDefaults;if(a){if(b.events){Ext.applyIf(b.initialConfig,a);Ext.apply(b,a)}else{Ext.applyIf(b,a)}}}return b},getMenuItem:function(a){if(!a.isXType){if(!a.xtype&&Ext.isBoolean(a.checked)){return new Ext.menu.CheckItem(a)}return Ext.create(a,this.defaultType)}return a},addSeparator:function(){return this.add(new Ext.menu.Separator())},addElement:function(a){return this.add(new Ext.menu.BaseItem({el:a}))},addItem:function(a){return this.add(a)},addMenuItem:function(a){return this.add(this.getMenuItem(a))},addText:function(a){return this.add(new Ext.menu.TextItem(a))},onDestroy:function(){Ext.EventManager.removeResizeListener(this.hide,this);var a=this.parentMenu;if(a&&a.activeChild==this){delete a.activeChild}delete this.parentMenu;Ext.menu.Menu.superclass.onDestroy.call(this);Ext.menu.MenuMgr.unregister(this);if(this.keyNav){this.keyNav.disable()}var b=this.scroller;if(b){Ext.destroy(b.topRepeater,b.bottomRepeater,b.top,b.bottom)}Ext.destroy(this.el,this.focusEl,this.ul)}});Ext.reg("menu",Ext.menu.Menu);Ext.menu.MenuNav=Ext.extend(Ext.KeyNav,function(){function a(d,c){if(!c.tryActivate(c.items.indexOf(c.activeItem)-1,-1)){c.tryActivate(c.items.length-1,-1)}}function b(d,c){if(!c.tryActivate(c.items.indexOf(c.activeItem)+1,1)){c.tryActivate(0,1)}}return{constructor:function(c){Ext.menu.MenuNav.superclass.constructor.call(this,c.el);this.scope=this.menu=c},doRelay:function(g,d){var c=g.getKey();if(this.menu.activeItem&&this.menu.activeItem.isFormField&&c!=g.TAB){return false}if(!this.menu.activeItem&&g.isNavKeyPress()&&c!=g.SPACE&&c!=g.RETURN){this.menu.tryActivate(0,1);return false}return d.call(this.scope||this,g,this.menu)},tab:function(d,c){d.stopEvent();if(d.shiftKey){a(d,c)}else{b(d,c)}},up:a,down:b,right:function(d,c){if(c.activeItem){c.activeItem.expandMenu(true)}},left:function(d,c){c.hide();if(c.parentMenu&&c.parentMenu.activeItem){c.parentMenu.activeItem.activate()}},enter:function(d,c){if(c.activeItem){d.stopPropagation();c.activeItem.onClick(d);c.fireEvent("click",this,c.activeItem);return true}}}}());Ext.menu.MenuMgr=function(){var g,d,c={},a=false,l=new Date();function n(){g={};d=new Ext.util.MixedCollection();Ext.getDoc().addKeyListener(27,function(){if(d.length>0){i()}})}function i(){if(d&&d.length>0){var o=d.clone();o.each(function(p){p.hide()});return true}return false}function e(o){d.remove(o);if(d.length<1){Ext.getDoc().un("mousedown",m);a=false}}function k(o){var p=d.last();l=new Date();d.add(o);if(!a){Ext.getDoc().on("mousedown",m);a=true}if(o.parentMenu){o.getEl().setZIndex(parseInt(o.parentMenu.getEl().getStyle("z-index"),10)+3);o.parentMenu.activeChild=o}else{if(p&&!p.isDestroyed&&p.isVisible()){o.getEl().setZIndex(parseInt(p.getEl().getStyle("z-index"),10)+3)}}}function b(o){if(o.activeChild){o.activeChild.hide()}if(o.autoHideTimer){clearTimeout(o.autoHideTimer);delete o.autoHideTimer}}function h(o){var p=o.parentMenu;if(!p&&!o.allowOtherMenus){i()}else{if(p&&p.activeChild){p.activeChild.hide()}}}function m(o){if(l.getElapsed()>50&&d.length>0&&!o.getTarget(".x-menu")){i()}}return{hideAll:function(){return i()},register:function(o){if(!g){n()}g[o.id]=o;o.on({beforehide:b,hide:e,beforeshow:h,show:k})},get:function(o){if(typeof o=="string"){if(!g){return null}return g[o]}else{if(o.events){return o}else{if(typeof o.length=="number"){return new Ext.menu.Menu({items:o})}else{return Ext.create(o,"menu")}}}},unregister:function(o){delete g[o.id];o.un("beforehide",b);o.un("hide",e);o.un("beforeshow",h);o.un("show",k)},registerCheckable:function(o){var p=o.group;if(p){if(!c[p]){c[p]=[]}c[p].push(o)}},unregisterCheckable:function(o){var p=o.group;if(p){c[p].remove(o)}},onCheckChange:function(q,r){if(q.group&&r){var t=c[q.group],p=0,o=t.length,s;for(;p<o;p++){s=t[p];if(s!=q){s.setChecked(false)}}}},getCheckedItem:function(q){var r=c[q];if(r){for(var p=0,o=r.length;p<o;p++){if(r[p].checked){return r[p]}}}return null},setCheckedItem:function(q,s){var r=c[q];if(r){for(var p=0,o=r.length;p<o;p++){if(r[p].id==s){r[p].setChecked(true)}}}return null}}}();Ext.menu.BaseItem=Ext.extend(Ext.Component,{canActivate:false,activeClass:"x-menu-item-active",hideOnClick:true,clickHideDelay:1,ctype:"Ext.menu.BaseItem",actionMode:"container",initComponent:function(){Ext.menu.BaseItem.superclass.initComponent.call(this);this.addEvents("click","activate","deactivate");if(this.handler){this.on("click",this.handler,this.scope)}},onRender:function(b,a){Ext.menu.BaseItem.superclass.onRender.apply(this,arguments);if(this.ownerCt&&this.ownerCt instanceof Ext.menu.Menu){this.parentMenu=this.ownerCt}else{this.container.addClass("x-menu-list-item");this.mon(this.el,{scope:this,click:this.onClick,mouseenter:this.activate,mouseleave:this.deactivate})}},setHandler:function(b,a){if(this.handler){this.un("click",this.handler,this.scope)}this.on("click",this.handler=b,this.scope=a)},onClick:function(a){if(!this.disabled&&this.fireEvent("click",this,a)!==false&&(this.parentMenu&&this.parentMenu.fireEvent("itemclick",this,a)!==false)){this.handleClick(a)}else{a.stopEvent()}},activate:function(){if(this.disabled){return false}var a=this.container;a.addClass(this.activeClass);this.region=a.getRegion().adjust(2,2,-2,-2);this.fireEvent("activate",this);return true},deactivate:function(){this.container.removeClass(this.activeClass);this.fireEvent("deactivate",this)},shouldDeactivate:function(a){return !this.region||!this.region.contains(a.getPoint())},handleClick:function(b){var a=this.parentMenu;if(this.hideOnClick){if(a.floating){a.hide.defer(this.clickHideDelay,a,[true])}else{a.deactivateActive()}}},expandMenu:Ext.emptyFn,hideMenu:Ext.emptyFn});Ext.reg("menubaseitem",Ext.menu.BaseItem);Ext.menu.TextItem=Ext.extend(Ext.menu.BaseItem,{hideOnClick:false,itemCls:"x-menu-text",constructor:function(a){if(typeof a=="string"){a={text:a}}Ext.menu.TextItem.superclass.constructor.call(this,a)},onRender:function(){var a=document.createElement("span");a.className=this.itemCls;a.innerHTML=this.text;this.el=a;Ext.menu.TextItem.superclass.onRender.apply(this,arguments)}});Ext.reg("menutextitem",Ext.menu.TextItem);Ext.menu.Separator=Ext.extend(Ext.menu.BaseItem,{itemCls:"x-menu-sep",hideOnClick:false,activeClass:"",onRender:function(a){var b=document.createElement("span");b.className=this.itemCls;b.innerHTML=" ";this.el=b;a.addClass("x-menu-sep-li");Ext.menu.Separator.superclass.onRender.apply(this,arguments)}});Ext.reg("menuseparator",Ext.menu.Separator);Ext.menu.Item=Ext.extend(Ext.menu.BaseItem,{itemCls:"x-menu-item",canActivate:true,showDelay:200,altText:"",hideDelay:200,ctype:"Ext.menu.Item",initComponent:function(){Ext.menu.Item.superclass.initComponent.call(this);if(this.menu){this.menu=Ext.menu.MenuMgr.get(this.menu);this.menu.ownerCt=this}},onRender:function(d,b){if(!this.itemTpl){this.itemTpl=Ext.menu.Item.prototype.itemTpl=new Ext.XTemplate('<a id="{id}" class="{cls}" hidefocus="true" unselectable="on" href="{href}"','<tpl if="hrefTarget">',' target="{hrefTarget}"',"</tpl>",">",'<img alt="{altText}" src="{icon}" class="x-menu-item-icon {iconCls}"/>','<span class="x-menu-item-text">{text}</span>',"</a>")}var c=this.getTemplateArgs();this.el=b?this.itemTpl.insertBefore(b,c,true):this.itemTpl.append(d,c,true);this.iconEl=this.el.child("img.x-menu-item-icon");this.textEl=this.el.child(".x-menu-item-text");if(!this.href){this.mon(this.el,"click",Ext.emptyFn,null,{preventDefault:true})}Ext.menu.Item.superclass.onRender.call(this,d,b)},getTemplateArgs:function(){return{id:this.id,cls:this.itemCls+(this.menu?" x-menu-item-arrow":"")+(this.cls?" "+this.cls:""),href:this.href||"#",hrefTarget:this.hrefTarget,icon:this.icon||Ext.BLANK_IMAGE_URL,iconCls:this.iconCls||"",text:this.itemText||this.text||" ",altText:this.altText||""}},setText:function(a){this.text=a||" ";if(this.rendered){this.textEl.update(this.text);this.parentMenu.layout.doAutoSize()}},setIconClass:function(a){var b=this.iconCls;this.iconCls=a;if(this.rendered){this.iconEl.replaceClass(b,this.iconCls)}},beforeDestroy:function(){if(this.menu){delete this.menu.ownerCt;this.menu.destroy()}Ext.menu.Item.superclass.beforeDestroy.call(this)},handleClick:function(a){if(!this.href){a.stopEvent()}Ext.menu.Item.superclass.handleClick.apply(this,arguments)},activate:function(a){if(Ext.menu.Item.superclass.activate.apply(this,arguments)){this.focus();if(a){this.expandMenu()}}return true},shouldDeactivate:function(a){if(Ext.menu.Item.superclass.shouldDeactivate.call(this,a)){if(this.menu&&this.menu.isVisible()){return !this.menu.getEl().getRegion().contains(a.getPoint())}return true}return false},deactivate:function(){Ext.menu.Item.superclass.deactivate.apply(this,arguments);this.hideMenu()},expandMenu:function(a){if(!this.disabled&&this.menu){clearTimeout(this.hideTimer);delete this.hideTimer;if(!this.menu.isVisible()&&!this.showTimer){this.showTimer=this.deferExpand.defer(this.showDelay,this,[a])}else{if(this.menu.isVisible()&&a){this.menu.tryActivate(0,1)}}}},deferExpand:function(a){delete this.showTimer;this.menu.show(this.container,this.parentMenu.subMenuAlign||"tl-tr?",this.parentMenu);if(a){this.menu.tryActivate(0,1)}},hideMenu:function(){clearTimeout(this.showTimer);delete this.showTimer;if(!this.hideTimer&&this.menu&&this.menu.isVisible()){this.hideTimer=this.deferHide.defer(this.hideDelay,this)}},deferHide:function(){delete this.hideTimer;if(this.menu.over){this.parentMenu.setActiveItem(this,false)}else{this.menu.hide()}}});Ext.reg("menuitem",Ext.menu.Item);Ext.menu.CheckItem=Ext.extend(Ext.menu.Item,{itemCls:"x-menu-item x-menu-check-item",groupClass:"x-menu-group-item",checked:false,ctype:"Ext.menu.CheckItem",initComponent:function(){Ext.menu.CheckItem.superclass.initComponent.call(this);this.addEvents("beforecheckchange","checkchange");if(this.checkHandler){this.on("checkchange",this.checkHandler,this.scope)}Ext.menu.MenuMgr.registerCheckable(this)},onRender:function(a){Ext.menu.CheckItem.superclass.onRender.apply(this,arguments);if(this.group){this.el.addClass(this.groupClass)}if(this.checked){this.checked=false;this.setChecked(true,true)}},destroy:function(){Ext.menu.MenuMgr.unregisterCheckable(this);Ext.menu.CheckItem.superclass.destroy.apply(this,arguments)},setChecked:function(b,a){var c=a===true;if(this.checked!=b&&(c||this.fireEvent("beforecheckchange",this,b)!==false)){Ext.menu.MenuMgr.onCheckChange(this,b);if(this.container){this.container[b?"addClass":"removeClass"]("x-menu-item-checked")}this.checked=b;if(!c){this.fireEvent("checkchange",this,b)}}},handleClick:function(a){if(!this.disabled&&!(this.checked&&this.group)){this.setChecked(!this.checked)}Ext.menu.CheckItem.superclass.handleClick.apply(this,arguments)}});Ext.reg("menucheckitem",Ext.menu.CheckItem);Ext.menu.DateMenu=Ext.extend(Ext.menu.Menu,{enableScrolling:false,hideOnClick:true,pickerId:null,cls:"x-date-menu",initComponent:function(){this.on("beforeshow",this.onBeforeShow,this);if(this.strict=(Ext.isIE7&&Ext.isStrict)){this.on("show",this.onShow,this,{single:true,delay:20})}Ext.apply(this,{plain:true,showSeparator:false,items:this.picker=new Ext.DatePicker(Ext.applyIf({internalRender:this.strict||!Ext.isIE,ctCls:"x-menu-date-item",id:this.pickerId},this.initialConfig))});this.picker.purgeListeners();Ext.menu.DateMenu.superclass.initComponent.call(this);this.relayEvents(this.picker,["select"]);this.on("show",this.picker.focus,this.picker);this.on("select",this.menuHide,this);if(this.handler){this.on("select",this.handler,this.scope||this)}},menuHide:function(){if(this.hideOnClick){this.hide(true)}},onBeforeShow:function(){if(this.picker){this.picker.hideMonthPicker(true)}},onShow:function(){var a=this.picker.getEl();a.setWidth(a.getWidth())}});Ext.reg("datemenu",Ext.menu.DateMenu);Ext.menu.ColorMenu=Ext.extend(Ext.menu.Menu,{enableScrolling:false,hideOnClick:true,cls:"x-color-menu",paletteId:null,initComponent:function(){Ext.apply(this,{plain:true,showSeparator:false,items:this.palette=new Ext.ColorPalette(Ext.applyIf({id:this.paletteId},this.initialConfig))});this.palette.purgeListeners();Ext.menu.ColorMenu.superclass.initComponent.call(this);this.relayEvents(this.palette,["select"]);this.on("select",this.menuHide,this);if(this.handler){this.on("select",this.handler,this.scope||this)}},menuHide:function(){if(this.hideOnClick){this.hide(true)}}});Ext.reg("colormenu",Ext.menu.ColorMenu);Ext.form.Field=Ext.extend(Ext.BoxComponent,{invalidClass:"x-form-invalid",invalidText:"The value in this field is invalid",focusClass:"x-form-focus",validationEvent:"keyup",validateOnBlur:true,validationDelay:250,defaultAutoCreate:{tag:"input",type:"text",size:"20",autocomplete:"off"},fieldClass:"x-form-field",msgTarget:"qtip",msgFx:"normal",readOnly:false,disabled:false,submitValue:true,isFormField:true,msgDisplay:"",hasFocus:false,initComponent:function(){Ext.form.Field.superclass.initComponent.call(this);this.addEvents("focus","blur","specialkey","change","invalid","valid")},getName:function(){return this.rendered&&this.el.dom.name?this.el.dom.name:this.name||this.id||""},onRender:function(c,a){if(!this.el){var b=this.getAutoCreate();if(!b.name){b.name=this.name||this.id}if(this.inputType){b.type=this.inputType}this.autoEl=b}Ext.form.Field.superclass.onRender.call(this,c,a);if(this.submitValue===false){this.el.dom.removeAttribute("name")}var d=this.el.dom.type;if(d){if(d=="password"){d="text"}this.el.addClass("x-form-"+d)}if(this.readOnly){this.setReadOnly(true)}if(this.tabIndex!==undefined){this.el.dom.setAttribute("tabIndex",this.tabIndex)}this.el.addClass([this.fieldClass,this.cls])},getItemCt:function(){return this.itemCt},initValue:function(){if(this.value!==undefined){this.setValue(this.value)}else{if(!Ext.isEmpty(this.el.dom.value)&&this.el.dom.value!=this.emptyText){this.setValue(this.el.dom.value)}}this.originalValue=this.getValue()},isDirty:function(){if(this.disabled||!this.rendered){return false}return String(this.getValue())!==String(this.originalValue)},setReadOnly:function(a){if(this.rendered){this.el.dom.readOnly=a}this.readOnly=a},afterRender:function(){Ext.form.Field.superclass.afterRender.call(this);this.initEvents();this.initValue()},fireKey:function(a){if(a.isSpecialKey()){this.fireEvent("specialkey",this,a)}},reset:function(){this.setValue(this.originalValue);this.clearInvalid()},initEvents:function(){this.mon(this.el,Ext.EventManager.getKeyEvent(),this.fireKey,this);this.mon(this.el,"focus",this.onFocus,this);this.mon(this.el,"blur",this.onBlur,this,this.inEditor?{buffer:10}:null)},preFocus:Ext.emptyFn,onFocus:function(){this.preFocus();if(this.focusClass){this.el.addClass(this.focusClass)}if(!this.hasFocus){this.hasFocus=true;this.startValue=this.getValue();this.fireEvent("focus",this)}},beforeBlur:Ext.emptyFn,onBlur:function(){this.beforeBlur();if(this.focusClass){this.el.removeClass(this.focusClass)}this.hasFocus=false;if(this.validationEvent!==false&&(this.validateOnBlur||this.validationEvent=="blur")){this.validate()}var a=this.getValue();if(String(a)!==String(this.startValue)){this.fireEvent("change",this,a,this.startValue)}this.fireEvent("blur",this);this.postBlur()},postBlur:Ext.emptyFn,isValid:function(a){if(this.disabled){return true}var c=this.preventMark;this.preventMark=a===true;var b=this.validateValue(this.processValue(this.getRawValue()));this.preventMark=c;return b},validate:function(){if(this.disabled||this.validateValue(this.processValue(this.getRawValue()))){this.clearInvalid();return true}return false},processValue:function(a){return a},validateValue:function(b){var a=this.getErrors(b)[0];if(a==undefined){return true}else{this.markInvalid(a);return false}},getErrors:function(){return[]},getActiveError:function(){return this.activeError||""},markInvalid:function(c){if(this.rendered&&!this.preventMark){c=c||this.invalidText;var a=this.getMessageHandler();if(a){a.mark(this,c)}else{if(this.msgTarget){this.el.addClass(this.invalidClass);var b=Ext.getDom(this.msgTarget);if(b){b.innerHTML=c;b.style.display=this.msgDisplay}}}}this.setActiveError(c)},clearInvalid:function(){if(this.rendered&&!this.preventMark){this.el.removeClass(this.invalidClass);var a=this.getMessageHandler();if(a){a.clear(this)}else{if(this.msgTarget){this.el.removeClass(this.invalidClass);var b=Ext.getDom(this.msgTarget);if(b){b.innerHTML="";b.style.display="none"}}}}this.unsetActiveError()},setActiveError:function(b,a){this.activeError=b;if(a!==true){this.fireEvent("invalid",this,b)}},unsetActiveError:function(a){delete this.activeError;if(a!==true){this.fireEvent("valid",this)}},getMessageHandler:function(){return Ext.form.MessageTargets[this.msgTarget]},getErrorCt:function(){return this.el.findParent(".x-form-element",5,true)||this.el.findParent(".x-form-field-wrap",5,true)},alignErrorEl:function(){this.errorEl.setWidth(this.getErrorCt().getWidth(true)-20)},alignErrorIcon:function(){this.errorIcon.alignTo(this.el,"tl-tr",[2,0])},getRawValue:function(){var a=this.rendered?this.el.getValue():Ext.value(this.value,"");if(a===this.emptyText){a=""}return a},getValue:function(){if(!this.rendered){return this.value}var a=this.el.getValue();if(a===this.emptyText||a===undefined){a=""}return a},setRawValue:function(a){return this.rendered?(this.el.dom.value=(Ext.isEmpty(a)?"":a)):""},setValue:function(a){this.value=a;if(this.rendered){this.el.dom.value=(Ext.isEmpty(a)?"":a);this.validate()}return this},append:function(a){this.setValue([this.getValue(),a].join(""))}});Ext.form.MessageTargets={qtip:{mark:function(a,b){a.el.addClass(a.invalidClass);a.el.dom.qtip=b;a.el.dom.qclass="x-form-invalid-tip";if(Ext.QuickTips){Ext.QuickTips.enable()}},clear:function(a){a.el.removeClass(a.invalidClass);a.el.dom.qtip=""}},title:{mark:function(a,b){a.el.addClass(a.invalidClass);a.el.dom.title=b},clear:function(a){a.el.dom.title=""}},under:{mark:function(b,c){b.el.addClass(b.invalidClass);if(!b.errorEl){var a=b.getErrorCt();if(!a){b.el.dom.title=c;return}b.errorEl=a.createChild({cls:"x-form-invalid-msg"});b.on("resize",b.alignErrorEl,b);b.on("destroy",function(){Ext.destroy(this.errorEl)},b)}b.alignErrorEl();b.errorEl.update(c);Ext.form.Field.msgFx[b.msgFx].show(b.errorEl,b)},clear:function(a){a.el.removeClass(a.invalidClass);if(a.errorEl){Ext.form.Field.msgFx[a.msgFx].hide(a.errorEl,a)}else{a.el.dom.title=""}}},side:{mark:function(b,c){b.el.addClass(b.invalidClass);if(!b.errorIcon){var a=b.getErrorCt();if(!a){b.el.dom.title=c;return}b.errorIcon=a.createChild({cls:"x-form-invalid-icon"});if(b.ownerCt){b.ownerCt.on("afterlayout",b.alignErrorIcon,b);b.ownerCt.on("expand",b.alignErrorIcon,b)}b.on("resize",b.alignErrorIcon,b);b.on("destroy",function(){Ext.destroy(this.errorIcon)},b)}b.alignErrorIcon();b.errorIcon.dom.qtip=c;b.errorIcon.dom.qclass="x-form-invalid-tip";b.errorIcon.show()},clear:function(a){a.el.removeClass(a.invalidClass);if(a.errorIcon){a.errorIcon.dom.qtip="";a.errorIcon.hide()}else{a.el.dom.title=""}}}};Ext.form.Field.msgFx={normal:{show:function(a,b){a.setDisplayed("block")},hide:function(a,b){a.setDisplayed(false).update("")}},slide:{show:function(a,b){a.slideIn("t",{stopFx:true})},hide:function(a,b){a.slideOut("t",{stopFx:true,useDisplay:true})}},slideRight:{show:function(a,b){a.fixDisplay();a.alignTo(b.el,"tl-tr");a.slideIn("l",{stopFx:true})},hide:function(a,b){a.slideOut("l",{stopFx:true,useDisplay:true})}}};Ext.reg("field",Ext.form.Field);Ext.form.TextField=Ext.extend(Ext.form.Field,{grow:false,growMin:30,growMax:800,vtype:null,maskRe:null,disableKeyFilter:false,allowBlank:true,minLength:0,maxLength:Number.MAX_VALUE,minLengthText:"The minimum length for this field is {0}",maxLengthText:"The maximum length for this field is {0}",selectOnFocus:false,blankText:"This field is required",validator:null,regex:null,regexText:"",emptyText:null,emptyClass:"x-form-empty-field",initComponent:function(){Ext.form.TextField.superclass.initComponent.call(this);this.addEvents("autosize","keydown","keyup","keypress")},initEvents:function(){Ext.form.TextField.superclass.initEvents.call(this);if(this.validationEvent=="keyup"){this.validationTask=new Ext.util.DelayedTask(this.validate,this);this.mon(this.el,"keyup",this.filterValidation,this)}else{if(this.validationEvent!==false&&this.validationEvent!="blur"){this.mon(this.el,this.validationEvent,this.validate,this,{buffer:this.validationDelay})}}if(this.selectOnFocus||this.emptyText){this.mon(this.el,"mousedown",this.onMouseDown,this);if(this.emptyText){this.applyEmptyText()}}if(this.maskRe||(this.vtype&&this.disableKeyFilter!==true&&(this.maskRe=Ext.form.VTypes[this.vtype+"Mask"]))){this.mon(this.el,"keypress",this.filterKeys,this)}if(this.grow){this.mon(this.el,"keyup",this.onKeyUpBuffered,this,{buffer:50});this.mon(this.el,"click",this.autoSize,this)}if(this.enableKeyEvents){this.mon(this.el,{scope:this,keyup:this.onKeyUp,keydown:this.onKeyDown,keypress:this.onKeyPress})}},onMouseDown:function(a){if(!this.hasFocus){this.mon(this.el,"mouseup",Ext.emptyFn,this,{single:true,preventDefault:true})}},processValue:function(a){if(this.stripCharsRe){var b=a.replace(this.stripCharsRe,"");if(b!==a){this.setRawValue(b);return b}}return a},filterValidation:function(a){if(!a.isNavKeyPress()){this.validationTask.delay(this.validationDelay)}},onDisable:function(){Ext.form.TextField.superclass.onDisable.call(this);if(Ext.isIE){this.el.dom.unselectable="on"}},onEnable:function(){Ext.form.TextField.superclass.onEnable.call(this);if(Ext.isIE){this.el.dom.unselectable=""}},onKeyUpBuffered:function(a){if(this.doAutoSize(a)){this.autoSize()}},doAutoSize:function(a){return !a.isNavKeyPress()},onKeyUp:function(a){this.fireEvent("keyup",this,a)},onKeyDown:function(a){this.fireEvent("keydown",this,a)},onKeyPress:function(a){this.fireEvent("keypress",this,a)},reset:function(){Ext.form.TextField.superclass.reset.call(this);this.applyEmptyText()},applyEmptyText:function(){if(this.rendered&&this.emptyText&&this.getRawValue().length<1&&!this.hasFocus){this.setRawValue(this.emptyText);this.el.addClass(this.emptyClass)}},preFocus:function(){var a=this.el,b;if(this.emptyText){if(a.dom.value==this.emptyText){this.setRawValue("");b=true}a.removeClass(this.emptyClass)}if(this.selectOnFocus||b){a.dom.select()}},postBlur:function(){this.applyEmptyText()},filterKeys:function(b){if(b.ctrlKey){return}var a=b.getKey();if(Ext.isGecko&&(b.isNavKeyPress()||a==b.BACKSPACE||(a==b.DELETE&&b.button==-1))){return}var c=String.fromCharCode(b.getCharCode());if(!Ext.isGecko&&b.isSpecialKey()&&!c){return}if(!this.maskRe.test(c)){b.stopEvent()}},setValue:function(a){if(this.emptyText&&this.el&&!Ext.isEmpty(a)){this.el.removeClass(this.emptyClass)}Ext.form.TextField.superclass.setValue.apply(this,arguments);this.applyEmptyText();this.autoSize();return this},getErrors:function(a){var d=Ext.form.TextField.superclass.getErrors.apply(this,arguments);a=Ext.isDefined(a)?a:this.processValue(this.getRawValue());if(Ext.isFunction(this.validator)){var c=this.validator(a);if(c!==true){d.push(c)}}if(a.length<1||a===this.emptyText){if(this.allowBlank){return d}else{d.push(this.blankText)}}if(!this.allowBlank&&(a.length<1||a===this.emptyText)){d.push(this.blankText)}if(a.length<this.minLength){d.push(String.format(this.minLengthText,this.minLength))}if(a.length>this.maxLength){d.push(String.format(this.maxLengthText,this.maxLength))}if(this.vtype){var b=Ext.form.VTypes;if(!b[this.vtype](a,this)){d.push(this.vtypeText||b[this.vtype+"Text"])}}if(this.regex&&!this.regex.test(a)){d.push(this.regexText)}return d},selectText:function(h,a){var c=this.getRawValue();var e=false;if(c.length>0){h=h===undefined?0:h;a=a===undefined?c.length:a;var g=this.el.dom;if(g.setSelectionRange){g.setSelectionRange(h,a)}else{if(g.createTextRange){var b=g.createTextRange();b.moveStart("character",h);b.moveEnd("character",a-c.length);b.select()}}e=Ext.isGecko||Ext.isOpera}else{e=true}if(e){this.focus()}},autoSize:function(){if(!this.grow||!this.rendered){return}if(!this.metrics){this.metrics=Ext.util.TextMetrics.createInstance(this.el)}var c=this.el;var b=c.dom.value;var e=document.createElement("div");e.appendChild(document.createTextNode(b));b=e.innerHTML;Ext.removeNode(e);e=null;b+=" ";var a=Math.min(this.growMax,Math.max(this.metrics.getWidth(b)+10,this.growMin));this.el.setWidth(a);this.fireEvent("autosize",this,a)},onDestroy:function(){if(this.validationTask){this.validationTask.cancel();this.validationTask=null}Ext.form.TextField.superclass.onDestroy.call(this)}});Ext.reg("textfield",Ext.form.TextField);Ext.form.TriggerField=Ext.extend(Ext.form.TextField,{defaultAutoCreate:{tag:"input",type:"text",size:"16",autocomplete:"off"},hideTrigger:false,editable:true,readOnly:false,wrapFocusClass:"x-trigger-wrap-focus",autoSize:Ext.emptyFn,monitorTab:true,deferHeight:true,mimicing:false,actionMode:"wrap",defaultTriggerWidth:17,onResize:function(a,c){Ext.form.TriggerField.superclass.onResize.call(this,a,c);var b=this.getTriggerWidth();if(Ext.isNumber(a)){this.el.setWidth(a-b)}this.wrap.setWidth(this.el.getWidth()+b)},getTriggerWidth:function(){var a=this.trigger.getWidth();if(!this.hideTrigger&&!this.readOnly&&a===0){a=this.defaultTriggerWidth}return a},alignErrorIcon:function(){if(this.wrap){this.errorIcon.alignTo(this.wrap,"tl-tr",[2,0])}},onRender:function(b,a){this.doc=Ext.isIE?Ext.getBody():Ext.getDoc();Ext.form.TriggerField.superclass.onRender.call(this,b,a);this.wrap=this.el.wrap({cls:"x-form-field-wrap x-form-field-trigger-wrap"});this.trigger=this.wrap.createChild(this.triggerConfig||{tag:"img",src:Ext.BLANK_IMAGE_URL,alt:"",cls:"x-form-trigger "+this.triggerClass});this.initTrigger();if(!this.width){this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth())}this.resizeEl=this.positionEl=this.wrap},getWidth:function(){return(this.el.getWidth()+this.trigger.getWidth())},updateEditState:function(){if(this.rendered){if(this.readOnly){this.el.dom.readOnly=true;this.el.addClass("x-trigger-noedit");this.mun(this.el,"click",this.onTriggerClick,this);this.trigger.setDisplayed(false)}else{if(!this.editable){this.el.dom.readOnly=true;this.el.addClass("x-trigger-noedit");this.mon(this.el,"click",this.onTriggerClick,this)}else{this.el.dom.readOnly=false;this.el.removeClass("x-trigger-noedit");this.mun(this.el,"click",this.onTriggerClick,this)}this.trigger.setDisplayed(!this.hideTrigger)}this.onResize(this.width||this.wrap.getWidth())}},setHideTrigger:function(a){if(a!=this.hideTrigger){this.hideTrigger=a;this.updateEditState()}},setEditable:function(a){if(a!=this.editable){this.editable=a;this.updateEditState()}},setReadOnly:function(a){if(a!=this.readOnly){this.readOnly=a;this.updateEditState()}},afterRender:function(){Ext.form.TriggerField.superclass.afterRender.call(this);this.updateEditState()},initTrigger:function(){this.mon(this.trigger,"click",this.onTriggerClick,this,{preventDefault:true});this.trigger.addClassOnOver("x-form-trigger-over");this.trigger.addClassOnClick("x-form-trigger-click")},onDestroy:function(){Ext.destroy(this.trigger,this.wrap);if(this.mimicing){this.doc.un("mousedown",this.mimicBlur,this)}delete this.doc;Ext.form.TriggerField.superclass.onDestroy.call(this)},onFocus:function(){Ext.form.TriggerField.superclass.onFocus.call(this);if(!this.mimicing){this.wrap.addClass(this.wrapFocusClass);this.mimicing=true;this.doc.on("mousedown",this.mimicBlur,this,{delay:10});if(this.monitorTab){this.on("specialkey",this.checkTab,this)}}},checkTab:function(a,b){if(b.getKey()==b.TAB){this.triggerBlur()}},onBlur:Ext.emptyFn,mimicBlur:function(a){if(!this.isDestroyed&&!this.wrap.contains(a.target)&&this.validateBlur(a)){this.triggerBlur()}},triggerBlur:function(){this.mimicing=false;this.doc.un("mousedown",this.mimicBlur,this);if(this.monitorTab&&this.el){this.un("specialkey",this.checkTab,this)}Ext.form.TriggerField.superclass.onBlur.call(this);if(this.wrap){this.wrap.removeClass(this.wrapFocusClass)}},beforeBlur:Ext.emptyFn,validateBlur:function(a){return true},onTriggerClick:Ext.emptyFn});Ext.form.TwinTriggerField=Ext.extend(Ext.form.TriggerField,{initComponent:function(){Ext.form.TwinTriggerField.superclass.initComponent.call(this);this.triggerConfig={tag:"span",cls:"x-form-twin-triggers",cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,alt:"",cls:"x-form-trigger "+this.trigger1Class},{tag:"img",src:Ext.BLANK_IMAGE_URL,alt:"",cls:"x-form-trigger "+this.trigger2Class}]}},getTrigger:function(a){return this.triggers[a]},afterRender:function(){Ext.form.TwinTriggerField.superclass.afterRender.call(this);var c=this.triggers,b=0,a=c.length;for(;b<a;++b){if(this["hideTrigger"+(b+1)]){c[b].hide()}}},initTrigger:function(){var a=this.trigger.select(".x-form-trigger",true),b=this;a.each(function(d,g,c){var e="Trigger"+(c+1);d.hide=function(){var h=b.wrap.getWidth();this.dom.style.display="none";b.el.setWidth(h-b.trigger.getWidth());b["hidden"+e]=true};d.show=function(){var h=b.wrap.getWidth();this.dom.style.display="";b.el.setWidth(h-b.trigger.getWidth());b["hidden"+e]=false};this.mon(d,"click",this["on"+e+"Click"],this,{preventDefault:true});d.addClassOnOver("x-form-trigger-over");d.addClassOnClick("x-form-trigger-click")},this);this.triggers=a.elements},getTriggerWidth:function(){var a=0;Ext.each(this.triggers,function(d,c){var e="Trigger"+(c+1),b=d.getWidth();if(b===0&&!this["hidden"+e]){a+=this.defaultTriggerWidth}else{a+=b}},this);return a},onDestroy:function(){Ext.destroy(this.triggers);Ext.form.TwinTriggerField.superclass.onDestroy.call(this)},onTrigger1Click:Ext.emptyFn,onTrigger2Click:Ext.emptyFn});Ext.reg("trigger",Ext.form.TriggerField);Ext.form.TextArea=Ext.extend(Ext.form.TextField,{growMin:60,growMax:1000,growAppend:" \n ",enterIsSpecial:false,preventScrollbars:false,onRender:function(b,a){if(!this.el){this.defaultAutoCreate={tag:"textarea",style:"width:100px;height:60px;",autocomplete:"off"}}Ext.form.TextArea.superclass.onRender.call(this,b,a);if(this.grow){this.textSizeEl=Ext.DomHelper.append(document.body,{tag:"pre",cls:"x-form-grow-sizer"});if(this.preventScrollbars){this.el.setStyle("overflow","hidden")}this.el.setHeight(this.growMin)}},onDestroy:function(){Ext.removeNode(this.textSizeEl);Ext.form.TextArea.superclass.onDestroy.call(this)},fireKey:function(a){if(a.isSpecialKey()&&(this.enterIsSpecial||(a.getKey()!=a.ENTER||a.hasModifier()))){this.fireEvent("specialkey",this,a)}},doAutoSize:function(a){return !a.isNavKeyPress()||a.getKey()==a.ENTER},filterValidation:function(a){if(!a.isNavKeyPress()||(!this.enterIsSpecial&&a.keyCode==a.ENTER)){this.validationTask.delay(this.validationDelay)}},autoSize:function(){if(!this.grow||!this.textSizeEl){return}var c=this.el,a=Ext.util.Format.htmlEncode(c.dom.value),d=this.textSizeEl,b;Ext.fly(d).setWidth(this.el.getWidth());if(a.length<1){a="  "}else{a+=this.growAppend;if(Ext.isIE){a=a.replace(/\n/g," <br />")}}d.innerHTML=a;b=Math.min(this.growMax,Math.max(d.offsetHeight,this.growMin));if(b!=this.lastHeight){this.lastHeight=b;this.el.setHeight(b);this.fireEvent("autosize",this,b)}}});Ext.reg("textarea",Ext.form.TextArea);Ext.form.NumberField=Ext.extend(Ext.form.TextField,{fieldClass:"x-form-field x-form-num-field",allowDecimals:true,decimalSeparator:".",decimalPrecision:2,allowNegative:true,minValue:Number.NEGATIVE_INFINITY,maxValue:Number.MAX_VALUE,minText:"The minimum value for this field is {0}",maxText:"The maximum value for this field is {0}",nanText:"{0} is not a valid number",baseChars:"0123456789",autoStripChars:false,initEvents:function(){var a=this.baseChars+"";if(this.allowDecimals){a+=this.decimalSeparator}if(this.allowNegative){a+="-"}a=Ext.escapeRe(a);this.maskRe=new RegExp("["+a+"]");if(this.autoStripChars){this.stripCharsRe=new RegExp("[^"+a+"]","gi")}Ext.form.NumberField.superclass.initEvents.call(this)},getErrors:function(b){var c=Ext.form.NumberField.superclass.getErrors.apply(this,arguments);b=Ext.isDefined(b)?b:this.processValue(this.getRawValue());if(b.length<1){return c}b=String(b).replace(this.decimalSeparator,".");if(isNaN(b)){c.push(String.format(this.nanText,b))}var a=this.parseValue(b);if(a<this.minValue){c.push(String.format(this.minText,this.minValue))}if(a>this.maxValue){c.push(String.format(this.maxText,this.maxValue))}return c},getValue:function(){return this.fixPrecision(this.parseValue(Ext.form.NumberField.superclass.getValue.call(this)))},setValue:function(a){a=this.fixPrecision(a);a=Ext.isNumber(a)?a:parseFloat(String(a).replace(this.decimalSeparator,"."));a=isNaN(a)?"":String(a).replace(".",this.decimalSeparator);return Ext.form.NumberField.superclass.setValue.call(this,a)},setMinValue:function(a){this.minValue=Ext.num(a,Number.NEGATIVE_INFINITY)},setMaxValue:function(a){this.maxValue=Ext.num(a,Number.MAX_VALUE)},parseValue:function(a){a=parseFloat(String(a).replace(this.decimalSeparator,"."));return isNaN(a)?"":a},fixPrecision:function(b){var a=isNaN(b);if(!this.allowDecimals||this.decimalPrecision==-1||a||!b){return a?"":b}return parseFloat(parseFloat(b).toFixed(this.decimalPrecision))},beforeBlur:function(){var a=this.parseValue(this.getRawValue());if(!Ext.isEmpty(a)){this.setValue(a)}}});Ext.reg("numberfield",Ext.form.NumberField);Ext.form.DateField=Ext.extend(Ext.form.TriggerField,{format:"m/d/Y",altFormats:"m/d/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d|n-j|n/j",disabledDaysText:"Disabled",disabledDatesText:"Disabled",minText:"The date in this field must be equal to or after {0}",maxText:"The date in this field must be equal to or before {0}",invalidText:"{0} is not a valid date - it must be in the format {1}",triggerClass:"x-form-date-trigger",showToday:true,startDay:0,defaultAutoCreate:{tag:"input",type:"text",size:"10",autocomplete:"off"},initTime:"12",initTimeFormat:"H",safeParse:function(b,c){if(/[gGhH]/.test(c.replace(/(\\.)/g,""))){return Date.parseDate(b,c)}else{var a=Date.parseDate(b+" "+this.initTime,c+" "+this.initTimeFormat);if(a){return a.clearTime()}}},initComponent:function(){Ext.form.DateField.superclass.initComponent.call(this);this.addEvents("select");if(Ext.isString(this.minValue)){this.minValue=this.parseDate(this.minValue)}if(Ext.isString(this.maxValue)){this.maxValue=this.parseDate(this.maxValue)}this.disabledDatesRE=null;this.initDisabledDays()},initEvents:function(){Ext.form.DateField.superclass.initEvents.call(this);this.keyNav=new Ext.KeyNav(this.el,{down:function(a){this.onTriggerClick()},scope:this,forceKeyDown:true})},initDisabledDays:function(){if(this.disabledDates){var b=this.disabledDates,a=b.length-1,c="(?:";Ext.each(b,function(g,e){c+=Ext.isDate(g)?"^"+Ext.escapeRe(g.dateFormat(this.format))+"$":b[e];if(e!=a){c+="|"}},this);this.disabledDatesRE=new RegExp(c+")")}},setDisabledDates:function(a){this.disabledDates=a;this.initDisabledDays();if(this.menu){this.menu.picker.setDisabledDates(this.disabledDatesRE)}},setDisabledDays:function(a){this.disabledDays=a;if(this.menu){this.menu.picker.setDisabledDays(a)}},setMinValue:function(a){this.minValue=(Ext.isString(a)?this.parseDate(a):a);if(this.menu){this.menu.picker.setMinDate(this.minValue)}},setMaxValue:function(a){this.maxValue=(Ext.isString(a)?this.parseDate(a):a);if(this.menu){this.menu.picker.setMaxDate(this.maxValue)}},getErrors:function(e){var h=Ext.form.DateField.superclass.getErrors.apply(this,arguments);e=this.formatDate(e||this.processValue(this.getRawValue()));if(e.length<1){return h}var c=e;e=this.parseDate(e);if(!e){h.push(String.format(this.invalidText,c,this.format));return h}var g=e.getTime();if(this.minValue&&g<this.minValue.clearTime().getTime()){h.push(String.format(this.minText,this.formatDate(this.minValue)))}if(this.maxValue&&g>this.maxValue.clearTime().getTime()){h.push(String.format(this.maxText,this.formatDate(this.maxValue)))}if(this.disabledDays){var a=e.getDay();for(var b=0;b<this.disabledDays.length;b++){if(a===this.disabledDays[b]){h.push(this.disabledDaysText);break}}}var d=this.formatDate(e);if(this.disabledDatesRE&&this.disabledDatesRE.test(d)){h.push(String.format(this.disabledDatesText,d))}return h},validateBlur:function(){return !this.menu||!this.menu.isVisible()},getValue:function(){return this.parseDate(Ext.form.DateField.superclass.getValue.call(this))||""},setValue:function(a){return Ext.form.DateField.superclass.setValue.call(this,this.formatDate(this.parseDate(a)))},parseDate:function(g){if(!g||Ext.isDate(g)){return g}var b=this.safeParse(g,this.format),c=this.altFormats,e=this.altFormatsArray;if(!b&&c){e=e||c.split("|");for(var d=0,a=e.length;d<a&&!b;d++){b=this.safeParse(g,e[d])}}return b},onDestroy:function(){Ext.destroy(this.menu,this.keyNav);Ext.form.DateField.superclass.onDestroy.call(this)},formatDate:function(a){return Ext.isDate(a)?a.dateFormat(this.format):a},onTriggerClick:function(){if(this.disabled){return}if(this.menu==null){this.menu=new Ext.menu.DateMenu({hideOnClick:false,focusOnSelect:false})}this.onFocus();Ext.apply(this.menu.picker,{minDate:this.minValue,maxDate:this.maxValue,disabledDatesRE:this.disabledDatesRE,disabledDatesText:this.disabledDatesText,disabledDays:this.disabledDays,disabledDaysText:this.disabledDaysText,format:this.format,showToday:this.showToday,startDay:this.startDay,minText:String.format(this.minText,this.formatDate(this.minValue)),maxText:String.format(this.maxText,this.formatDate(this.maxValue))});this.menu.picker.setValue(this.getValue()||new Date());this.menu.show(this.el,"tl-bl?");this.menuEvents("on")},menuEvents:function(a){this.menu[a]("select",this.onSelect,this);this.menu[a]("hide",this.onMenuHide,this);this.menu[a]("show",this.onFocus,this)},onSelect:function(a,b){this.setValue(b);this.fireEvent("select",this,b);this.menu.hide()},onMenuHide:function(){this.focus(false,60);this.menuEvents("un")},beforeBlur:function(){var a=this.parseDate(this.getRawValue());if(a){this.setValue(a)}}});Ext.reg("datefield",Ext.form.DateField);Ext.form.DisplayField=Ext.extend(Ext.form.Field,{validationEvent:false,validateOnBlur:false,defaultAutoCreate:{tag:"div"},fieldClass:"x-form-display-field",htmlEncode:false,initEvents:Ext.emptyFn,isValid:function(){return true},validate:function(){return true},getRawValue:function(){var a=this.rendered?this.el.dom.innerHTML:Ext.value(this.value,"");if(a===this.emptyText){a=""}if(this.htmlEncode){a=Ext.util.Format.htmlDecode(a)}return a},getValue:function(){return this.getRawValue()},getName:function(){return this.name},setRawValue:function(a){if(this.htmlEncode){a=Ext.util.Format.htmlEncode(a)}return this.rendered?(this.el.dom.innerHTML=(Ext.isEmpty(a)?"":a)):(this.value=a)},setValue:function(a){this.setRawValue(a);return this}});Ext.reg("displayfield",Ext.form.DisplayField);Ext.form.ComboBox=Ext.extend(Ext.form.TriggerField,{defaultAutoCreate:{tag:"input",type:"text",size:"24",autocomplete:"off"},listClass:"",selectedClass:"x-combo-selected",listEmptyText:"",triggerClass:"x-form-arrow-trigger",shadow:"sides",listAlign:"tl-bl?",maxHeight:300,minHeight:90,triggerAction:"query",minChars:4,autoSelect:true,typeAhead:false,queryDelay:500,pageSize:0,selectOnFocus:false,queryParam:"query",loadingText:"Loading...",resizable:false,handleHeight:8,allQuery:"",mode:"remote",minListWidth:70,forceSelection:false,typeAheadDelay:250,lazyInit:true,clearFilterOnReset:true,submitValue:undefined,initComponent:function(){Ext.form.ComboBox.superclass.initComponent.call(this);this.addEvents("expand","collapse","beforeselect","select","beforequery");if(this.transform){var c=Ext.getDom(this.transform);if(!this.hiddenName){this.hiddenName=c.name}if(!this.store){this.mode="local";var k=[],e=c.options;for(var b=0,a=e.length;b<a;b++){var h=e[b],g=(h.hasAttribute?h.hasAttribute("value"):h.getAttributeNode("value").specified)?h.value:h.text;if(h.selected&&Ext.isEmpty(this.value,true)){this.value=g}k.push([g,h.text])}this.store=new Ext.data.ArrayStore({idIndex:0,fields:["value","text"],data:k,autoDestroy:true});this.valueField="value";this.displayField="text"}c.name=Ext.id();if(!this.lazyRender){this.target=true;this.el=Ext.DomHelper.insertBefore(c,this.autoCreate||this.defaultAutoCreate);this.render(this.el.parentNode,c)}Ext.removeNode(c)}else{if(this.store){this.store=Ext.StoreMgr.lookup(this.store);if(this.store.autoCreated){this.displayField=this.valueField="field1";if(!this.store.expandData){this.displayField="field2"}this.mode="local"}}}this.selectedIndex=-1;if(this.mode=="local"){if(!Ext.isDefined(this.initialConfig.queryDelay)){this.queryDelay=10}if(!Ext.isDefined(this.initialConfig.minChars)){this.minChars=0}}},onRender:function(b,a){if(this.hiddenName&&!Ext.isDefined(this.submitValue)){this.submitValue=false}Ext.form.ComboBox.superclass.onRender.call(this,b,a);if(this.hiddenName){this.hiddenField=this.el.insertSibling({tag:"input",type:"hidden",name:this.hiddenName,id:(this.hiddenId||Ext.id())},"before",true)}if(Ext.isGecko){this.el.dom.setAttribute("autocomplete","off")}if(!this.lazyInit){this.initList()}else{this.on("focus",this.initList,this,{single:true})}},initValue:function(){Ext.form.ComboBox.superclass.initValue.call(this);if(this.hiddenField){this.hiddenField.value=Ext.value(Ext.isDefined(this.hiddenValue)?this.hiddenValue:this.value,"")}},getParentZIndex:function(){var a;if(this.ownerCt){this.findParentBy(function(b){a=parseInt(b.getPositionEl().getStyle("z-index"),10);return !!a})}return a},getZIndex:function(b){b=b||Ext.getDom(this.getListParent()||Ext.getBody());var a=parseInt(Ext.fly(b).getStyle("z-index"),10);if(!a){a=this.getParentZIndex()}return(a||12000)+5},initList:function(){if(!this.list){var a="x-combo-list",c=Ext.getDom(this.getListParent()||Ext.getBody());this.list=new Ext.Layer({parentEl:c,shadow:this.shadow,cls:[a,this.listClass].join(" "),constrain:false,zindex:this.getZIndex(c)});var b=this.listWidth||Math.max(this.wrap.getWidth(),this.minListWidth);this.list.setSize(b,0);this.list.swallowEvent("mousewheel");this.assetHeight=0;if(this.syncFont!==false){this.list.setStyle("font-size",this.el.getStyle("font-size"))}if(this.title){this.header=this.list.createChild({cls:a+"-hd",html:this.title});this.assetHeight+=this.header.getHeight()}this.innerList=this.list.createChild({cls:a+"-inner"});this.mon(this.innerList,"mouseover",this.onViewOver,this);this.mon(this.innerList,"mousemove",this.onViewMove,this);this.innerList.setWidth(b-this.list.getFrameWidth("lr"));if(this.pageSize){this.footer=this.list.createChild({cls:a+"-ft"});this.pageTb=new Ext.PagingToolbar({store:this.store,pageSize:this.pageSize,renderTo:this.footer});this.assetHeight+=this.footer.getHeight()}if(!this.tpl){this.tpl='<tpl for="."><div class="'+a+'-item">{'+this.displayField+"}</div></tpl>"}this.view=new Ext.DataView({applyTo:this.innerList,tpl:this.tpl,singleSelect:true,selectedClass:this.selectedClass,itemSelector:this.itemSelector||"."+a+"-item",emptyText:this.listEmptyText,deferEmptyText:false});this.mon(this.view,{containerclick:this.onViewClick,click:this.onViewClick,scope:this});this.bindStore(this.store,true);if(this.resizable){this.resizer=new Ext.Resizable(this.list,{pinned:true,handles:"se"});this.mon(this.resizer,"resize",function(g,d,e){this.maxHeight=e-this.handleHeight-this.list.getFrameWidth("tb")-this.assetHeight;this.listWidth=d;this.innerList.setWidth(d-this.list.getFrameWidth("lr"));this.restrictHeight()},this);this[this.pageSize?"footer":"innerList"].setStyle("margin-bottom",this.handleHeight+"px")}}},getListParent:function(){return document.body},getStore:function(){return this.store},bindStore:function(a,b){if(this.store&&!b){if(this.store!==a&&this.store.autoDestroy){this.store.destroy()}else{this.store.un("beforeload",this.onBeforeLoad,this);this.store.un("load",this.onLoad,this);this.store.un("exception",this.collapse,this)}if(!a){this.store=null;if(this.view){this.view.bindStore(null)}if(this.pageTb){this.pageTb.bindStore(null)}}}if(a){if(!b){this.lastQuery=null;if(this.pageTb){this.pageTb.bindStore(a)}}this.store=Ext.StoreMgr.lookup(a);this.store.on({scope:this,beforeload:this.onBeforeLoad,load:this.onLoad,exception:this.collapse});if(this.view){this.view.bindStore(a)}}},reset:function(){if(this.clearFilterOnReset&&this.mode=="local"){this.store.clearFilter()}Ext.form.ComboBox.superclass.reset.call(this)},initEvents:function(){Ext.form.ComboBox.superclass.initEvents.call(this);this.keyNav=new Ext.KeyNav(this.el,{up:function(a){this.inKeyMode=true;this.selectPrev()},down:function(a){if(!this.isExpanded()){this.onTriggerClick()}else{this.inKeyMode=true;this.selectNext()}},enter:function(a){this.onViewClick()},esc:function(a){this.collapse()},tab:function(a){if(this.forceSelection===true){this.collapse()}else{this.onViewClick(false)}return true},scope:this,doRelay:function(c,b,a){if(a=="down"||this.scope.isExpanded()){var d=Ext.KeyNav.prototype.doRelay.apply(this,arguments);if(!Ext.isIE&&Ext.EventManager.useKeydown){this.scope.fireKey(c)}return d}return true},forceKeyDown:true,defaultEventAction:"stopEvent"});this.queryDelay=Math.max(this.queryDelay||10,this.mode=="local"?10:250);this.dqTask=new Ext.util.DelayedTask(this.initQuery,this);if(this.typeAhead){this.taTask=new Ext.util.DelayedTask(this.onTypeAhead,this)}if(!this.enableKeyEvents){this.mon(this.el,"keyup",this.onKeyUp,this)}},onDestroy:function(){if(this.dqTask){this.dqTask.cancel();this.dqTask=null}this.bindStore(null);Ext.destroy(this.resizer,this.view,this.pageTb,this.list);Ext.destroyMembers(this,"hiddenField");Ext.form.ComboBox.superclass.onDestroy.call(this)},fireKey:function(a){if(!this.isExpanded()){Ext.form.ComboBox.superclass.fireKey.call(this,a)}},onResize:function(a,b){Ext.form.ComboBox.superclass.onResize.apply(this,arguments);if(!isNaN(a)&&this.isVisible()&&this.list){this.doResize(a)}else{this.bufferSize=a}},doResize:function(a){if(!Ext.isDefined(this.listWidth)){var b=Math.max(a,this.minListWidth);this.list.setWidth(b);this.innerList.setWidth(b-this.list.getFrameWidth("lr"))}},onEnable:function(){Ext.form.ComboBox.superclass.onEnable.apply(this,arguments);if(this.hiddenField){this.hiddenField.disabled=false}},onDisable:function(){Ext.form.ComboBox.superclass.onDisable.apply(this,arguments);if(this.hiddenField){this.hiddenField.disabled=true}},onBeforeLoad:function(){if(!this.hasFocus){return}this.innerList.update(this.loadingText?'<div class="loading-indicator">'+this.loadingText+"</div>":"");this.restrictHeight();this.selectedIndex=-1},onLoad:function(){if(!this.hasFocus){return}if(this.store.getCount()>0||this.listEmptyText){this.expand();this.restrictHeight();if(this.lastQuery==this.allQuery){if(this.editable){this.el.dom.select()}if(this.autoSelect!==false&&!this.selectByValue(this.value,true)){this.select(0,true)}}else{if(this.autoSelect!==false){this.selectNext()}if(this.typeAhead&&this.lastKey!=Ext.EventObject.BACKSPACE&&this.lastKey!=Ext.EventObject.DELETE){this.taTask.delay(this.typeAheadDelay)}}}else{this.collapse()}},onTypeAhead:function(){if(this.store.getCount()>0){var b=this.store.getAt(0);var c=b.data[this.displayField];var a=c.length;var d=this.getRawValue().length;if(d!=a){this.setRawValue(c);this.selectText(d,c.length)}}},assertValue:function(){var b=this.getRawValue(),a;if(this.valueField&&Ext.isDefined(this.value)){a=this.findRecord(this.valueField,this.value)}if(!a||a.get(this.displayField)!=b){a=this.findRecord(this.displayField,b)}if(!a&&this.forceSelection){if(b.length>0&&b!=this.emptyText){this.el.dom.value=Ext.value(this.lastSelectionText,"");this.applyEmptyText()}else{this.clearValue()}}else{if(a&&this.valueField){if(this.value==b){return}b=a.get(this.valueField||this.displayField)}this.setValue(b)}},onSelect:function(a,b){if(this.fireEvent("beforeselect",this,a,b)!==false){this.setValue(a.data[this.valueField||this.displayField]);this.collapse();this.fireEvent("select",this,a,b)}},getName:function(){var a=this.hiddenField;return a&&a.name?a.name:this.hiddenName||Ext.form.ComboBox.superclass.getName.call(this)},getValue:function(){if(this.valueField){return Ext.isDefined(this.value)?this.value:""}else{return Ext.form.ComboBox.superclass.getValue.call(this)}},clearValue:function(){if(this.hiddenField){this.hiddenField.value=""}this.setRawValue("");this.lastSelectionText="";this.applyEmptyText();this.value=""},setValue:function(a){var c=a;if(this.valueField){var b=this.findRecord(this.valueField,a);if(b){c=b.data[this.displayField]}else{if(Ext.isDefined(this.valueNotFoundText)){c=this.valueNotFoundText}}}this.lastSelectionText=c;if(this.hiddenField){this.hiddenField.value=Ext.value(a,"")}Ext.form.ComboBox.superclass.setValue.call(this,c);this.value=a;return this},findRecord:function(c,b){var a;if(this.store.getCount()>0){this.store.each(function(d){if(d.data[c]==b){a=d;return false}})}return a},onViewMove:function(b,a){this.inKeyMode=false},onViewOver:function(d,b){if(this.inKeyMode){return}var c=this.view.findItemFromChild(b);if(c){var a=this.view.indexOf(c);this.select(a,false)}},onViewClick:function(b){var a=this.view.getSelectedIndexes()[0],c=this.store,d=c.getAt(a);if(d){this.onSelect(d,a)}else{this.collapse()}if(b!==false){this.el.focus()}},restrictHeight:function(){this.innerList.dom.style.height="";var b=this.innerList.dom,e=this.list.getFrameWidth("tb")+(this.resizable?this.handleHeight:0)+this.assetHeight,c=Math.max(b.clientHeight,b.offsetHeight,b.scrollHeight),a=this.getPosition()[1]-Ext.getBody().getScroll().top,g=Ext.lib.Dom.getViewHeight()-a-this.getSize().height,d=Math.max(a,g,this.minHeight||0)-this.list.shadowOffset-e-5;c=Math.min(c,d,this.maxHeight);this.innerList.setHeight(c);this.list.beginUpdate();this.list.setHeight(c+e);this.list.alignTo.apply(this.list,[this.el].concat(this.listAlign));this.list.endUpdate()},isExpanded:function(){return this.list&&this.list.isVisible()},selectByValue:function(a,c){if(!Ext.isEmpty(a,true)){var b=this.findRecord(this.valueField||this.displayField,a);if(b){this.select(this.store.indexOf(b),c);return true}}return false},select:function(a,c){this.selectedIndex=a;this.view.select(a);if(c!==false){var b=this.view.getNode(a);if(b){this.innerList.scrollChildIntoView(b,false)}}},selectNext:function(){var a=this.store.getCount();if(a>0){if(this.selectedIndex==-1){this.select(0)}else{if(this.selectedIndex<a-1){this.select(this.selectedIndex+1)}}}},selectPrev:function(){var a=this.store.getCount();if(a>0){if(this.selectedIndex==-1){this.select(0)}else{if(this.selectedIndex!==0){this.select(this.selectedIndex-1)}}}},onKeyUp:function(b){var a=b.getKey();if(this.editable!==false&&this.readOnly!==true&&(a==b.BACKSPACE||!b.isSpecialKey())){this.lastKey=a;this.dqTask.delay(this.queryDelay)}Ext.form.ComboBox.superclass.onKeyUp.call(this,b)},validateBlur:function(){return !this.list||!this.list.isVisible()},initQuery:function(){this.doQuery(this.getRawValue())},beforeBlur:function(){this.assertValue()},postBlur:function(){Ext.form.ComboBox.superclass.postBlur.call(this);this.collapse();this.inKeyMode=false},doQuery:function(c,b){c=Ext.isEmpty(c)?"":c;var a={query:c,forceAll:b,combo:this,cancel:false};if(this.fireEvent("beforequery",a)===false||a.cancel){return false}c=a.query;b=a.forceAll;if(b===true||(c.length>=this.minChars)){if(this.lastQuery!==c){this.lastQuery=c;if(this.mode=="local"){this.selectedIndex=-1;if(b){this.store.clearFilter()}else{this.store.filter(this.displayField,c)}this.onLoad()}else{this.store.baseParams[this.queryParam]=c;this.store.load({params:this.getParams(c)});this.expand()}}else{this.selectedIndex=-1;this.onLoad()}}},getParams:function(a){var b={},c=this.store.paramNames;if(this.pageSize){b[c.start]=0;b[c.limit]=this.pageSize}return b},collapse:function(){if(!this.isExpanded()){return}this.list.hide();Ext.getDoc().un("mousewheel",this.collapseIf,this);Ext.getDoc().un("mousedown",this.collapseIf,this);this.fireEvent("collapse",this)},collapseIf:function(a){if(!this.isDestroyed&&!a.within(this.wrap)&&!a.within(this.list)){this.collapse()}},expand:function(){if(this.isExpanded()||!this.hasFocus){return}if(this.title||this.pageSize){this.assetHeight=0;if(this.title){this.assetHeight+=this.header.getHeight()}if(this.pageSize){this.assetHeight+=this.footer.getHeight()}}if(this.bufferSize){this.doResize(this.bufferSize);delete this.bufferSize}this.list.alignTo.apply(this.list,[this.el].concat(this.listAlign));this.list.setZIndex(this.getZIndex());this.list.show();if(Ext.isGecko2){this.innerList.setOverflow("auto")}this.mon(Ext.getDoc(),{scope:this,mousewheel:this.collapseIf,mousedown:this.collapseIf});this.fireEvent("expand",this)},onTriggerClick:function(){if(this.readOnly||this.disabled){return}if(this.isExpanded()){this.collapse();this.el.focus()}else{this.onFocus({});if(this.triggerAction=="all"){this.doQuery(this.allQuery,true)}else{this.doQuery(this.getRawValue())}this.el.focus()}}});Ext.reg("combo",Ext.form.ComboBox);Ext.form.Checkbox=Ext.extend(Ext.form.Field,{focusClass:undefined,fieldClass:"x-form-field",checked:false,boxLabel:" ",defaultAutoCreate:{tag:"input",type:"checkbox",autocomplete:"off"},actionMode:"wrap",initComponent:function(){Ext.form.Checkbox.superclass.initComponent.call(this);this.addEvents("check")},onResize:function(){Ext.form.Checkbox.superclass.onResize.apply(this,arguments);if(!this.boxLabel&&!this.fieldLabel){this.el.alignTo(this.wrap,"c-c")}},initEvents:function(){Ext.form.Checkbox.superclass.initEvents.call(this);this.mon(this.el,{scope:this,click:this.onClick,change:this.onClick})},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,onRender:function(b,a){Ext.form.Checkbox.superclass.onRender.call(this,b,a);if(this.inputValue!==undefined){this.el.dom.value=this.inputValue}this.wrap=this.el.wrap({cls:"x-form-check-wrap"});if(this.boxLabel){this.wrap.createChild({tag:"label",htmlFor:this.el.id,cls:"x-form-cb-label",html:this.boxLabel})}if(this.checked){this.setValue(true)}else{this.checked=this.el.dom.checked}if(Ext.isIE&&!Ext.isStrict){this.wrap.repaint()}this.resizeEl=this.positionEl=this.wrap},onDestroy:function(){Ext.destroy(this.wrap);Ext.form.Checkbox.superclass.onDestroy.call(this)},initValue:function(){this.originalValue=this.getValue()},getValue:function(){if(this.rendered){return this.el.dom.checked}return this.checked},onClick:function(){if(this.el.dom.checked!=this.checked){this.setValue(this.el.dom.checked)}},setValue:function(a){var c=this.checked,b=this.inputValue;this.checked=(a===true||a==="true"||a=="1"||(b?a==b:String(a).toLowerCase()=="on"));if(this.rendered){this.el.dom.checked=this.checked;this.el.dom.defaultChecked=this.checked}if(c!=this.checked){this.fireEvent("check",this,this.checked);if(this.handler){this.handler.call(this.scope||this,this,this.checked)}}return this}});Ext.reg("checkbox",Ext.form.Checkbox);Ext.form.CheckboxGroup=Ext.extend(Ext.form.Field,{columns:"auto",vertical:false,allowBlank:true,blankText:"You must select at least one item in this group",defaultType:"checkbox",groupCls:"x-form-check-group",initComponent:function(){this.addEvents("change");this.on("change",this.validate,this);Ext.form.CheckboxGroup.superclass.initComponent.call(this)},onRender:function(k,g){if(!this.el){var q={autoEl:{id:this.id},cls:this.groupCls,layout:"column",renderTo:k,bufferResize:false};var a={xtype:"container",defaultType:this.defaultType,layout:"form",defaults:{hideLabel:true,anchor:"100%"}};if(this.items[0].items){Ext.apply(q,{layoutConfig:{columns:this.items.length},defaults:this.defaults,items:this.items});for(var e=0,n=this.items.length;e<n;e++){Ext.applyIf(this.items[e],a)}}else{var d,o=[];if(typeof this.columns=="string"){this.columns=this.items.length}if(!Ext.isArray(this.columns)){var m=[];for(var e=0;e<this.columns;e++){m.push((100/this.columns)*0.01)}this.columns=m}d=this.columns.length;for(var e=0;e<d;e++){var b=Ext.apply({items:[]},a);b[this.columns[e]<=1?"columnWidth":"width"]=this.columns[e];if(this.defaults){b.defaults=Ext.apply(b.defaults||{},this.defaults)}o.push(b)}if(this.vertical){var s=Math.ceil(this.items.length/d),p=0;for(var e=0,n=this.items.length;e<n;e++){if(e>0&&e%s==0){p++}if(this.items[e].fieldLabel){this.items[e].hideLabel=false}o[p].items.push(this.items[e])}}else{for(var e=0,n=this.items.length;e<n;e++){var r=e%d;if(this.items[e].fieldLabel){this.items[e].hideLabel=false}o[r].items.push(this.items[e])}}Ext.apply(q,{layoutConfig:{columns:d},items:o})}this.panel=new Ext.Container(q);this.panel.ownerCt=this;this.el=this.panel.getEl();if(this.forId&&this.itemCls){var c=this.el.up(this.itemCls).child("label",true);if(c){c.setAttribute("htmlFor",this.forId)}}var h=this.panel.findBy(function(i){return i.isFormField},this);this.items=new Ext.util.MixedCollection();this.items.addAll(h)}Ext.form.CheckboxGroup.superclass.onRender.call(this,k,g)},initValue:function(){if(this.value){this.setValue.apply(this,this.buffered?this.value:[this.value]);delete this.buffered;delete this.value}},afterRender:function(){Ext.form.CheckboxGroup.superclass.afterRender.call(this);this.eachItem(function(a){a.on("check",this.fireChecked,this);a.inGroup=true})},doLayout:function(){if(this.rendered){this.panel.forceLayout=this.ownerCt.forceLayout;this.panel.doLayout()}},fireChecked:function(){var a=[];this.eachItem(function(b){if(b.checked){a.push(b)}});this.fireEvent("change",this,a)},getErrors:function(){var b=Ext.form.CheckboxGroup.superclass.getErrors.apply(this,arguments);if(!this.allowBlank){var a=true;this.eachItem(function(c){if(c.checked){return(a=false)}});if(a){b.push(this.blankText)}}return b},isDirty:function(){if(this.disabled||!this.rendered){return false}var a=false;this.eachItem(function(b){if(b.isDirty()){a=true;return false}});return a},setReadOnly:function(a){if(this.rendered){this.eachItem(function(b){b.setReadOnly(a)})}this.readOnly=a},onDisable:function(){this.eachItem(function(a){a.disable()})},onEnable:function(){this.eachItem(function(a){a.enable()})},onResize:function(a,b){this.panel.setSize(a,b);this.panel.doLayout()},reset:function(){if(this.originalValue){this.eachItem(function(a){if(a.setValue){a.setValue(false);a.originalValue=a.getValue()}});this.resetOriginal=true;this.setValue(this.originalValue);delete this.resetOriginal}else{this.eachItem(function(a){if(a.reset){a.reset()}})}(function(){this.clearInvalid()}).defer(50,this)},setValue:function(){if(this.rendered){this.onSetValue.apply(this,arguments)}else{this.buffered=true;this.value=arguments}return this},onSetValue:function(d,c){if(arguments.length==1){if(Ext.isArray(d)){Ext.each(d,function(h,e){if(Ext.isObject(h)&&h.setValue){h.setValue(true);if(this.resetOriginal===true){h.originalValue=h.getValue()}}else{var g=this.items.itemAt(e);if(g){g.setValue(h)}}},this)}else{if(Ext.isObject(d)){for(var a in d){var b=this.getBox(a);if(b){b.setValue(d[a])}}}else{this.setValueForItem(d)}}}else{var b=this.getBox(d);if(b){b.setValue(c)}}},beforeDestroy:function(){Ext.destroy(this.panel);if(!this.rendered){Ext.destroy(this.items)}Ext.form.CheckboxGroup.superclass.beforeDestroy.call(this)},setValueForItem:function(a){a=String(a).split(",");this.eachItem(function(b){if(a.indexOf(b.inputValue)>-1){b.setValue(true)}})},getBox:function(b){var a=null;this.eachItem(function(c){if(b==c||c.dataIndex==b||c.id==b||c.getName()==b){a=c;return false}});return a},getValue:function(){var a=[];this.eachItem(function(b){if(b.checked){a.push(b)}});return a},eachItem:function(b,a){if(this.items&&this.items.each){this.items.each(b,a||this)}},getRawValue:Ext.emptyFn,setRawValue:Ext.emptyFn});Ext.reg("checkboxgroup",Ext.form.CheckboxGroup);Ext.form.CompositeField=Ext.extend(Ext.form.Field,{defaultMargins:"0 5 0 0",skipLastItemMargin:true,isComposite:true,combineErrors:true,labelConnector:", ",initComponent:function(){var g=[],b=this.items,e;for(var d=0,c=b.length;d<c;d++){e=b[d];if(!Ext.isEmpty(e.ref)){e.ref="../"+e.ref}g.push(e.fieldLabel);Ext.applyIf(e,this.defaults);if(!(d==c-1&&this.skipLastItemMargin)){Ext.applyIf(e,{margins:this.defaultMargins})}}this.fieldLabel=this.fieldLabel||this.buildLabel(g);this.fieldErrors=new Ext.util.MixedCollection(true,function(h){return h.field});this.fieldErrors.on({scope:this,add:this.updateInvalidMark,remove:this.updateInvalidMark,replace:this.updateInvalidMark});Ext.form.CompositeField.superclass.initComponent.apply(this,arguments);this.innerCt=new Ext.Container({layout:"hbox",items:this.items,cls:"x-form-composite",defaultMargins:"0 3 0 0",ownerCt:this});this.innerCt.ownerCt=undefined;var a=this.innerCt.findBy(function(h){return h.isFormField},this);this.items=new Ext.util.MixedCollection();this.items.addAll(a)},onRender:function(c,a){if(!this.el){var d=this.innerCt;d.render(c);this.el=d.getEl();if(this.combineErrors){this.eachItem(function(e){Ext.apply(e,{markInvalid:this.onFieldMarkInvalid.createDelegate(this,[e],0),clearInvalid:this.onFieldClearInvalid.createDelegate(this,[e],0)})})}var b=this.el.parent().parent().child("label",true);if(b){b.setAttribute("for",this.items.items[0].id)}}Ext.form.CompositeField.superclass.onRender.apply(this,arguments)},onFieldMarkInvalid:function(d,c){var b=d.getName(),a={field:b,errorName:d.fieldLabel||b,error:c};this.fieldErrors.replace(b,a);d.el.addClass(d.invalidClass)},onFieldClearInvalid:function(a){this.fieldErrors.removeKey(a.getName());a.el.removeClass(a.invalidClass)},updateInvalidMark:function(){var a=Ext.isIE6&&Ext.isStrict;if(this.fieldErrors.length==0){this.clearInvalid();if(a){this.clearInvalid.defer(50,this)}}else{var b=this.buildCombinedErrorMessage(this.fieldErrors.items);this.sortErrors();this.markInvalid(b);if(a){this.markInvalid(b)}}},validateValue:function(){var a=true;this.eachItem(function(b){if(!b.isValid()){a=false}});return a},buildCombinedErrorMessage:function(e){var d=[],b;for(var c=0,a=e.length;c<a;c++){b=e[c];d.push(String.format("{0}: {1}",b.errorName,b.error))}return d.join("<br />")},sortErrors:function(){var a=this.items;this.fieldErrors.sort("ASC",function(g,d){var c=function(b){return function(i){return i.getName()==b}};var h=a.findIndexBy(c(g.field)),e=a.findIndexBy(c(d.field));return h<e?-1:1})},reset:function(){this.eachItem(function(a){a.reset()});(function(){this.clearInvalid()}).defer(50,this)},clearInvalidChildren:function(){this.eachItem(function(a){a.clearInvalid()})},buildLabel:function(a){return Ext.clean(a).join(this.labelConnector)},isDirty:function(){if(this.disabled||!this.rendered){return false}var a=false;this.eachItem(function(b){if(b.isDirty()){a=true;return false}});return a},eachItem:function(b,a){if(this.items&&this.items.each){this.items.each(b,a||this)}},onResize:function(e,c,a,d){var b=this.innerCt;if(this.rendered&&b.rendered){b.setSize(e,c)}Ext.form.CompositeField.superclass.onResize.apply(this,arguments)},doLayout:function(c,b){if(this.rendered){var a=this.innerCt;a.forceLayout=this.ownerCt.forceLayout;a.doLayout(c,b)}},beforeDestroy:function(){Ext.destroy(this.innerCt);Ext.form.CompositeField.superclass.beforeDestroy.call(this)},setReadOnly:function(a){if(a==undefined){a=true}a=!!a;if(this.rendered){this.eachItem(function(b){b.setReadOnly(a)})}this.readOnly=a},onShow:function(){Ext.form.CompositeField.superclass.onShow.call(this);this.doLayout()},onDisable:function(){this.eachItem(function(a){a.disable()})},onEnable:function(){this.eachItem(function(a){a.enable()})}});Ext.reg("compositefield",Ext.form.CompositeField);Ext.form.Radio=Ext.extend(Ext.form.Checkbox,{inputType:"radio",markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,getGroupValue:function(){var a=this.el.up("form")||Ext.getBody();var b=a.child("input[name="+this.el.dom.name+"]:checked",true);return b?b.value:null},setValue:function(b){var a,d,c;if(typeof b=="boolean"){Ext.form.Radio.superclass.setValue.call(this,b)}else{if(this.rendered){a=this.getCheckEl();c=a.child("input[name="+this.el.dom.name+"][value="+b+"]",true);if(c){Ext.getCmp(c.id).setValue(true)}}}if(this.rendered&&this.checked){a=a||this.getCheckEl();d=this.getCheckEl().select("input[name="+this.el.dom.name+"]");d.each(function(e){if(e.dom.id!=this.id){Ext.getCmp(e.dom.id).setValue(false)}},this)}return this},getCheckEl:function(){if(this.inGroup){return this.el.up(".x-form-radio-group")}return this.el.up("form")||Ext.getBody()}});Ext.reg("radio",Ext.form.Radio);Ext.form.RadioGroup=Ext.extend(Ext.form.CheckboxGroup,{allowBlank:true,blankText:"You must select one item in this group",defaultType:"radio",groupCls:"x-form-radio-group",getValue:function(){var a=null;this.eachItem(function(b){if(b.checked){a=b;return false}});return a},onSetValue:function(c,b){if(arguments.length>1){var a=this.getBox(c);if(a){a.setValue(b);if(a.checked){this.eachItem(function(d){if(d!==a){d.setValue(false)}})}}}else{this.setValueForItem(c)}},setValueForItem:function(a){a=String(a).split(",")[0];this.eachItem(function(b){b.setValue(a==b.inputValue)})},fireChecked:function(){if(!this.checkTask){this.checkTask=new Ext.util.DelayedTask(this.bufferChecked,this)}this.checkTask.delay(10)},bufferChecked:function(){var a=null;this.eachItem(function(b){if(b.checked){a=b;return false}});this.fireEvent("change",this,a)},onDestroy:function(){if(this.checkTask){this.checkTask.cancel();this.checkTask=null}Ext.form.RadioGroup.superclass.onDestroy.call(this)}});Ext.reg("radiogroup",Ext.form.RadioGroup);Ext.form.Hidden=Ext.extend(Ext.form.Field,{inputType:"hidden",shouldLayout:false,onRender:function(){Ext.form.Hidden.superclass.onRender.apply(this,arguments)},initEvents:function(){this.originalValue=this.getValue()},setSize:Ext.emptyFn,setWidth:Ext.emptyFn,setHeight:Ext.emptyFn,setPosition:Ext.emptyFn,setPagePosition:Ext.emptyFn,markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn});Ext.reg("hidden",Ext.form.Hidden);Ext.form.BasicForm=Ext.extend(Ext.util.Observable,{constructor:function(b,a){Ext.apply(this,a);if(Ext.isString(this.paramOrder)){this.paramOrder=this.paramOrder.split(/[\s,|]/)}this.items=new Ext.util.MixedCollection(false,function(c){return c.getItemId()});this.addEvents("beforeaction","actionfailed","actioncomplete");if(b){this.initEl(b)}Ext.form.BasicForm.superclass.constructor.call(this)},timeout:30,paramOrder:undefined,paramsAsHash:false,waitTitle:"Please Wait...",activeAction:null,trackResetOnLoad:false,initEl:function(a){this.el=Ext.get(a);this.id=this.el.id||Ext.id();if(!this.standardSubmit){this.el.on("submit",this.onSubmit,this)}this.el.addClass("x-form")},getEl:function(){return this.el},onSubmit:function(a){a.stopEvent()},destroy:function(a){if(a!==true){this.items.each(function(b){Ext.destroy(b)});Ext.destroy(this.el)}this.items.clear();this.purgeListeners()},isValid:function(){var a=true;this.items.each(function(b){if(!b.validate()){a=false}});return a},isDirty:function(){var a=false;this.items.each(function(b){if(b.isDirty()){a=true;return false}});return a},doAction:function(b,a){if(Ext.isString(b)){b=new Ext.form.Action.ACTION_TYPES[b](this,a)}if(this.fireEvent("beforeaction",this,b)!==false){this.beforeAction(b);b.run.defer(100,b)}return this},submit:function(b){b=b||{};if(this.standardSubmit){var a=b.clientValidation===false||this.isValid();if(a){var c=this.el.dom;if(this.url&&Ext.isEmpty(c.action)){c.action=this.url}c.submit()}return a}var d=String.format("{0}submit",this.api?"direct":"");this.doAction(d,b);return this},load:function(a){var b=String.format("{0}load",this.api?"direct":"");this.doAction(b,a);return this},updateRecord:function(b){b.beginEdit();var a=b.fields,d,c;a.each(function(e){d=this.findField(e.name);if(d){c=d.getValue();if(typeof c!=undefined&&c.getGroupValue){c=c.getGroupValue()}else{if(d.eachItem){c=[];d.eachItem(function(g){c.push(g.getValue())})}}b.set(e.name,c)}},this);b.endEdit();return this},loadRecord:function(a){this.setValues(a.data);return this},beforeAction:function(a){this.items.each(function(c){if(c.isFormField&&c.syncValue){c.syncValue()}});var b=a.options;if(b.waitMsg){if(this.waitMsgTarget===true){this.el.mask(b.waitMsg,"x-mask-loading")}else{if(this.waitMsgTarget){this.waitMsgTarget=Ext.get(this.waitMsgTarget);this.waitMsgTarget.mask(b.waitMsg,"x-mask-loading")}else{Ext.MessageBox.wait(b.waitMsg,b.waitTitle||this.waitTitle)}}}},afterAction:function(a,c){this.activeAction=null;var b=a.options;if(b.waitMsg){if(this.waitMsgTarget===true){this.el.unmask()}else{if(this.waitMsgTarget){this.waitMsgTarget.unmask()}else{Ext.MessageBox.updateProgress(1);Ext.MessageBox.hide()}}}if(c){if(b.reset){this.reset()}Ext.callback(b.success,b.scope,[this,a]);this.fireEvent("actioncomplete",this,a)}else{Ext.callback(b.failure,b.scope,[this,a]);this.fireEvent("actionfailed",this,a)}},findField:function(c){var b=this.items.get(c);if(!Ext.isObject(b)){var a=function(d){if(d.isFormField){if(d.dataIndex==c||d.id==c||d.getName()==c){b=d;return false}else{if(d.isComposite){return d.items.each(a)}else{if(d instanceof Ext.form.CheckboxGroup&&d.rendered){return d.eachItem(a)}}}}};this.items.each(a)}return b||null},markInvalid:function(h){if(Ext.isArray(h)){for(var c=0,a=h.length;c<a;c++){var b=h[c];var d=this.findField(b.id);if(d){d.markInvalid(b.msg)}}}else{var e,g;for(g in h){if(!Ext.isFunction(h[g])&&(e=this.findField(g))){e.markInvalid(h[g])}}}return this},setValues:function(c){if(Ext.isArray(c)){for(var d=0,a=c.length;d<a;d++){var b=c[d];var e=this.findField(b.id);if(e){e.setValue(b.value);if(this.trackResetOnLoad){e.originalValue=e.getValue()}}}}else{var g,h;for(h in c){if(!Ext.isFunction(c[h])&&(g=this.findField(h))){g.setValue(c[h]);if(this.trackResetOnLoad){g.originalValue=g.getValue()}}}}return this},getValues:function(b){var a=Ext.lib.Ajax.serializeForm(this.el.dom);if(b===true){return a}return Ext.urlDecode(a)},getFieldValues:function(a){var d={},e,b,c;this.items.each(function(g){if(!g.disabled&&(a!==true||g.isDirty())){e=g.getName();b=d[e];c=g.getValue();if(Ext.isDefined(b)){if(Ext.isArray(b)){d[e].push(c)}else{d[e]=[b,c]}}else{d[e]=c}}});return d},clearInvalid:function(){this.items.each(function(a){a.clearInvalid()});return this},reset:function(){this.items.each(function(a){a.reset()});return this},add:function(){this.items.addAll(Array.prototype.slice.call(arguments,0));return this},remove:function(a){this.items.remove(a);return this},cleanDestroyed:function(){this.items.filterBy(function(a){return !!a.isDestroyed}).each(this.remove,this)},render:function(){this.items.each(function(a){if(a.isFormField&&!a.rendered&&document.getElementById(a.id)){a.applyToMarkup(a.id)}});return this},applyToFields:function(a){this.items.each(function(b){Ext.apply(b,a)});return this},applyIfToFields:function(a){this.items.each(function(b){Ext.applyIf(b,a)});return this},callFieldMethod:function(b,a){a=a||[];this.items.each(function(c){if(Ext.isFunction(c[b])){c[b].apply(c,a)}});return this}});Ext.BasicForm=Ext.form.BasicForm;Ext.FormPanel=Ext.extend(Ext.Panel,{minButtonWidth:75,labelAlign:"left",monitorValid:false,monitorPoll:200,layout:"form",initComponent:function(){this.form=this.createForm();Ext.FormPanel.superclass.initComponent.call(this);this.bodyCfg={tag:"form",cls:this.baseCls+"-body",method:this.method||"POST",id:this.formId||Ext.id()};if(this.fileUpload){this.bodyCfg.enctype="multipart/form-data"}this.initItems();this.addEvents("clientvalidation");this.relayEvents(this.form,["beforeaction","actionfailed","actioncomplete"])},createForm:function(){var a=Ext.applyIf({listeners:{}},this.initialConfig);return new Ext.form.BasicForm(null,a)},initFields:function(){var c=this.form;var a=this;var b=function(d){if(a.isField(d)){c.add(d)}else{if(d.findBy&&d!=a){a.applySettings(d);if(d.items&&d.items.each){d.items.each(b,this)}}}};this.items.each(b,this)},applySettings:function(b){var a=b.ownerCt;Ext.applyIf(b,{labelAlign:a.labelAlign,labelWidth:a.labelWidth,itemCls:a.itemCls})},getLayoutTarget:function(){return this.form.el},getForm:function(){return this.form},onRender:function(b,a){this.initFields();Ext.FormPanel.superclass.onRender.call(this,b,a);this.form.initEl(this.body)},beforeDestroy:function(){this.stopMonitoring();this.form.destroy(true);Ext.FormPanel.superclass.beforeDestroy.call(this)},isField:function(a){return !!a.setValue&&!!a.getValue&&!!a.markInvalid&&!!a.clearInvalid},initEvents:function(){Ext.FormPanel.superclass.initEvents.call(this);this.on({scope:this,add:this.onAddEvent,remove:this.onRemoveEvent});if(this.monitorValid){this.startMonitoring()}},onAdd:function(a){Ext.FormPanel.superclass.onAdd.call(this,a);this.processAdd(a)},onAddEvent:function(a,b){if(a!==this){this.processAdd(b)}},processAdd:function(a){if(this.isField(a)){this.form.add(a)}else{if(a.findBy){this.applySettings(a);this.form.add.apply(this.form,a.findBy(this.isField))}}},onRemove:function(a){Ext.FormPanel.superclass.onRemove.call(this,a);this.processRemove(a)},onRemoveEvent:function(a,b){if(a!==this){this.processRemove(b)}},processRemove:function(a){if(!this.destroying){if(this.isField(a)){this.form.remove(a)}else{if(a.findBy){Ext.each(a.findBy(this.isField),this.form.remove,this.form);this.form.cleanDestroyed()}}}},startMonitoring:function(){if(!this.validTask){this.validTask=new Ext.util.TaskRunner();this.validTask.start({run:this.bindHandler,interval:this.monitorPoll||200,scope:this})}},stopMonitoring:function(){if(this.validTask){this.validTask.stopAll();this.validTask=null}},load:function(){this.form.load.apply(this.form,arguments)},onDisable:function(){Ext.FormPanel.superclass.onDisable.call(this);if(this.form){this.form.items.each(function(){this.disable()})}},onEnable:function(){Ext.FormPanel.superclass.onEnable.call(this);if(this.form){this.form.items.each(function(){this.enable()})}},bindHandler:function(){var e=true;this.form.items.each(function(g){if(!g.isValid(true)){e=false;return false}});if(this.fbar){var b=this.fbar.items.items;for(var d=0,a=b.length;d<a;d++){var c=b[d];if(c.formBind===true&&c.disabled===e){c.setDisabled(!e)}}}this.fireEvent("clientvalidation",this,e)}});Ext.reg("form",Ext.FormPanel);Ext.form.FormPanel=Ext.FormPanel;Ext.form.FieldSet=Ext.extend(Ext.Panel,{baseCls:"x-fieldset",layout:"form",animCollapse:false,onRender:function(b,a){if(!this.el){this.el=document.createElement("fieldset");this.el.id=this.id;if(this.title||this.header||this.checkboxToggle){this.el.appendChild(document.createElement("legend")).className=this.baseCls+"-header"}}Ext.form.FieldSet.superclass.onRender.call(this,b,a);if(this.checkboxToggle){var c=typeof this.checkboxToggle=="object"?this.checkboxToggle:{tag:"input",type:"checkbox",name:this.checkboxName||this.id+"-checkbox"};this.checkbox=this.header.insertFirst(c);this.checkbox.dom.checked=!this.collapsed;this.mon(this.checkbox,"click",this.onCheckClick,this)}},onCollapse:function(a,b){if(this.checkbox){this.checkbox.dom.checked=false}Ext.form.FieldSet.superclass.onCollapse.call(this,a,b)},onExpand:function(a,b){if(this.checkbox){this.checkbox.dom.checked=true}Ext.form.FieldSet.superclass.onExpand.call(this,a,b)},onCheckClick:function(){this[this.checkbox.dom.checked?"expand":"collapse"]()}});Ext.reg("fieldset",Ext.form.FieldSet);Ext.form.HtmlEditor=Ext.extend(Ext.form.Field,{enableFormat:true,enableFontSize:true,enableColors:true,enableAlignments:true,enableLists:true,enableSourceEdit:true,enableLinks:true,enableFont:true,createLinkText:"Please enter the URL for the link:",defaultLinkValue:"http://",fontFamilies:["Arial","Courier New","Tahoma","Times New Roman","Verdana"],defaultFont:"tahoma",defaultValue:(Ext.isOpera||Ext.isIE6)?" ":"​",actionMode:"wrap",validationEvent:false,deferHeight:true,initialized:false,activated:false,sourceEditMode:false,onFocus:Ext.emptyFn,iframePad:3,hideMode:"offsets",defaultAutoCreate:{tag:"textarea",style:"width:500px;height:300px;",autocomplete:"off"},initComponent:function(){this.addEvents("initialize","activate","beforesync","beforepush","sync","push","editmodechange");Ext.form.HtmlEditor.superclass.initComponent.call(this)},createFontOptions:function(){var d=[],b=this.fontFamilies,c,g;for(var e=0,a=b.length;e<a;e++){c=b[e];g=c.toLowerCase();d.push('<option value="',g,'" style="font-family:',c,';"',(this.defaultFont==g?' selected="true">':">"),c,"</option>")}return d.join("")},createToolbar:function(e){var c=[];var a=Ext.QuickTips&&Ext.QuickTips.isEnabled();function d(k,h,i){return{itemId:k,cls:"x-btn-icon",iconCls:"x-edit-"+k,enableToggle:h!==false,scope:e,handler:i||e.relayBtnCmd,clickEvent:"mousedown",tooltip:a?e.buttonTips[k]||undefined:undefined,overflowText:e.buttonTips[k].title||undefined,tabIndex:-1}}if(this.enableFont&&!Ext.isSafari2){var g=new Ext.Toolbar.Item({autoEl:{tag:"select",cls:"x-font-select",html:this.createFontOptions()}});c.push(g,"-")}if(this.enableFormat){c.push(d("bold"),d("italic"),d("underline"))}if(this.enableFontSize){c.push("-",d("increasefontsize",false,this.adjustFont),d("decreasefontsize",false,this.adjustFont))}if(this.enableColors){c.push("-",{itemId:"forecolor",cls:"x-btn-icon",iconCls:"x-edit-forecolor",clickEvent:"mousedown",tooltip:a?e.buttonTips.forecolor||undefined:undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({allowReselect:true,focus:Ext.emptyFn,value:"000000",plain:true,listeners:{scope:this,select:function(i,h){this.execCmd("forecolor",Ext.isWebKit||Ext.isIE?"#"+h:h);this.deferFocus()}},clickEvent:"mousedown"})},{itemId:"backcolor",cls:"x-btn-icon",iconCls:"x-edit-backcolor",clickEvent:"mousedown",tooltip:a?e.buttonTips.backcolor||undefined:undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({focus:Ext.emptyFn,value:"FFFFFF",plain:true,allowReselect:true,listeners:{scope:this,select:function(i,h){if(Ext.isGecko){this.execCmd("useCSS",false);this.execCmd("hilitecolor",h);this.execCmd("useCSS",true);this.deferFocus()}else{this.execCmd(Ext.isOpera?"hilitecolor":"backcolor",Ext.isWebKit||Ext.isIE?"#"+h:h);this.deferFocus()}}},clickEvent:"mousedown"})})}if(this.enableAlignments){c.push("-",d("justifyleft"),d("justifycenter"),d("justifyright"))}if(!Ext.isSafari2){if(this.enableLinks){c.push("-",d("createlink",false,this.createLink))}if(this.enableLists){c.push("-",d("insertorderedlist"),d("insertunorderedlist"))}if(this.enableSourceEdit){c.push("-",d("sourceedit",true,function(h){this.toggleSourceEdit(!this.sourceEditMode)}))}}var b=new Ext.Toolbar({renderTo:this.wrap.dom.firstChild,items:c});if(g){this.fontSelect=g.el;this.mon(this.fontSelect,"change",function(){var h=this.fontSelect.dom.value;this.relayCmd("fontname",h);this.deferFocus()},this)}this.mon(b.el,"click",function(h){h.preventDefault()});this.tb=b;this.tb.doLayout()},onDisable:function(){this.wrap.mask();Ext.form.HtmlEditor.superclass.onDisable.call(this)},onEnable:function(){this.wrap.unmask();Ext.form.HtmlEditor.superclass.onEnable.call(this)},setReadOnly:function(b){Ext.form.HtmlEditor.superclass.setReadOnly.call(this,b);if(this.initialized){if(Ext.isIE){this.getEditorBody().contentEditable=!b}else{this.setDesignMode(!b)}var a=this.getEditorBody();if(a){a.style.cursor=this.readOnly?"default":"text"}this.disableItems(b)}},getDocMarkup:function(){var a=Ext.fly(this.iframe).getHeight()-this.iframePad*2;return String.format('<html><head><style type="text/css">body{border: 0; margin: 0; padding: {0}px; height: {1}px; cursor: text}</style></head><body></body></html>',this.iframePad,a)},getEditorBody:function(){var a=this.getDoc();return a.body||a.documentElement},getDoc:function(){return Ext.isIE?this.getWin().document:(this.iframe.contentDocument||this.getWin().document)},getWin:function(){return Ext.isIE?this.iframe.contentWindow:window.frames[this.iframe.name]},onRender:function(b,a){Ext.form.HtmlEditor.superclass.onRender.call(this,b,a);this.el.dom.style.border="0 none";this.el.dom.setAttribute("tabIndex",-1);this.el.addClass("x-hidden");if(Ext.isIE){this.el.applyStyles("margin-top:-1px;margin-bottom:-1px;")}this.wrap=this.el.wrap({cls:"x-html-editor-wrap",cn:{cls:"x-html-editor-tb"}});this.createToolbar(this);this.disableItems(true);this.tb.doLayout();this.createIFrame();if(!this.width){var c=this.el.getSize();this.setSize(c.width,this.height||c.height)}this.resizeEl=this.positionEl=this.wrap},createIFrame:function(){var a=document.createElement("iframe");a.name=Ext.id();a.frameBorder="0";a.style.overflow="auto";a.src=Ext.SSL_SECURE_URL;this.wrap.dom.appendChild(a);this.iframe=a;this.monitorTask=Ext.TaskMgr.start({run:this.checkDesignMode,scope:this,interval:100})},initFrame:function(){Ext.TaskMgr.stop(this.monitorTask);var b=this.getDoc();this.win=this.getWin();b.open();b.write(this.getDocMarkup());b.close();var a={run:function(){var c=this.getDoc();if(c.body||c.readyState=="complete"){Ext.TaskMgr.stop(a);this.setDesignMode(true);this.initEditor.defer(10,this)}},interval:10,duration:10000,scope:this};Ext.TaskMgr.start(a)},checkDesignMode:function(){if(this.wrap&&this.wrap.dom.offsetWidth){var a=this.getDoc();if(!a){return}if(!a.editorInitialized||this.getDesignMode()!="on"){this.initFrame()}}},setDesignMode:function(b){var a=this.getDoc();if(a){if(this.readOnly){b=false}a.designMode=(/on|true/i).test(String(b).toLowerCase())?"on":"off"}},getDesignMode:function(){var a=this.getDoc();if(!a){return""}return String(a.designMode).toLowerCase()},disableItems:function(a){if(this.fontSelect){this.fontSelect.dom.disabled=a}this.tb.items.each(function(b){if(b.getItemId()!="sourceedit"){b.setDisabled(a)}})},onResize:function(b,c){Ext.form.HtmlEditor.superclass.onResize.apply(this,arguments);if(this.el&&this.iframe){if(Ext.isNumber(b)){var e=b-this.wrap.getFrameWidth("lr");this.el.setWidth(e);this.tb.setWidth(e);this.iframe.style.width=Math.max(e,0)+"px"}if(Ext.isNumber(c)){var a=c-this.wrap.getFrameWidth("tb")-this.tb.el.getHeight();this.el.setHeight(a);this.iframe.style.height=Math.max(a,0)+"px";var d=this.getEditorBody();if(d){d.style.height=Math.max((a-(this.iframePad*2)),0)+"px"}}}},toggleSourceEdit:function(b){var d,a;if(b===undefined){b=!this.sourceEditMode}this.sourceEditMode=b===true;var c=this.tb.getComponent("sourceedit");if(c.pressed!==this.sourceEditMode){c.toggle(this.sourceEditMode);if(!c.xtbHidden){return}}if(this.sourceEditMode){this.previousSize=this.getSize();d=Ext.get(this.iframe).getHeight();this.disableItems(true);this.syncValue();this.iframe.className="x-hidden";this.el.removeClass("x-hidden");this.el.dom.removeAttribute("tabIndex");this.el.focus();this.el.dom.style.height=d+"px"}else{a=parseInt(this.el.dom.style.height,10);if(this.initialized){this.disableItems(this.readOnly)}this.pushValue();this.iframe.className="";this.el.addClass("x-hidden");this.el.dom.setAttribute("tabIndex",-1);this.deferFocus();this.setSize(this.previousSize);delete this.previousSize;this.iframe.style.height=a+"px"}this.fireEvent("editmodechange",this,this.sourceEditMode)},createLink:function(){var a=prompt(this.createLinkText,this.defaultLinkValue);if(a&&a!="http://"){this.relayCmd("createlink",a)}},initEvents:function(){this.originalValue=this.getValue()},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,setValue:function(a){Ext.form.HtmlEditor.superclass.setValue.call(this,a);this.pushValue();return this},cleanHtml:function(a){a=String(a);if(Ext.isWebKit){a=a.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi,"")}if(a.charCodeAt(0)==this.defaultValue.replace(/\D/g,"")){a=a.substring(1)}return a},syncValue:function(){if(this.initialized){var d=this.getEditorBody();var c=d.innerHTML;if(Ext.isWebKit){var b=d.getAttribute("style");var a=b.match(/text-align:(.*?);/i);if(a&&a[1]){c='<div style="'+a[0]+'">'+c+"</div>"}}c=this.cleanHtml(c);if(this.fireEvent("beforesync",this,c)!==false){this.el.dom.value=c;this.fireEvent("sync",this,c)}}},getValue:function(){this[this.sourceEditMode?"pushValue":"syncValue"]();return Ext.form.HtmlEditor.superclass.getValue.call(this)},pushValue:function(){if(this.initialized){var a=this.el.dom.value;if(!this.activated&&a.length<1){a=this.defaultValue}if(this.fireEvent("beforepush",this,a)!==false){this.getEditorBody().innerHTML=a;if(Ext.isGecko){this.setDesignMode(false);this.setDesignMode(true)}this.fireEvent("push",this,a)}}},deferFocus:function(){this.focus.defer(10,this)},focus:function(){if(this.win&&!this.sourceEditMode){this.win.focus()}else{this.el.focus()}},initEditor:function(){try{var c=this.getEditorBody(),a=this.el.getStyles("font-size","font-family","background-image","background-repeat","background-color","color"),g,b;a["background-attachment"]="fixed";c.bgProperties="fixed";Ext.DomHelper.applyStyles(c,a);g=this.getDoc();if(g){try{Ext.EventManager.removeAll(g)}catch(d){}}b=this.onEditorEvent.createDelegate(this);Ext.EventManager.on(g,{mousedown:b,dblclick:b,click:b,keyup:b,buffer:100});if(Ext.isGecko){Ext.EventManager.on(g,"keypress",this.applyCommand,this)}if(Ext.isIE||Ext.isWebKit||Ext.isOpera){Ext.EventManager.on(g,"keydown",this.fixKeys,this)}g.editorInitialized=true;this.initialized=true;this.pushValue();this.setReadOnly(this.readOnly);this.fireEvent("initialize",this)}catch(d){}},beforeDestroy:function(){if(this.monitorTask){Ext.TaskMgr.stop(this.monitorTask)}if(this.rendered){Ext.destroy(this.tb);var b=this.getDoc();if(b){try{Ext.EventManager.removeAll(b);for(var c in b){delete b[c]}}catch(a){}}if(this.wrap){this.wrap.dom.innerHTML="";this.wrap.remove()}}Ext.form.HtmlEditor.superclass.beforeDestroy.call(this)},onFirstFocus:function(){this.activated=true;this.disableItems(this.readOnly);if(Ext.isGecko){this.win.focus();var a=this.win.getSelection();if(!a.focusNode||a.focusNode.nodeType!=3){var b=a.getRangeAt(0);b.selectNodeContents(this.getEditorBody());b.collapse(true);this.deferFocus()}try{this.execCmd("useCSS",true);this.execCmd("styleWithCSS",false)}catch(c){}}this.fireEvent("activate",this)},adjustFont:function(b){var d=b.getItemId()=="increasefontsize"?1:-1,c=this.getDoc(),a=parseInt(c.queryCommandValue("FontSize")||2,10);if((Ext.isSafari&&!Ext.isSafari2)||Ext.isChrome||Ext.isAir){if(a<=10){a=1+d}else{if(a<=13){a=2+d}else{if(a<=16){a=3+d}else{if(a<=18){a=4+d}else{if(a<=24){a=5+d}else{a=6+d}}}}}a=a.constrain(1,6)}else{if(Ext.isSafari){d*=2}a=Math.max(1,a+d)+(Ext.isSafari?"px":0)}this.execCmd("FontSize",a)},onEditorEvent:function(a){this.updateToolbar()},updateToolbar:function(){if(this.readOnly){return}if(!this.activated){this.onFirstFocus();return}var b=this.tb.items.map,c=this.getDoc();if(this.enableFont&&!Ext.isSafari2){var a=(c.queryCommandValue("FontName")||this.defaultFont).toLowerCase();if(a!=this.fontSelect.dom.value){this.fontSelect.dom.value=a}}if(this.enableFormat){b.bold.toggle(c.queryCommandState("bold"));b.italic.toggle(c.queryCommandState("italic"));b.underline.toggle(c.queryCommandState("underline"))}if(this.enableAlignments){b.justifyleft.toggle(c.queryCommandState("justifyleft"));b.justifycenter.toggle(c.queryCommandState("justifycenter"));b.justifyright.toggle(c.queryCommandState("justifyright"))}if(!Ext.isSafari2&&this.enableLists){b.insertorderedlist.toggle(c.queryCommandState("insertorderedlist"));b.insertunorderedlist.toggle(c.queryCommandState("insertunorderedlist"))}Ext.menu.MenuMgr.hideAll();this.syncValue()},relayBtnCmd:function(a){this.relayCmd(a.getItemId())},relayCmd:function(b,a){(function(){this.focus();this.execCmd(b,a);this.updateToolbar()}).defer(10,this)},execCmd:function(b,a){var c=this.getDoc();c.execCommand(b,false,a===undefined?null:a);this.syncValue()},applyCommand:function(b){if(b.ctrlKey){var d=b.getCharCode(),a;if(d>0){d=String.fromCharCode(d);switch(d){case"b":a="bold";break;case"i":a="italic";break;case"u":a="underline";break}if(a){this.win.focus();this.execCmd(a);this.deferFocus();b.preventDefault()}}}},insertAtCursor:function(c){if(!this.activated){return}if(Ext.isIE){this.win.focus();var b=this.getDoc(),a=b.selection.createRange();if(a){a.pasteHTML(c);this.syncValue();this.deferFocus()}}else{this.win.focus();this.execCmd("InsertHTML",c);this.deferFocus()}},fixKeys:function(){if(Ext.isIE){return function(g){var a=g.getKey(),d=this.getDoc(),b;if(a==g.TAB){g.stopEvent();b=d.selection.createRange();if(b){b.collapse(true);b.pasteHTML(" ");this.deferFocus()}}else{if(a==g.ENTER){b=d.selection.createRange();if(b){var c=b.parentElement();if(!c||c.tagName.toLowerCase()!="li"){g.stopEvent();b.pasteHTML("<br />");b.collapse(false);b.select()}}}}}}else{if(Ext.isOpera){return function(b){var a=b.getKey();if(a==b.TAB){b.stopEvent();this.win.focus();this.execCmd("InsertHTML"," ");this.deferFocus()}}}else{if(Ext.isWebKit){return function(b){var a=b.getKey();if(a==b.TAB){b.stopEvent();this.execCmd("InsertText","\t");this.deferFocus()}else{if(a==b.ENTER){b.stopEvent();this.execCmd("InsertHtml","<br /><br />");this.deferFocus()}}}}}}}(),getToolbar:function(){return this.tb},buttonTips:{bold:{title:"Bold (Ctrl+B)",text:"Make the selected text bold.",cls:"x-html-editor-tip"},italic:{title:"Italic (Ctrl+I)",text:"Make the selected text italic.",cls:"x-html-editor-tip"},underline:{title:"Underline (Ctrl+U)",text:"Underline the selected text.",cls:"x-html-editor-tip"},increasefontsize:{title:"Grow Text",text:"Increase the font size.",cls:"x-html-editor-tip"},decreasefontsize:{title:"Shrink Text",text:"Decrease the font size.",cls:"x-html-editor-tip"},backcolor:{title:"Text Highlight Color",text:"Change the background color of the selected text.",cls:"x-html-editor-tip"},forecolor:{title:"Font Color",text:"Change the color of the selected text.",cls:"x-html-editor-tip"},justifyleft:{title:"Align Text Left",text:"Align text to the left.",cls:"x-html-editor-tip"},justifycenter:{title:"Center Text",text:"Center text in the editor.",cls:"x-html-editor-tip"},justifyright:{title:"Align Text Right",text:"Align text to the right.",cls:"x-html-editor-tip"},insertunorderedlist:{title:"Bullet List",text:"Start a bulleted list.",cls:"x-html-editor-tip"},insertorderedlist:{title:"Numbered List",text:"Start a numbered list.",cls:"x-html-editor-tip"},createlink:{title:"Hyperlink",text:"Make the selected text a hyperlink.",cls:"x-html-editor-tip"},sourceedit:{title:"Source Edit",text:"Switch to source editing mode.",cls:"x-html-editor-tip"}}});Ext.reg("htmleditor",Ext.form.HtmlEditor);Ext.form.TimeField=Ext.extend(Ext.form.ComboBox,{minValue:undefined,maxValue:undefined,minText:"The time in this field must be equal to or after {0}",maxText:"The time in this field must be equal to or before {0}",invalidText:"{0} is not a valid time",format:"g:i A",altFormats:"g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|ha|gA|h a|g a|g A|gi|hi|gia|hia|g|H|gi a|hi a|giA|hiA|gi A|hi A",increment:15,mode:"local",triggerAction:"all",typeAhead:false,initDate:"1/1/2008",initDateFormat:"j/n/Y",initComponent:function(){if(Ext.isDefined(this.minValue)){this.setMinValue(this.minValue,true)}if(Ext.isDefined(this.maxValue)){this.setMaxValue(this.maxValue,true)}if(!this.store){this.generateStore(true)}Ext.form.TimeField.superclass.initComponent.call(this)},setMinValue:function(b,a){this.setLimit(b,true,a);return this},setMaxValue:function(b,a){this.setLimit(b,false,a);return this},generateStore:function(b){var c=this.minValue||new Date(this.initDate).clearTime(),a=this.maxValue||new Date(this.initDate).clearTime().add("mi",(24*60)-1),d=[];while(c<=a){d.push(c.dateFormat(this.format));c=c.add("mi",this.increment)}this.bindStore(d,b)},setLimit:function(b,g,a){var e;if(Ext.isString(b)){e=this.parseDate(b)}else{if(Ext.isDate(b)){e=b}}if(e){var c=new Date(this.initDate).clearTime();c.setHours(e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds());this[g?"minValue":"maxValue"]=c;if(!a){this.generateStore()}}},getValue:function(){var a=Ext.form.TimeField.superclass.getValue.call(this);return this.formatDate(this.parseDate(a))||""},setValue:function(a){return Ext.form.TimeField.superclass.setValue.call(this,this.formatDate(this.parseDate(a)))},validateValue:Ext.form.DateField.prototype.validateValue,formatDate:Ext.form.DateField.prototype.formatDate,parseDate:function(h){if(!h||Ext.isDate(h)){return h}var k=this.initDate+" ",g=this.initDateFormat+" ",b=Date.parseDate(k+h,g+this.format),c=this.altFormats;if(!b&&c){if(!this.altFormatsArray){this.altFormatsArray=c.split("|")}for(var e=0,d=this.altFormatsArray,a=d.length;e<a&&!b;e++){b=Date.parseDate(k+h,g+d[e])}}return b}});Ext.reg("timefield",Ext.form.TimeField);Ext.form.SliderField=Ext.extend(Ext.form.Field,{useTips:true,tipText:null,actionMode:"wrap",initComponent:function(){var b=Ext.copyTo({id:this.id+"-slider"},this.initialConfig,["vertical","minValue","maxValue","decimalPrecision","keyIncrement","increment","clickToChange","animate"]);if(this.useTips){var a=this.tipText?{getText:this.tipText}:{};b.plugins=[new Ext.slider.Tip(a)]}this.slider=new Ext.Slider(b);Ext.form.SliderField.superclass.initComponent.call(this)},onRender:function(b,a){this.autoCreate={id:this.id,name:this.name,type:"hidden",tag:"input"};Ext.form.SliderField.superclass.onRender.call(this,b,a);this.wrap=this.el.wrap({cls:"x-form-field-wrap"});this.resizeEl=this.positionEl=this.wrap;this.slider.render(this.wrap)},onResize:function(b,c,d,a){Ext.form.SliderField.superclass.onResize.call(this,b,c,d,a);this.slider.setSize(b,c)},initEvents:function(){Ext.form.SliderField.superclass.initEvents.call(this);this.slider.on("change",this.onChange,this)},onChange:function(b,a){this.setValue(a,undefined,true)},onEnable:function(){Ext.form.SliderField.superclass.onEnable.call(this);this.slider.enable()},onDisable:function(){Ext.form.SliderField.superclass.onDisable.call(this);this.slider.disable()},beforeDestroy:function(){Ext.destroy(this.slider);Ext.form.SliderField.superclass.beforeDestroy.call(this)},alignErrorIcon:function(){this.errorIcon.alignTo(this.slider.el,"tl-tr",[2,0])},setMinValue:function(a){this.slider.setMinValue(a);return this},setMaxValue:function(a){this.slider.setMaxValue(a);return this},setValue:function(c,b,a){if(!a){this.slider.setValue(c,b)}return Ext.form.SliderField.superclass.setValue.call(this,this.slider.getValue())},getValue:function(){return this.slider.getValue()}});Ext.reg("sliderfield",Ext.form.SliderField);Ext.form.Label=Ext.extend(Ext.BoxComponent,{onRender:function(b,a){if(!this.el){this.el=document.createElement("label");this.el.id=this.getId();this.el.innerHTML=this.text?Ext.util.Format.htmlEncode(this.text):(this.html||"");if(this.forId){this.el.setAttribute("for",this.forId)}}Ext.form.Label.superclass.onRender.call(this,b,a)},setText:function(a,b){var c=b===false;this[!c?"text":"html"]=a;delete this[c?"text":"html"];if(this.rendered){this.el.dom.innerHTML=b!==false?Ext.util.Format.htmlEncode(a):a}return this}});Ext.reg("label",Ext.form.Label);Ext.form.Action=function(b,a){this.form=b;this.options=a||{}};Ext.form.Action.CLIENT_INVALID="client";Ext.form.Action.SERVER_INVALID="server";Ext.form.Action.CONNECT_FAILURE="connect";Ext.form.Action.LOAD_FAILURE="load";Ext.form.Action.prototype={type:"default",run:function(a){},success:function(a){},handleResponse:function(a){},failure:function(a){this.response=a;this.failureType=Ext.form.Action.CONNECT_FAILURE;this.form.afterAction(this,false)},processResponse:function(a){this.response=a;if(!a.responseText&&!a.responseXML){return true}this.result=this.handleResponse(a);return this.result},getUrl:function(c){var a=this.options.url||this.form.url||this.form.el.dom.action;if(c){var b=this.getParams();if(b){a=Ext.urlAppend(a,b)}}return a},getMethod:function(){return(this.options.method||this.form.method||this.form.el.dom.method||"POST").toUpperCase()},getParams:function(){var a=this.form.baseParams;var b=this.options.params;if(b){if(typeof b=="object"){b=Ext.urlEncode(Ext.applyIf(b,a))}else{if(typeof b=="string"&&a){b+="&"+Ext.urlEncode(a)}}}else{if(a){b=Ext.urlEncode(a)}}return b},createCallback:function(a){var a=a||{};return{success:this.success,failure:this.failure,scope:this,timeout:(a.timeout*1000)||(this.form.timeout*1000),upload:this.form.fileUpload?this.success:undefined}}};Ext.form.Action.Submit=function(b,a){Ext.form.Action.Submit.superclass.constructor.call(this,b,a)};Ext.extend(Ext.form.Action.Submit,Ext.form.Action,{type:"submit",run:function(){var e=this.options,g=this.getMethod(),d=g=="GET";if(e.clientValidation===false||this.form.isValid()){if(e.submitEmptyText===false){var a=this.form.items,c=[],b=function(h){if(h.el.getValue()==h.emptyText){c.push(h);h.el.dom.value=""}if(h.isComposite&&h.rendered){h.items.each(b)}};a.each(b)}Ext.Ajax.request(Ext.apply(this.createCallback(e),{form:this.form.el.dom,url:this.getUrl(d),method:g,headers:e.headers,params:!d?this.getParams():null,isUpload:this.form.fileUpload}));if(e.submitEmptyText===false){Ext.each(c,function(h){if(h.applyEmptyText){h.applyEmptyText()}})}}else{if(e.clientValidation!==false){this.failureType=Ext.form.Action.CLIENT_INVALID;this.form.afterAction(this,false)}}},success:function(b){var a=this.processResponse(b);if(a===true||a.success){this.form.afterAction(this,true);return}if(a.errors){this.form.markInvalid(a.errors)}this.failureType=Ext.form.Action.SERVER_INVALID;this.form.afterAction(this,false)},handleResponse:function(c){if(this.form.errorReader){var b=this.form.errorReader.read(c);var g=[];if(b.records){for(var d=0,a=b.records.length;d<a;d++){var e=b.records[d];g[d]=e.data}}if(g.length<1){g=null}return{success:b.success,errors:g}}return Ext.decode(c.responseText)}});Ext.form.Action.Load=function(b,a){Ext.form.Action.Load.superclass.constructor.call(this,b,a);this.reader=this.form.reader};Ext.extend(Ext.form.Action.Load,Ext.form.Action,{type:"load",run:function(){Ext.Ajax.request(Ext.apply(this.createCallback(this.options),{method:this.getMethod(),url:this.getUrl(false),headers:this.options.headers,params:this.getParams()}))},success:function(b){var a=this.processResponse(b);if(a===true||!a.success||!a.data){this.failureType=Ext.form.Action.LOAD_FAILURE;this.form.afterAction(this,false);return}this.form.clearInvalid();this.form.setValues(a.data);this.form.afterAction(this,true)},handleResponse:function(b){if(this.form.reader){var a=this.form.reader.read(b);var c=a.records&&a.records[0]?a.records[0].data:null;return{success:a.success,data:c}}return Ext.decode(b.responseText)}});Ext.form.Action.DirectLoad=Ext.extend(Ext.form.Action.Load,{constructor:function(b,a){Ext.form.Action.DirectLoad.superclass.constructor.call(this,b,a)},type:"directload",run:function(){var a=this.getParams();a.push(this.success,this);this.form.api.load.apply(window,a)},getParams:function(){var c=[],h={};var e=this.form.baseParams;var g=this.options.params;Ext.apply(h,g,e);var b=this.form.paramOrder;if(b){for(var d=0,a=b.length;d<a;d++){c.push(h[b[d]])}}else{if(this.form.paramsAsHash){c.push(h)}}return c},processResponse:function(a){this.result=a;return a},success:function(a,b){if(b.type==Ext.Direct.exceptions.SERVER){a={}}Ext.form.Action.DirectLoad.superclass.success.call(this,a)}});Ext.form.Action.DirectSubmit=Ext.extend(Ext.form.Action.Submit,{constructor:function(b,a){Ext.form.Action.DirectSubmit.superclass.constructor.call(this,b,a)},type:"directsubmit",run:function(){var a=this.options;if(a.clientValidation===false||this.form.isValid()){this.success.params=this.getParams();this.form.api.submit(this.form.el.dom,this.success,this)}else{if(a.clientValidation!==false){this.failureType=Ext.form.Action.CLIENT_INVALID;this.form.afterAction(this,false)}}},getParams:function(){var c={};var a=this.form.baseParams;var b=this.options.params;Ext.apply(c,b,a);return c},processResponse:function(a){this.result=a;return a},success:function(a,b){if(b.type==Ext.Direct.exceptions.SERVER){a={}}Ext.form.Action.DirectSubmit.superclass.success.call(this,a)}});Ext.form.Action.ACTION_TYPES={load:Ext.form.Action.Load,submit:Ext.form.Action.Submit,directload:Ext.form.Action.DirectLoad,directsubmit:Ext.form.Action.DirectSubmit};Ext.form.VTypes=function(){var c=/^[a-zA-Z_]+$/,d=/^[a-zA-Z0-9_]+$/,b=/^(\w+)([\-+.][\w]+)*@(\w[\-\w]*\.){1,5}([A-Za-z]){2,6}$/,a=/(((^https?)|(^ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i;return{email:function(e){return b.test(e)},emailText:'This field should be an e-mail address in the format "user@example.com"',emailMask:/[a-z0-9_\.\-@\+]/i,url:function(e){return a.test(e)},urlText:'This field should be a URL in the format "http://www.example.com"',alpha:function(e){return c.test(e)},alphaText:"This field should only contain letters and _",alphaMask:/[a-z_]/i,alphanum:function(e){return d.test(e)},alphanumText:"This field should only contain letters, numbers and _",alphanumMask:/[a-z0-9_]/i}}();Ext.grid.GridPanel=Ext.extend(Ext.Panel,{autoExpandColumn:false,autoExpandMax:1000,autoExpandMin:50,columnLines:false,ddText:"{0} selected row{1}",deferRowRender:true,enableColumnHide:true,enableColumnMove:true,enableDragDrop:false,enableHdMenu:true,loadMask:false,minColumnWidth:25,stripeRows:false,trackMouseOver:true,stateEvents:["columnmove","columnresize","sortchange","groupchange"],view:null,bubbleEvents:[],rendered:false,viewReady:false,initComponent:function(){Ext.grid.GridPanel.superclass.initComponent.call(this);if(this.columnLines){this.cls=(this.cls||"")+" x-grid-with-col-lines"}this.autoScroll=false;this.autoWidth=false;if(Ext.isArray(this.columns)){this.colModel=new Ext.grid.ColumnModel(this.columns);delete this.columns}if(this.ds){this.store=this.ds;delete this.ds}if(this.cm){this.colModel=this.cm;delete this.cm}if(this.sm){this.selModel=this.sm;delete this.sm}this.store=Ext.StoreMgr.lookup(this.store);this.addEvents("click","dblclick","contextmenu","mousedown","mouseup","mouseover","mouseout","keypress","keydown","cellmousedown","rowmousedown","headermousedown","groupmousedown","rowbodymousedown","containermousedown","cellclick","celldblclick","rowclick","rowdblclick","headerclick","headerdblclick","groupclick","groupdblclick","containerclick","containerdblclick","rowbodyclick","rowbodydblclick","rowcontextmenu","cellcontextmenu","headercontextmenu","groupcontextmenu","containercontextmenu","rowbodycontextmenu","bodyscroll","columnresize","columnmove","sortchange","groupchange","reconfigure","viewready")},onRender:function(d,a){Ext.grid.GridPanel.superclass.onRender.apply(this,arguments);var e=this.getGridEl();this.el.addClass("x-grid-panel");this.mon(e,{scope:this,mousedown:this.onMouseDown,click:this.onClick,dblclick:this.onDblClick,contextmenu:this.onContextMenu});this.relayEvents(e,["mousedown","mouseup","mouseover","mouseout","keypress","keydown"]);var b=this.getView();b.init(this);b.render();this.getSelectionModel().init(this)},initEvents:function(){Ext.grid.GridPanel.superclass.initEvents.call(this);if(this.loadMask){this.loadMask=new Ext.LoadMask(this.bwrap,Ext.apply({store:this.store},this.loadMask))}},initStateEvents:function(){Ext.grid.GridPanel.superclass.initStateEvents.call(this);this.mon(this.colModel,"hiddenchange",this.saveState,this,{delay:100})},applyState:function(a){var l=this.colModel,g=a.columns,k=this.store,n,h,m;if(g){for(var d=0,e=g.length;d<e;d++){n=g[d];h=l.getColumnById(n.id);if(h){m=l.getIndexById(n.id);l.setState(m,{hidden:n.hidden,width:n.width,sortable:n.sortable});if(m!=d){l.moveColumn(m,d)}}}}if(k){n=a.sort;if(n){k[k.remoteSort?"setDefaultSort":"sort"](n.field,n.direction)}n=a.group;if(k.groupBy){if(n){k.groupBy(n)}else{k.clearGrouping()}}}var b=Ext.apply({},a);delete b.columns;delete b.sort;Ext.grid.GridPanel.superclass.applyState.call(this,b)},getState:function(){var g={columns:[]},b=this.store,e,a;for(var d=0,h;(h=this.colModel.config[d]);d++){g.columns[d]={id:h.id,width:h.width};if(h.hidden){g.columns[d].hidden=true}if(h.sortable){g.columns[d].sortable=true}}if(b){e=b.getSortState();if(e){g.sort=e}if(b.getGroupState){a=b.getGroupState();if(a){g.group=a}}}return g},afterRender:function(){Ext.grid.GridPanel.superclass.afterRender.call(this);var a=this.view;this.on("bodyresize",a.layout,a);a.layout(true);if(this.deferRowRender){if(!this.deferRowRenderTask){this.deferRowRenderTask=new Ext.util.DelayedTask(a.afterRender,this.view)}this.deferRowRenderTask.delay(10)}else{a.afterRender()}this.viewReady=true},reconfigure:function(a,b){var c=this.rendered;if(c){if(this.loadMask){this.loadMask.destroy();this.loadMask=new Ext.LoadMask(this.bwrap,Ext.apply({},{store:a},this.initialConfig.loadMask))}}if(this.view){this.view.initData(a,b)}this.store=a;this.colModel=b;if(c){this.view.refresh(true)}this.fireEvent("reconfigure",this,a,b)},onDestroy:function(){if(this.deferRowRenderTask&&this.deferRowRenderTask.cancel){this.deferRowRenderTask.cancel()}if(this.rendered){Ext.destroy(this.view,this.loadMask)}else{if(this.store&&this.store.autoDestroy){this.store.destroy()}}Ext.destroy(this.colModel,this.selModel);this.store=this.selModel=this.colModel=this.view=this.loadMask=null;Ext.grid.GridPanel.superclass.onDestroy.call(this)},processEvent:function(a,b){this.view.processEvent(a,b)},onClick:function(a){this.processEvent("click",a)},onMouseDown:function(a){this.processEvent("mousedown",a)},onContextMenu:function(b,a){this.processEvent("contextmenu",b)},onDblClick:function(a){this.processEvent("dblclick",a)},walkCells:function(l,c,b,e,k){var i=this.colModel,g=i.getColumnCount(),a=this.store,h=a.getCount(),d=true;if(b<0){if(c<0){l--;d=false}while(l>=0){if(!d){c=g-1}d=false;while(c>=0){if(e.call(k||this,l,c,i)===true){return[l,c]}c--}l--}}else{if(c>=g){l++;d=false}while(l<h){if(!d){c=0}d=false;while(c<g){if(e.call(k||this,l,c,i)===true){return[l,c]}c++}l++}}return null},getGridEl:function(){return this.body},stopEditing:Ext.emptyFn,getSelectionModel:function(){if(!this.selModel){this.selModel=new Ext.grid.RowSelectionModel(this.disableSelection?{selectRow:Ext.emptyFn}:null)}return this.selModel},getStore:function(){return this.store},getColumnModel:function(){return this.colModel},getView:function(){if(!this.view){this.view=new Ext.grid.GridView(this.viewConfig)}return this.view},getDragDropText:function(){var a=this.selModel.getCount();return String.format(this.ddText,a,a==1?"":"s")}});Ext.reg("grid",Ext.grid.GridPanel);Ext.grid.PivotGrid=Ext.extend(Ext.grid.GridPanel,{aggregator:"sum",renderer:undefined,initComponent:function(){Ext.grid.PivotGrid.superclass.initComponent.apply(this,arguments);this.initAxes();this.enableColumnResize=false;this.viewConfig=Ext.apply(this.viewConfig||{},{forceFit:true});this.colModel=new Ext.grid.ColumnModel({})},getAggregator:function(){if(typeof this.aggregator=="string"){return Ext.grid.PivotAggregatorMgr.types[this.aggregator]}else{return this.aggregator}},setAggregator:function(a){this.aggregator=a},setMeasure:function(a){this.measure=a},setLeftAxis:function(b,a){this.leftAxis=b;if(a){this.view.refresh()}},setTopAxis:function(b,a){this.topAxis=b;if(a){this.view.refresh()}},initAxes:function(){var a=Ext.grid.PivotAxis;if(!(this.leftAxis instanceof a)){this.setLeftAxis(new a({orientation:"vertical",dimensions:this.leftAxis||[],store:this.store}))}if(!(this.topAxis instanceof a)){this.setTopAxis(new a({orientation:"horizontal",dimensions:this.topAxis||[],store:this.store}))}},extractData:function(){var c=this.store.data.items,s=c.length,q=[],h,g,e,d;if(s==0){return[]}var l=this.leftAxis.getTuples(),o=l.length,m=this.topAxis.getTuples(),a=m.length,b=this.getAggregator();for(g=0;g<s;g++){h=c[g];for(e=0;e<o;e++){q[e]=q[e]||[];if(l[e].matcher(h)===true){for(d=0;d<a;d++){q[e][d]=q[e][d]||[];if(m[d].matcher(h)){q[e][d].push(h)}}}}}var n=q.length,p,r;for(g=0;g<n;g++){r=q[g];p=r.length;for(e=0;e<p;e++){q[g][e]=b(q[g][e],this.measure)}}return q},getView:function(){if(!this.view){this.view=new Ext.grid.PivotGridView(this.viewConfig)}return this.view}});Ext.reg("pivotgrid",Ext.grid.PivotGrid);Ext.grid.PivotAggregatorMgr=new Ext.AbstractManager();Ext.grid.PivotAggregatorMgr.registerType("sum",function(a,c){var e=a.length,d=0,b;for(b=0;b<e;b++){d+=a[b].get(c)}return d});Ext.grid.PivotAggregatorMgr.registerType("avg",function(a,c){var e=a.length,d=0,b;for(b=0;b<e;b++){d+=a[b].get(c)}return(d/e)||"n/a"});Ext.grid.PivotAggregatorMgr.registerType("min",function(a,c){var e=[],d=a.length,b;for(b=0;b<d;b++){e.push(a[b].get(c))}return Math.min.apply(this,e)||"n/a"});Ext.grid.PivotAggregatorMgr.registerType("max",function(a,c){var e=[],d=a.length,b;for(b=0;b<d;b++){e.push(a[b].get(c))}return Math.max.apply(this,e)||"n/a"});Ext.grid.PivotAggregatorMgr.registerType("count",function(a,b){return a.length});Ext.grid.GridView=Ext.extend(Ext.util.Observable,{deferEmptyText:true,scrollOffset:undefined,autoFill:false,forceFit:false,sortClasses:["sort-asc","sort-desc"],sortAscText:"Sort Ascending",sortDescText:"Sort Descending",columnsText:"Columns",selectedRowClass:"x-grid3-row-selected",borderWidth:2,tdClass:"x-grid3-cell",hdCls:"x-grid3-hd",markDirty:true,cellSelectorDepth:4,rowSelectorDepth:10,rowBodySelectorDepth:10,cellSelector:"td.x-grid3-cell",rowSelector:"div.x-grid3-row",rowBodySelector:"div.x-grid3-row-body",firstRowCls:"x-grid3-row-first",lastRowCls:"x-grid3-row-last",rowClsRe:/(?:^|\s+)x-grid3-row-(first|last|alt)(?:\s+|$)/g,headerMenuOpenCls:"x-grid3-hd-menu-open",rowOverCls:"x-grid3-row-over",constructor:function(a){Ext.apply(this,a);this.addEvents("beforerowremoved","beforerowsinserted","beforerefresh","rowremoved","rowsinserted","rowupdated","refresh");Ext.grid.GridView.superclass.constructor.call(this)},masterTpl:new Ext.Template('<div class="x-grid3" hidefocus="true">','<div class="x-grid3-viewport">','<div class="x-grid3-header">','<div class="x-grid3-header-inner">','<div class="x-grid3-header-offset" style="{ostyle}">{header}</div>',"</div>",'<div class="x-clear"></div>',"</div>",'<div class="x-grid3-scroller">','<div class="x-grid3-body" style="{bstyle}">{body}</div>','<a href="#" class="x-grid3-focus" tabIndex="-1"></a>',"</div>","</div>",'<div class="x-grid3-resize-marker"> </div>','<div class="x-grid3-resize-proxy"> </div>',"</div>"),headerTpl:new Ext.Template('<table border="0" cellspacing="0" cellpadding="0" style="{tstyle}">',"<thead>",'<tr class="x-grid3-hd-row">{cells}</tr>',"</thead>","</table>"),bodyTpl:new Ext.Template("{rows}"),cellTpl:new Ext.Template('<td class="x-grid3-col x-grid3-cell x-grid3-td-{id} {css}" style="{style}" tabIndex="0" {cellAttr}>','<div class="x-grid3-cell-inner x-grid3-col-{id}" unselectable="on" {attr}>{value}</div>',"</td>"),initTemplates:function(){var c=this.templates||{},d,b,g=new Ext.Template('<td class="x-grid3-hd x-grid3-cell x-grid3-td-{id} {css}" style="{style}">','<div {tooltip} {attr} class="x-grid3-hd-inner x-grid3-hd-{id}" unselectable="on" style="{istyle}">',this.grid.enableHdMenu?'<a class="x-grid3-hd-btn" href="#"></a>':"","{value}",'<img alt="" class="x-grid3-sort-icon" src="',Ext.BLANK_IMAGE_URL,'" />',"</div>","</td>"),a=['<tr class="x-grid3-row-body-tr" style="{bodyStyle}">','<td colspan="{cols}" class="x-grid3-body-cell" tabIndex="0" hidefocus="on">','<div class="x-grid3-row-body">{body}</div>',"</td>","</tr>"].join(""),e=['<table class="x-grid3-row-table" border="0" cellspacing="0" cellpadding="0" style="{tstyle}">',"<tbody>","<tr>{cells}</tr>",this.enableRowBody?a:"","</tbody>","</table>"].join("");Ext.applyIf(c,{hcell:g,cell:this.cellTpl,body:this.bodyTpl,header:this.headerTpl,master:this.masterTpl,row:new Ext.Template('<div class="x-grid3-row {alt}" style="{tstyle}">'+e+"</div>"),rowInner:new Ext.Template(e)});for(b in c){d=c[b];if(d&&Ext.isFunction(d.compile)&&!d.compiled){d.disableFormats=true;d.compile()}}this.templates=c;this.colRe=new RegExp("x-grid3-td-([^\\s]+)","")},fly:function(a){if(!this._flyweight){this._flyweight=new Ext.Element.Flyweight(document.body)}this._flyweight.dom=a;return this._flyweight},getEditorParent:function(){return this.scroller.dom},initElements:function(){var b=Ext.Element,d=Ext.get(this.grid.getGridEl().dom.firstChild),e=new b(d.child("div.x-grid3-viewport")),c=new b(e.child("div.x-grid3-header")),a=new b(e.child("div.x-grid3-scroller"));if(this.grid.hideHeaders){c.setDisplayed(false)}if(this.forceFit){a.setStyle("overflow-x","hidden")}Ext.apply(this,{el:d,mainWrap:e,scroller:a,mainHd:c,innerHd:c.child("div.x-grid3-header-inner").dom,mainBody:new b(b.fly(a).child("div.x-grid3-body")),focusEl:new b(b.fly(a).child("a")),resizeMarker:new b(d.child("div.x-grid3-resize-marker")),resizeProxy:new b(d.child("div.x-grid3-resize-proxy"))});this.focusEl.swallowEvent("click",true)},getRows:function(){return this.hasRows()?this.mainBody.dom.childNodes:[]},findCell:function(a){if(!a){return false}return this.fly(a).findParent(this.cellSelector,this.cellSelectorDepth)},findCellIndex:function(d,c){var b=this.findCell(d),a;if(b){a=this.fly(b).hasClass(c);if(!c||a){return this.getCellIndex(b)}}return false},getCellIndex:function(b){if(b){var a=b.className.match(this.colRe);if(a&&a[1]){return this.cm.getIndexById(a[1])}}return false},findHeaderCell:function(b){var a=this.findCell(b);return a&&this.fly(a).hasClass(this.hdCls)?a:null},findHeaderIndex:function(a){return this.findCellIndex(a,this.hdCls)},findRow:function(a){if(!a){return false}return this.fly(a).findParent(this.rowSelector,this.rowSelectorDepth)},findRowIndex:function(a){var b=this.findRow(a);return b?b.rowIndex:false},findRowBody:function(a){if(!a){return false}return this.fly(a).findParent(this.rowBodySelector,this.rowBodySelectorDepth)},getRow:function(a){return this.getRows()[a]},getCell:function(b,a){return Ext.fly(this.getRow(b)).query(this.cellSelector)[a]},getHeaderCell:function(a){return this.mainHd.dom.getElementsByTagName("td")[a]},addRowClass:function(b,a){var c=this.getRow(b);if(c){this.fly(c).addClass(a)}},removeRowClass:function(c,a){var b=this.getRow(c);if(b){this.fly(b).removeClass(a)}},removeRow:function(a){Ext.removeNode(this.getRow(a));this.syncFocusEl(a)},removeRows:function(c,a){var b=this.mainBody.dom,d;for(d=c;d<=a;d++){Ext.removeNode(b.childNodes[c])}this.syncFocusEl(c)},getScrollState:function(){var a=this.scroller.dom;return{left:a.scrollLeft,top:a.scrollTop}},restoreScroll:function(a){var b=this.scroller.dom;b.scrollLeft=a.left;b.scrollTop=a.top},scrollToTop:function(){var a=this.scroller.dom;a.scrollTop=0;a.scrollLeft=0},syncScroll:function(){this.syncHeaderScroll();var a=this.scroller.dom;this.grid.fireEvent("bodyscroll",a.scrollLeft,a.scrollTop)},syncHeaderScroll:function(){var a=this.innerHd,b=this.scroller.dom.scrollLeft;a.scrollLeft=b;a.scrollLeft=b},updateSortIcon:function(d,c){var a=this.sortClasses,b=a[c=="DESC"?1:0],e=this.mainHd.select("td").removeClass(a);e.item(d).addClass(b)},updateAllColumnWidths:function(){var e=this.getTotalWidth(),k=this.cm.getColumnCount(),m=this.getRows(),g=m.length,b=[],l,a,h,d,c;for(d=0;d<k;d++){b[d]=this.getColumnWidth(d);this.getHeaderCell(d).style.width=b[d]}this.updateHeaderWidth();for(d=0;d<g;d++){l=m[d];l.style.width=e;a=l.firstChild;if(a){a.style.width=e;h=a.rows[0];for(c=0;c<k;c++){h.childNodes[c].style.width=b[c]}}}this.onAllColumnWidthsUpdated(b,e)},updateColumnWidth:function(d,b){var c=this.getColumnWidth(d),k=this.getTotalWidth(),h=this.getHeaderCell(d),a=this.getRows(),e=a.length,m,g,l;this.updateHeaderWidth();h.style.width=c;for(g=0;g<e;g++){m=a[g];l=m.firstChild;m.style.width=k;if(l){l.style.width=k;l.rows[0].childNodes[d].style.width=c}}this.onColumnWidthUpdated(d,c,k)},updateColumnHidden:function(b,k){var h=this.getTotalWidth(),l=k?"none":"",g=this.getHeaderCell(b),a=this.getRows(),d=a.length,m,c,e;this.updateHeaderWidth();g.style.display=l;for(e=0;e<d;e++){m=a[e];m.style.width=h;c=m.firstChild;if(c){c.style.width=h;c.rows[0].childNodes[b].style.display=l}}this.onColumnHiddenUpdated(b,k,h);delete this.lastViewWidth;this.layout()},doRender:function(d,v,m,a,r,t){var h=this.templates,c=h.cell,y=h.row,o=r-1,b="width:"+this.getTotalWidth()+";",k=[],l=[],n={tstyle:b},q={},w=v.length,x,g,e,u,s,p;for(s=0;s<w;s++){e=v[s];l=[];p=s+a;for(u=0;u<r;u++){g=d[u];q.id=g.id;q.css=u===0?"x-grid3-cell-first ":(u==o?"x-grid3-cell-last ":"");q.attr=q.cellAttr="";q.style=g.style;q.value=g.renderer.call(g.scope,e.data[g.name],q,e,p,u,m);if(Ext.isEmpty(q.value)){q.value=" "}if(this.markDirty&&e.dirty&&typeof e.modified[g.name]!="undefined"){q.css+=" x-grid3-dirty-cell"}l[l.length]=c.apply(q)}x=[];if(t&&((p+1)%2===0)){x[0]="x-grid3-row-alt"}if(e.dirty){x[1]=" x-grid3-dirty-row"}n.cols=r;if(this.getRowClass){x[2]=this.getRowClass(e,p,n,m)}n.alt=x.join(" ");n.cells=l.join("");k[k.length]=y.apply(n)}return k.join("")},processRows:function(a,g){if(!this.ds||this.ds.getCount()<1){return}var d=this.getRows(),c=d.length,e,b;g=g||!this.grid.stripeRows;a=a||0;for(b=0;b<c;b++){e=d[b];if(e){e.rowIndex=b;if(!g){e.className=e.className.replace(this.rowClsRe," ");if((b+1)%2===0){e.className+=" x-grid3-row-alt"}}}}if(a===0){Ext.fly(d[0]).addClass(this.firstRowCls)}Ext.fly(d[c-1]).addClass(this.lastRowCls)},afterRender:function(){if(!this.ds||!this.cm){return}this.mainBody.dom.innerHTML=this.renderBody()||" ";this.processRows(0,true);if(this.deferEmptyText!==true){this.applyEmptyText()}this.grid.fireEvent("viewready",this.grid)},afterRenderUI:function(){var a=this.grid;this.initElements();Ext.fly(this.innerHd).on("click",this.handleHdDown,this);this.mainHd.on({scope:this,mouseover:this.handleHdOver,mouseout:this.handleHdOut,mousemove:this.handleHdMove});this.scroller.on("scroll",this.syncScroll,this);if(a.enableColumnResize!==false){this.splitZone=new Ext.grid.GridView.SplitDragZone(a,this.mainHd.dom)}if(a.enableColumnMove){this.columnDrag=new Ext.grid.GridView.ColumnDragZone(a,this.innerHd);this.columnDrop=new Ext.grid.HeaderDropZone(a,this.mainHd.dom)}if(a.enableHdMenu!==false){this.hmenu=new Ext.menu.Menu({id:a.id+"-hctx"});this.hmenu.add({itemId:"asc",text:this.sortAscText,cls:"xg-hmenu-sort-asc"},{itemId:"desc",text:this.sortDescText,cls:"xg-hmenu-sort-desc"});if(a.enableColumnHide!==false){this.colMenu=new Ext.menu.Menu({id:a.id+"-hcols-menu"});this.colMenu.on({scope:this,beforeshow:this.beforeColMenuShow,itemclick:this.handleHdMenuClick});this.hmenu.add("-",{itemId:"columns",hideOnClick:false,text:this.columnsText,menu:this.colMenu,iconCls:"x-cols-icon"})}this.hmenu.on("itemclick",this.handleHdMenuClick,this)}if(a.trackMouseOver){this.mainBody.on({scope:this,mouseover:this.onRowOver,mouseout:this.onRowOut})}if(a.enableDragDrop||a.enableDrag){this.dragZone=new Ext.grid.GridDragZone(a,{ddGroup:a.ddGroup||"GridDD"})}this.updateHeaderSortState()},renderUI:function(){var a=this.templates;return a.master.apply({body:a.body.apply({rows:" "}),header:this.renderHeaders(),ostyle:"width:"+this.getOffsetWidth()+";",bstyle:"width:"+this.getTotalWidth()+";"})},processEvent:function(b,h){var i=h.getTarget(),a=this.grid,d=this.findHeaderIndex(i),l,k,c,g;a.fireEvent(b,h);if(d!==false){a.fireEvent("header"+b,a,d,h)}else{l=this.findRowIndex(i);if(l!==false){k=this.findCellIndex(i);if(k!==false){c=a.colModel.getColumnAt(k);if(a.fireEvent("cell"+b,a,l,k,h)!==false){if(!c||(c.processEvent&&(c.processEvent(b,h,a,l,k)!==false))){a.fireEvent("row"+b,a,l,h)}}}else{if(a.fireEvent("row"+b,a,l,h)!==false){(g=this.findRowBody(i))&&a.fireEvent("rowbody"+b,a,l,h)}}}else{a.fireEvent("container"+b,a,h)}}},layout:function(k){if(!this.mainBody){return}var a=this.grid,d=a.getGridEl(),c=d.getSize(true),i=c.width,b=c.height,h=this.scroller,g,e,l;if(i<20||b<20){return}if(a.autoHeight){g=h.dom.style;g.overflow="visible";if(Ext.isWebKit){g.position="static"}}else{this.el.setSize(i,b);e=this.mainHd.getHeight();l=b-e;h.setSize(i,l);if(this.innerHd){this.innerHd.style.width=(i)+"px"}}if(this.forceFit||(k===true&&this.autoFill)){if(this.lastViewWidth!=i){this.fitColumns(false,false);this.lastViewWidth=i}}else{this.autoExpand();this.syncHeaderScroll()}this.onLayout(i,l)},onLayout:function(a,b){},onColumnWidthUpdated:function(c,a,b){},onAllColumnWidthsUpdated:function(a,b){},onColumnHiddenUpdated:function(b,c,a){},updateColumnText:function(a,b){},afterMove:function(a){},init:function(a){this.grid=a;this.initTemplates();this.initData(a.store,a.colModel);this.initUI(a)},getColumnId:function(a){return this.cm.getColumnId(a)},getOffsetWidth:function(){return(this.cm.getTotalWidth()+this.getScrollOffset())+"px"},getScrollOffset:function(){return Ext.num(this.scrollOffset,Ext.getScrollBarWidth())},renderHeaders:function(){var e=this.cm,g=this.templates,a=g.hcell,d={},h=e.getColumnCount(),k=h-1,l=[],c,b;for(c=0;c<h;c++){if(c==0){b="x-grid3-cell-first "}else{b=c==k?"x-grid3-cell-last ":""}d={id:e.getColumnId(c),value:e.getColumnHeader(c)||"",style:this.getColumnStyle(c,true),css:b,tooltip:this.getColumnTooltip(c)};if(e.config[c].align=="right"){d.istyle="padding-right: 16px;"}else{delete d.istyle}l[c]=a.apply(d)}return g.header.apply({cells:l.join(""),tstyle:String.format("width: {0};",this.getTotalWidth())})},getColumnTooltip:function(a){var b=this.cm.getColumnTooltip(a);if(b){if(Ext.QuickTips.isEnabled()){return'ext:qtip="'+b+'"'}else{return'title="'+b+'"'}}return""},beforeUpdate:function(){this.grid.stopEditing(true)},updateHeaders:function(){this.innerHd.firstChild.innerHTML=this.renderHeaders();this.updateHeaderWidth(false)},updateHeaderWidth:function(c){var b=this.innerHd.firstChild,a=this.getTotalWidth();b.style.width=this.getOffsetWidth();b.firstChild.style.width=a;if(c!==false){this.mainBody.dom.style.width=a}},focusRow:function(a){this.focusCell(a,0,false)},focusCell:function(d,b,c){this.syncFocusEl(this.ensureVisible(d,b,c));var a=this.focusEl;if(Ext.isGecko){a.focus()}else{a.focus.defer(1,a)}},resolveCell:function(h,d,g){if(!Ext.isNumber(h)){h=h.rowIndex}if(!this.ds){return null}if(h<0||h>=this.ds.getCount()){return null}d=(d!==undefined?d:0);var c=this.getRow(h),b=this.cm,e=b.getColumnCount(),a;if(!(g===false&&d===0)){while(d<e&&b.isHidden(d)){d++}a=this.getCell(h,d)}return{row:c,cell:a}},getResolvedXY:function(b){if(!b){return null}var a=b.cell,c=b.row;if(a){return Ext.fly(a).getXY()}else{return[this.el.getX(),Ext.fly(c).getY()]}},syncFocusEl:function(d,a,c){var b=d;if(!Ext.isArray(b)){d=Math.min(d,Math.max(0,this.getRows().length-1));if(isNaN(d)){return}b=this.getResolvedXY(this.resolveCell(d,a,c))}this.focusEl.setXY(b||this.scroller.getXY())},ensureVisible:function(u,g,e){var s=this.resolveCell(u,g,e);if(!s||!s.row){return null}var l=s.row,h=s.cell,o=this.scroller.dom,d=l,t=0,q=this.el.dom;while(d&&d!=q){t+=d.offsetTop;d=d.offsetParent}t-=this.mainHd.dom.offsetHeight;q=parseInt(o.scrollTop,10);var r=t+l.offsetHeight,a=o.clientHeight,n=q+a;if(t<q){o.scrollTop=t}else{if(r>n){o.scrollTop=r-a}}if(e!==false){var m=parseInt(h.offsetLeft,10),k=m+h.offsetWidth,i=parseInt(o.scrollLeft,10),b=i+o.clientWidth;if(m<i){o.scrollLeft=m}else{if(k>b){o.scrollLeft=k-o.clientWidth}}}return this.getResolvedXY(s)},insertRows:function(a,i,e,h){var d=a.getCount()-1;if(!h&&i===0&&e>=d){this.fireEvent("beforerowsinserted",this,i,e);this.refresh();this.fireEvent("rowsinserted",this,i,e)}else{if(!h){this.fireEvent("beforerowsinserted",this,i,e)}var b=this.renderRows(i,e),g=this.getRow(i);if(g){if(i===0){Ext.fly(this.getRow(0)).removeClass(this.firstRowCls)}Ext.DomHelper.insertHtml("beforeBegin",g,b)}else{var c=this.getRow(d-1);if(c){Ext.fly(c).removeClass(this.lastRowCls)}Ext.DomHelper.insertHtml("beforeEnd",this.mainBody.dom,b)}if(!h){this.processRows(i);this.fireEvent("rowsinserted",this,i,e)}else{if(i===0||i>=d){Ext.fly(this.getRow(i)).addClass(i===0?this.firstRowCls:this.lastRowCls)}}}this.syncFocusEl(i)},deleteRows:function(a,c,b){if(a.getRowCount()<1){this.refresh()}else{this.fireEvent("beforerowsdeleted",this,c,b);this.removeRows(c,b);this.processRows(c);this.fireEvent("rowsdeleted",this,c,b)}},getColumnStyle:function(b,d){var a=this.cm,g=a.config,c=d?"":g[b].css||"",e=g[b].align;c+=String.format("width: {0};",this.getColumnWidth(b));if(a.isHidden(b)){c+="display: none; "}if(e){c+=String.format("text-align: {0};",e)}return c},getColumnWidth:function(b){var c=this.cm.getColumnWidth(b),a=this.borderWidth;if(Ext.isNumber(c)){if(Ext.isBorderBox||(Ext.isWebKit&&!Ext.isSafari2)){return c+"px"}else{return Math.max(c-a,0)+"px"}}else{return c}},getTotalWidth:function(){return this.cm.getTotalWidth()+"px"},fitColumns:function(g,k,h){var a=this.grid,m=this.cm,t=m.getTotalWidth(false),r=this.getGridInnerWidth(),s=r-t,c=[],p=0,o=0,v,d,q;if(r<20||s===0){return false}var e=m.getColumnCount(true),n=m.getColumnCount(false),b=e-(Ext.isNumber(h)?1:0);if(b===0){b=1;h=undefined}for(q=0;q<n;q++){if(!m.isFixed(q)&&q!==h){v=m.getColumnWidth(q);c.push(q,v);if(!m.isHidden(q)){p=q;o+=v}}}d=(r-m.getTotalWidth())/o;while(c.length){v=c.pop();q=c.pop();m.setColumnWidth(q,Math.max(a.minColumnWidth,Math.floor(v+v*d)),true)}t=m.getTotalWidth(false);if(t>r){var u=(b==e)?p:h,l=Math.max(1,m.getColumnWidth(u)-(t-r));m.setColumnWidth(u,l,true)}if(g!==true){this.updateAllColumnWidths()}return true},autoExpand:function(l){var a=this.grid,i=this.cm,e=this.getGridInnerWidth(),c=i.getTotalWidth(false),g=a.autoExpandColumn;if(!this.userResized&&g){if(e!=c){var k=i.getIndexById(g),b=i.getColumnWidth(k),h=e-c+b,d=Math.min(Math.max(h,a.autoExpandMin),a.autoExpandMax);if(b!=d){i.setColumnWidth(k,d,true);if(l!==true){this.updateColumnWidth(k,d)}}}}},getGridInnerWidth:function(){return this.grid.getGridEl().getWidth(true)-this.getScrollOffset()},getColumnData:function(){var e=[],c=this.cm,g=c.getColumnCount(),a=this.ds.fields,d,b;for(d=0;d<g;d++){b=c.getDataIndex(d);e[d]={name:Ext.isDefined(b)?b:(a.get(d)?a.get(d).name:undefined),renderer:c.getRenderer(d),scope:c.getRendererScope(d),id:c.getColumnId(d),style:this.getColumnStyle(d)}}return e},renderRows:function(i,c){var a=this.grid,g=a.store,k=a.stripeRows,e=a.colModel,h=e.getColumnCount(),d=g.getCount(),b;if(d<1){return""}i=i||0;c=Ext.isDefined(c)?c:d-1;b=g.getRange(i,c);return this.doRender(this.getColumnData(),b,g,i,h,k)},renderBody:function(){var a=this.renderRows()||" ";return this.templates.body.apply({rows:a})},refreshRow:function(g){var m=this.ds,n=this.cm.getColumnCount(),c=this.getColumnData(),o=n-1,q=["x-grid3-row"],e={tstyle:String.format("width: {0};",this.getTotalWidth())},a=[],l=this.templates.cell,k,r,b,p,h,d;if(Ext.isNumber(g)){k=g;g=m.getAt(k)}else{k=m.indexOf(g)}if(!g||k<0){return}for(d=0;d<n;d++){b=c[d];if(d==0){h="x-grid3-cell-first"}else{h=(d==o)?"x-grid3-cell-last ":""}p={id:b.id,style:b.style,css:h,attr:"",cellAttr:""};p.value=b.renderer.call(b.scope,g.data[b.name],p,g,k,d,m);if(Ext.isEmpty(p.value)){p.value=" "}if(this.markDirty&&g.dirty&&typeof g.modified[b.name]!="undefined"){p.css+=" x-grid3-dirty-cell"}a[d]=l.apply(p)}r=this.getRow(k);r.className="";if(this.grid.stripeRows&&((k+1)%2===0)){q.push("x-grid3-row-alt")}if(this.getRowClass){e.cols=n;q.push(this.getRowClass(g,k,e,m))}this.fly(r).addClass(q).setStyle(e.tstyle);e.cells=a.join("");r.innerHTML=this.templates.rowInner.apply(e);this.fireEvent("rowupdated",this,k,g)},refresh:function(b){this.fireEvent("beforerefresh",this);this.grid.stopEditing(true);var a=this.renderBody();this.mainBody.update(a).setWidth(this.getTotalWidth());if(b===true){this.updateHeaders();this.updateHeaderSortState()}this.processRows(0,true);this.layout();this.applyEmptyText();this.fireEvent("refresh",this)},applyEmptyText:function(){if(this.emptyText&&!this.hasRows()){this.mainBody.update('<div class="x-grid-empty">'+this.emptyText+"</div>")}},updateHeaderSortState:function(){var b=this.ds.getSortState();if(!b){return}if(!this.sortState||(this.sortState.field!=b.field||this.sortState.direction!=b.direction)){this.grid.fireEvent("sortchange",this.grid,b)}this.sortState=b;var c=this.cm.findColumnIndex(b.field);if(c!=-1){var a=b.direction;this.updateSortIcon(c,a)}},clearHeaderSortState:function(){if(!this.sortState){return}this.grid.fireEvent("sortchange",this.grid,null);this.mainHd.select("td").removeClass(this.sortClasses);delete this.sortState},destroy:function(){var k=this,a=k.grid,d=a.getGridEl(),i=k.dragZone,g=k.splitZone,h=k.columnDrag,e=k.columnDrop,l=k.scrollToTopTask,c,b;if(l&&l.cancel){l.cancel()}Ext.destroyMembers(k,"colMenu","hmenu");k.initData(null,null);k.purgeListeners();Ext.fly(k.innerHd).un("click",k.handleHdDown,k);if(a.enableColumnMove){c=h.dragData;b=h.proxy;Ext.destroy(h.el,b.ghost,b.el,e.el,e.proxyTop,e.proxyBottom,c.ddel,c.header);if(b.anim){Ext.destroy(b.anim)}delete b.ghost;delete c.ddel;delete c.header;h.destroy();delete Ext.dd.DDM.locationCache[h.id];delete h._domRef;delete e.proxyTop;delete e.proxyBottom;e.destroy();delete Ext.dd.DDM.locationCache["gridHeader"+d.id];delete e._domRef;delete Ext.dd.DDM.ids[e.ddGroup]}if(g){g.destroy();delete g._domRef;delete Ext.dd.DDM.ids["gridSplitters"+d.id]}Ext.fly(k.innerHd).removeAllListeners();Ext.removeNode(k.innerHd);delete k.innerHd;Ext.destroy(k.el,k.mainWrap,k.mainHd,k.scroller,k.mainBody,k.focusEl,k.resizeMarker,k.resizeProxy,k.activeHdBtn,k._flyweight,i,g);delete a.container;if(i){i.destroy()}Ext.dd.DDM.currentTarget=null;delete Ext.dd.DDM.locationCache[d.id];Ext.EventManager.removeResizeListener(k.onWindowResize,k)},onDenyColumnHide:function(){},render:function(){if(this.autoFill){var a=this.grid.ownerCt;if(a&&a.getLayout()){a.on("afterlayout",function(){this.fitColumns(true,true);this.updateHeaders();this.updateHeaderSortState()},this,{single:true})}}else{if(this.forceFit){this.fitColumns(true,false)}else{if(this.grid.autoExpandColumn){this.autoExpand(true)}}}this.grid.getGridEl().dom.innerHTML=this.renderUI();this.afterRenderUI()},initData:function(a,e){var b=this;if(b.ds){var d=b.ds;d.un("add",b.onAdd,b);d.un("load",b.onLoad,b);d.un("clear",b.onClear,b);d.un("remove",b.onRemove,b);d.un("update",b.onUpdate,b);d.un("datachanged",b.onDataChange,b);if(d!==a&&d.autoDestroy){d.destroy()}}if(a){a.on({scope:b,load:b.onLoad,add:b.onAdd,remove:b.onRemove,update:b.onUpdate,clear:b.onClear,datachanged:b.onDataChange})}if(b.cm){var c=b.cm;c.un("configchange",b.onColConfigChange,b);c.un("widthchange",b.onColWidthChange,b);c.un("headerchange",b.onHeaderChange,b);c.un("hiddenchange",b.onHiddenChange,b);c.un("columnmoved",b.onColumnMove,b)}if(e){delete b.lastViewWidth;e.on({scope:b,configchange:b.onColConfigChange,widthchange:b.onColWidthChange,headerchange:b.onHeaderChange,hiddenchange:b.onHiddenChange,columnmoved:b.onColumnMove})}b.ds=a;b.cm=e},onDataChange:function(){this.refresh(true);this.updateHeaderSortState();this.syncFocusEl(0)},onClear:function(){this.refresh();this.syncFocusEl(0)},onUpdate:function(b,a){this.refreshRow(a)},onAdd:function(b,a,c){this.insertRows(b,c,c+(a.length-1))},onRemove:function(b,a,c,d){if(d!==true){this.fireEvent("beforerowremoved",this,c,a)}this.removeRow(c);if(d!==true){this.processRows(c);this.applyEmptyText();this.fireEvent("rowremoved",this,c,a)}},onLoad:function(){if(Ext.isGecko){if(!this.scrollToTopTask){this.scrollToTopTask=new Ext.util.DelayedTask(this.scrollToTop,this)}this.scrollToTopTask.delay(1)}else{this.scrollToTop()}},onColWidthChange:function(a,b,c){this.updateColumnWidth(b,c)},onHeaderChange:function(a,b,c){this.updateHeaders()},onHiddenChange:function(a,b,c){this.updateColumnHidden(b,c)},onColumnMove:function(a,c,b){this.indexMap=null;this.refresh(true);this.restoreScroll(this.getScrollState());this.afterMove(b);this.grid.fireEvent("columnmove",c,b)},onColConfigChange:function(){delete this.lastViewWidth;this.indexMap=null;this.refresh(true)},initUI:function(a){a.on("headerclick",this.onHeaderClick,this)},initEvents:Ext.emptyFn,onHeaderClick:function(b,a){if(this.headersDisabled||!this.cm.isSortable(a)){return}b.stopEditing(true);b.store.sort(this.cm.getDataIndex(a))},onRowOver:function(b,a){var c=this.findRowIndex(a);if(c!==false){this.addRowClass(c,this.rowOverCls)}},onRowOut:function(b,a){var c=this.findRowIndex(a);if(c!==false&&!b.within(this.getRow(c),true)){this.removeRowClass(c,this.rowOverCls)}},onRowSelect:function(a){this.addRowClass(a,this.selectedRowClass)},onRowDeselect:function(a){this.removeRowClass(a,this.selectedRowClass)},onCellSelect:function(c,b){var a=this.getCell(c,b);if(a){this.fly(a).addClass("x-grid3-cell-selected")}},onCellDeselect:function(c,b){var a=this.getCell(c,b);if(a){this.fly(a).removeClass("x-grid3-cell-selected")}},handleWheel:function(a){a.stopPropagation()},onColumnSplitterMoved:function(a,b){this.userResized=true;this.grid.colModel.setColumnWidth(a,b,true);if(this.forceFit){this.fitColumns(true,false,a);this.updateAllColumnWidths()}else{this.updateColumnWidth(a,b);this.syncHeaderScroll()}this.grid.fireEvent("columnresize",a,b)},beforeColMenuShow:function(){var b=this.cm,d=b.getColumnCount(),a=this.colMenu,c;a.removeAll();for(c=0;c<d;c++){if(b.config[c].hideable!==false){a.add(new Ext.menu.CheckItem({text:b.getColumnHeader(c),itemId:"col-"+b.getColumnId(c),checked:!b.isHidden(c),disabled:b.config[c].hideable===false,hideOnClick:false}))}}},handleHdMenuClick:function(c){var a=this.ds,b=this.cm.getDataIndex(this.hdCtxIndex);switch(c.getItemId()){case"asc":a.sort(b,"ASC");break;case"desc":a.sort(b,"DESC");break;default:this.handleHdMenuClickDefault(c)}return true},handleHdMenuClickDefault:function(c){var b=this.cm,d=c.getItemId(),a=b.getIndexById(d.substr(4));if(a!=-1){if(c.checked&&b.getColumnsBy(this.isHideableColumn,this).length<=1){this.onDenyColumnHide();return}b.setHidden(a,c.checked)}},handleHdDown:function(i,k){if(Ext.fly(k).hasClass("x-grid3-hd-btn")){i.stopEvent();var l=this.cm,g=this.findHeaderCell(k),h=this.getCellIndex(g),d=l.isSortable(h),c=this.hmenu,b=c.items,a=this.headerMenuOpenCls;this.hdCtxIndex=h;Ext.fly(g).addClass(a);b.get("asc").setDisabled(!d);b.get("desc").setDisabled(!d);c.on("hide",function(){Ext.fly(g).removeClass(a)},this,{single:true});c.show(k,"tl-bl?")}},handleHdMove:function(l){var i=this.findHeaderCell(this.activeHdRef);if(i&&!this.headersDisabled){var m=this.splitHandleWidth||5,k=this.activeHdRegion,q=i.style,n=this.cm,p="",g=l.getPageX();if(this.grid.enableColumnResize!==false){var a=this.activeHdIndex,b=this.getPreviousVisible(a),o=n.isResizable(a),c=b&&n.isResizable(b),d=g-k.left<=m,h=k.right-g<=(!this.activeHdBtn?m:2);if(d&&c){p=Ext.isAir?"move":Ext.isWebKit?"e-resize":"col-resize"}else{if(h&&o){p=Ext.isAir?"move":Ext.isWebKit?"w-resize":"col-resize"}}}q.cursor=p}},getPreviousVisible:function(a){while(a>0){if(!this.cm.isHidden(a-1)){return a}a--}return undefined},handleHdOver:function(c,b){var d=this.findHeaderCell(b);if(d&&!this.headersDisabled){var a=this.fly(d);this.activeHdRef=b;this.activeHdIndex=this.getCellIndex(d);this.activeHdRegion=a.getRegion();if(!this.isMenuDisabled(this.activeHdIndex,a)){a.addClass("x-grid3-hd-over");this.activeHdBtn=a.child(".x-grid3-hd-btn");if(this.activeHdBtn){this.activeHdBtn.dom.style.height=(d.firstChild.offsetHeight-1)+"px"}}}},handleHdOut:function(b,a){var c=this.findHeaderCell(a);if(c&&(!Ext.isIE||!b.within(c,true))){this.activeHdRef=null;this.fly(c).removeClass("x-grid3-hd-over");c.style.cursor=""}},isMenuDisabled:function(a,b){return this.cm.isMenuDisabled(a)},hasRows:function(){var a=this.mainBody.dom.firstChild;return a&&a.nodeType==1&&a.className!="x-grid-empty"},isHideableColumn:function(a){return !a.hidden},bind:function(a,b){this.initData(a,b)}});Ext.grid.GridView.SplitDragZone=Ext.extend(Ext.dd.DDProxy,{constructor:function(a,b){this.grid=a;this.view=a.getView();this.marker=this.view.resizeMarker;this.proxy=this.view.resizeProxy;Ext.grid.GridView.SplitDragZone.superclass.constructor.call(this,b,"gridSplitters"+this.grid.getGridEl().id,{dragElId:Ext.id(this.proxy.dom),resizeFrame:false});this.scroll=false;this.hw=this.view.splitHandleWidth||5},b4StartDrag:function(a,e){this.dragHeadersDisabled=this.view.headersDisabled;this.view.headersDisabled=true;var d=this.view.mainWrap.getHeight();this.marker.setHeight(d);this.marker.show();this.marker.alignTo(this.view.getHeaderCell(this.cellIndex),"tl-tl",[-2,0]);this.proxy.setHeight(d);var b=this.cm.getColumnWidth(this.cellIndex),c=Math.max(b-this.grid.minColumnWidth,0);this.resetConstraints();this.setXConstraint(c,1000);this.setYConstraint(0,0);this.minX=a-c;this.maxX=a+1000;this.startPos=a;Ext.dd.DDProxy.prototype.b4StartDrag.call(this,a,e)},allowHeaderDrag:function(a){return true},handleMouseDown:function(a){var h=this.view.findHeaderCell(a.getTarget());if(h&&this.allowHeaderDrag(a)){var l=this.view.fly(h).getXY(),c=l[0],i=a.getXY(),b=i[0],g=h.offsetWidth,d=false;if((b-c)<=this.hw){d=-1}else{if((c+g)-b<=this.hw){d=0}}if(d!==false){this.cm=this.grid.colModel;var k=this.view.getCellIndex(h);if(d==-1){if(k+d<0){return}while(this.cm.isHidden(k+d)){--d;if(k+d<0){return}}}this.cellIndex=k+d;this.split=h.dom;if(this.cm.isResizable(this.cellIndex)&&!this.cm.isFixed(this.cellIndex)){Ext.grid.GridView.SplitDragZone.superclass.handleMouseDown.apply(this,arguments)}}else{if(this.view.columnDrag){this.view.columnDrag.callHandleMouseDown(a)}}}},endDrag:function(g){this.marker.hide();var a=this.view,c=Math.max(this.minX,g.getPageX()),d=c-this.startPos,b=this.dragHeadersDisabled;a.onColumnSplitterMoved(this.cellIndex,this.cm.getColumnWidth(this.cellIndex)+d);setTimeout(function(){a.headersDisabled=b},50)},autoOffset:function(){this.setDelta(0,0)}});Ext.grid.PivotGridView=Ext.extend(Ext.grid.GridView,{colHeaderCellCls:"grid-hd-group-cell",title:"",getColumnHeaders:function(){return this.grid.topAxis.buildHeaders()},getRowHeaders:function(){return this.grid.leftAxis.buildHeaders()},renderRows:function(a,r){var b=this.grid,n=b.extractData(),o=n.length,e=this.templates,q=b.renderer,h=typeof q=="function",t=this.getCellCls,m=typeof t=="function",d=e.cell,u=e.row,k=[],p={},c="width:"+this.getGridInnerWidth()+"px;",l,g,s;a=a||0;r=Ext.isDefined(r)?r:o-1;for(s=0;s<o;s++){row=n[s];colCount=row.length;l=[];rowIndex=a+s;for(j=0;j<colCount;j++){cell=row[j];p.css=j===0?"x-grid3-cell-first ":(j==(colCount-1)?"x-grid3-cell-last ":"");p.attr=p.cellAttr="";p.value=cell;if(Ext.isEmpty(p.value)){p.value=" "}if(h){p.value=q(p.value)}if(m){p.css+=t(p.value)+" "}l[l.length]=d.apply(p)}k[k.length]=u.apply({tstyle:c,cols:colCount,cells:l.join(""),alt:""})}return k.join("")},masterTpl:new Ext.Template('<div class="x-grid3 x-pivotgrid" hidefocus="true">','<div class="x-grid3-viewport">','<div class="x-grid3-header">','<div class="x-grid3-header-title"><span>{title}</span></div>','<div class="x-grid3-header-inner">','<div class="x-grid3-header-offset" style="{ostyle}"></div>',"</div>",'<div class="x-clear"></div>',"</div>",'<div class="x-grid3-scroller">','<div class="x-grid3-row-headers"></div>','<div class="x-grid3-body" style="{bstyle}">{body}</div>','<a href="#" class="x-grid3-focus" tabIndex="-1"></a>',"</div>","</div>",'<div class="x-grid3-resize-marker"> </div>','<div class="x-grid3-resize-proxy"> </div>',"</div>"),initTemplates:function(){Ext.grid.PivotGridView.superclass.initTemplates.apply(this,arguments);var a=this.templates||{};if(!a.gcell){a.gcell=new Ext.XTemplate('<td class="x-grid3-hd x-grid3-gcell x-grid3-td-{id} ux-grid-hd-group-row-{row} '+this.colHeaderCellCls+'" style="{style}">','<div {tooltip} class="x-grid3-hd-inner x-grid3-hd-{id}" unselectable="on" style="{istyle}">',this.grid.enableHdMenu?'<a class="x-grid3-hd-btn" href="#"></a>':"","{value}","</div>","</td>")}this.templates=a;this.hrowRe=new RegExp("ux-grid-hd-group-row-(\\d+)","")},initElements:function(){Ext.grid.PivotGridView.superclass.initElements.apply(this,arguments);this.rowHeadersEl=new Ext.Element(this.scroller.child("div.x-grid3-row-headers"));this.headerTitleEl=new Ext.Element(this.mainHd.child("div.x-grid3-header-title"))},getGridInnerWidth:function(){var a=Ext.grid.PivotGridView.superclass.getGridInnerWidth.apply(this,arguments);return a-this.getTotalRowHeaderWidth()},getTotalRowHeaderWidth:function(){var d=this.getRowHeaders(),c=d.length,b=0,a;for(a=0;a<c;a++){b+=d[a].width}return b},getTotalColumnHeaderHeight:function(){return this.getColumnHeaders().length*21},renderUI:function(){var b=this.templates,a=this.getGridInnerWidth();return b.master.apply({body:b.body.apply({rows:" "}),ostyle:"width:"+a+"px",bstyle:"width:"+a+"px"})},onLayout:function(b,a){Ext.grid.PivotGridView.superclass.onLayout.apply(this,arguments);var b=this.getGridInnerWidth();this.resizeColumnHeaders(b);this.resizeAllRows(b)},refresh:function(b){this.fireEvent("beforerefresh",this);this.grid.stopEditing(true);var a=this.renderBody();this.mainBody.update(a).setWidth(this.getGridInnerWidth());if(b===true){this.updateHeaders();this.updateHeaderSortState()}this.processRows(0,true);this.layout();this.applyEmptyText();this.fireEvent("refresh",this)},renderHeaders:Ext.emptyFn,fitColumns:Ext.emptyFn,resizeColumnHeaders:function(b){var a=this.grid.topAxis;if(a.rendered){a.el.setWidth(b)}},resizeRowHeaders:function(){var a=this.getTotalRowHeaderWidth(),b=String.format("margin-left: {0}px;",a);this.rowHeadersEl.setWidth(a);this.mainBody.applyStyles(b);Ext.fly(this.innerHd).applyStyles(b);this.headerTitleEl.setWidth(a);this.headerTitleEl.setHeight(this.getTotalColumnHeaderHeight())},resizeAllRows:function(b){var d=this.getRows(),c=d.length,a;for(a=0;a<c;a++){Ext.fly(d[a]).setWidth(b);Ext.fly(d[a]).child("table").setWidth(b)}},updateHeaders:function(){this.renderGroupRowHeaders();this.renderGroupColumnHeaders()},renderGroupRowHeaders:function(){var a=this.grid.leftAxis;this.resizeRowHeaders();a.rendered=false;a.render(this.rowHeadersEl);this.setTitle(this.title)},setTitle:function(a){this.headerTitleEl.child("span").dom.innerHTML=a},renderGroupColumnHeaders:function(){var a=this.grid.topAxis;a.rendered=false;a.render(this.innerHd.firstChild)},isMenuDisabled:function(a,b){return true}});Ext.grid.PivotAxis=Ext.extend(Ext.Component,{orientation:"horizontal",defaultHeaderWidth:80,paddingWidth:7,setDimensions:function(a){this.dimensions=a},onRender:function(b,a){var c=this.orientation=="horizontal"?this.renderHorizontalRows():this.renderVerticalRows();this.el=Ext.DomHelper.overwrite(b.dom,{tag:"table",cn:c},true)},renderHorizontalRows:function(){var k=this.buildHeaders(),a=k.length,g=[],c,h,e,d,b;for(d=0;d<a;d++){c=[];h=k[d].items;e=h.length;for(b=0;b<e;b++){c.push({tag:"td",html:h[b].header,colspan:h[b].span})}g[d]={tag:"tr",cn:c}}return g},renderVerticalRows:function(){var b=this.buildHeaders(),k=b.length,a=[],m=[],h,c,l,g,e,d;for(e=0;e<k;e++){c=b[e];g=c.width||80;h=c.items.length;for(d=0;d<h;d++){l=c.items[d];a[l.start]=a[l.start]||[];a[l.start].push({tag:"td",html:l.header,rowspan:l.span,width:Ext.isBorderBox?g:g-this.paddingWidth})}}h=a.length;for(e=0;e<h;e++){m[e]={tag:"tr",cn:a[e]}}return m},getTuples:function(){var b=new Ext.data.Store({});b.data=this.store.data.clone();b.fields=this.store.fields;var m=[],a=this.dimensions,c=a.length,k;for(k=0;k<c;k++){m.push({field:a[k].dataIndex,direction:a[k].direction||"ASC"})}b.sort(m);var e=b.data.items,o=[],l=[],p,h,d,g,n;c=e.length;for(k=0;k<c;k++){d=this.getRecordInfo(e[k]);g=d.data;h="";for(n in g){h+=g[n]+"---"}if(o.indexOf(h)==-1){o.push(h);l.push(d)}}b.destroy();return l},getRecordInfo:function(a){var e=this.dimensions,d=e.length,h={},k,c,b;for(b=0;b<d;b++){k=e[b];c=k.dataIndex;h[c]=a.get(c)}var g=function(i){return function(l){for(var m in i){if(l.get(m)!=i[m]){return false}}return true}};return{data:h,matcher:g(h)}},buildHeaders:function(){var k=this.getTuples(),l=k.length,a=this.dimensions,q=a.length,c=[],n,r,m,p,o,b,h,g,e,d;for(e=0;e<q;e++){dimension=a[e];r=[];o=0;b=0;for(d=0;d<l;d++){n=k[d];h=d==(l-1);m=n.data[dimension.dataIndex];g=p!=undefined&&p!=m;if(e>0&&d>0){g=g||n.data[a[e-1].dataIndex]!=k[d-1].data[a[e-1].dataIndex]}if(g){r.push({header:p,span:o,start:b});b+=o;o=0}if(h){r.push({header:m,span:o+1,start:b});b+=o;o=0}p=m;o++}c.push({items:r,width:dimension.width||this.defaultHeaderWidth});p=undefined}return c}});Ext.grid.HeaderDragZone=Ext.extend(Ext.dd.DragZone,{maxDragWidth:120,constructor:function(a,c,b){this.grid=a;this.view=a.getView();this.ddGroup="gridHeader"+this.grid.getGridEl().id;Ext.grid.HeaderDragZone.superclass.constructor.call(this,c);if(b){this.setHandleElId(Ext.id(c));this.setOuterHandleElId(Ext.id(b))}this.scroll=false},getDragData:function(c){var a=Ext.lib.Event.getTarget(c),b=this.view.findHeaderCell(a);if(b){return{ddel:b.firstChild,header:b}}return false},onInitDrag:function(a){this.dragHeadersDisabled=this.view.headersDisabled;this.view.headersDisabled=true;var b=this.dragData.ddel.cloneNode(true);b.id=Ext.id();b.style.width=Math.min(this.dragData.header.offsetWidth,this.maxDragWidth)+"px";this.proxy.update(b);return true},afterValidDrop:function(){this.completeDrop()},afterInvalidDrop:function(){this.completeDrop()},completeDrop:function(){var a=this.view,b=this.dragHeadersDisabled;setTimeout(function(){a.headersDisabled=b},50)}});Ext.grid.HeaderDropZone=Ext.extend(Ext.dd.DropZone,{proxyOffsets:[-4,-9],fly:Ext.Element.fly,constructor:function(a,c,b){this.grid=a;this.view=a.getView();this.proxyTop=Ext.DomHelper.append(document.body,{cls:"col-move-top",html:" "},true);this.proxyBottom=Ext.DomHelper.append(document.body,{cls:"col-move-bottom",html:" "},true);this.proxyTop.hide=this.proxyBottom.hide=function(){this.setLeftTop(-100,-100);this.setStyle("visibility","hidden")};this.ddGroup="gridHeader"+this.grid.getGridEl().id;Ext.grid.HeaderDropZone.superclass.constructor.call(this,a.getGridEl().dom)},getTargetFromEvent:function(c){var a=Ext.lib.Event.getTarget(c),b=this.view.findCellIndex(a);if(b!==false){return this.view.getHeaderCell(b)}},nextVisible:function(c){var b=this.view,a=this.grid.colModel;c=c.nextSibling;while(c){if(!a.isHidden(b.getCellIndex(c))){return c}c=c.nextSibling}return null},prevVisible:function(c){var b=this.view,a=this.grid.colModel;c=c.prevSibling;while(c){if(!a.isHidden(b.getCellIndex(c))){return c}c=c.prevSibling}return null},positionIndicator:function(d,l,k){var a=Ext.lib.Event.getPageX(k),g=Ext.lib.Dom.getRegion(l.firstChild),c,i,b=g.top+this.proxyOffsets[1];if((g.right-a)<=(g.right-g.left)/2){c=g.right+this.view.borderWidth;i="after"}else{c=g.left;i="before"}if(this.grid.colModel.isFixed(this.view.getCellIndex(l))){return false}c+=this.proxyOffsets[0];this.proxyTop.setLeftTop(c,b);this.proxyTop.show();if(!this.bottomOffset){this.bottomOffset=this.view.mainHd.getHeight()}this.proxyBottom.setLeftTop(c,b+this.proxyTop.dom.offsetHeight+this.bottomOffset);this.proxyBottom.show();return i},onNodeEnter:function(d,a,c,b){if(b.header!=d){this.positionIndicator(b.header,d,c)}},onNodeOver:function(g,b,d,c){var a=false;if(c.header!=g){a=this.positionIndicator(c.header,g,d)}if(!a){this.proxyTop.hide();this.proxyBottom.hide()}return a?this.dropAllowed:this.dropNotAllowed},onNodeOut:function(d,a,c,b){this.proxyTop.hide();this.proxyBottom.hide()},onNodeDrop:function(b,o,g,c){var d=c.header;if(d!=b){var l=this.grid.colModel,k=Ext.lib.Event.getPageX(g),a=Ext.lib.Dom.getRegion(b.firstChild),p=(a.right-k)<=((a.right-a.left)/2)?"after":"before",i=this.view.getCellIndex(d),m=this.view.getCellIndex(b);if(p=="after"){m++}if(i<m){m--}l.moveColumn(i,m);return true}return false}});Ext.grid.GridView.ColumnDragZone=Ext.extend(Ext.grid.HeaderDragZone,{constructor:function(a,b){Ext.grid.GridView.ColumnDragZone.superclass.constructor.call(this,a,b,null);this.proxy.el.addClass("x-grid3-col-dd")},handleMouseDown:function(a){},callHandleMouseDown:function(a){Ext.grid.GridView.ColumnDragZone.superclass.handleMouseDown.call(this,a)}});Ext.grid.SplitDragZone=Ext.extend(Ext.dd.DDProxy,{fly:Ext.Element.fly,constructor:function(a,c,b){this.grid=a;this.view=a.getView();this.proxy=this.view.resizeProxy;Ext.grid.SplitDragZone.superclass.constructor.call(this,c,"gridSplitters"+this.grid.getGridEl().id,{dragElId:Ext.id(this.proxy.dom),resizeFrame:false});this.setHandleElId(Ext.id(c));this.setOuterHandleElId(Ext.id(b));this.scroll=false},b4StartDrag:function(a,d){this.view.headersDisabled=true;this.proxy.setHeight(this.view.mainWrap.getHeight());var b=this.cm.getColumnWidth(this.cellIndex);var c=Math.max(b-this.grid.minColumnWidth,0);this.resetConstraints();this.setXConstraint(c,1000);this.setYConstraint(0,0);this.minX=a-c;this.maxX=a+1000;this.startPos=a;Ext.dd.DDProxy.prototype.b4StartDrag.call(this,a,d)},handleMouseDown:function(c){var b=Ext.EventObject.setEvent(c);var a=this.fly(b.getTarget());if(a.hasClass("x-grid-split")){this.cellIndex=this.view.getCellIndex(a.dom);this.split=a.dom;this.cm=this.grid.colModel;if(this.cm.isResizable(this.cellIndex)&&!this.cm.isFixed(this.cellIndex)){Ext.grid.SplitDragZone.superclass.handleMouseDown.apply(this,arguments)}}},endDrag:function(c){this.view.headersDisabled=false;var a=Math.max(this.minX,Ext.lib.Event.getPageX(c));var b=a-this.startPos;this.view.onColumnSplitterMoved(this.cellIndex,this.cm.getColumnWidth(this.cellIndex)+b)},autoOffset:function(){this.setDelta(0,0)}});Ext.grid.GridDragZone=function(b,a){this.view=b.getView();Ext.grid.GridDragZone.superclass.constructor.call(this,this.view.mainBody.dom,a);this.scroll=false;this.grid=b;this.ddel=document.createElement("div");this.ddel.className="x-grid-dd-wrap"};Ext.extend(Ext.grid.GridDragZone,Ext.dd.DragZone,{ddGroup:"GridDD",getDragData:function(b){var a=Ext.lib.Event.getTarget(b);var d=this.view.findRowIndex(a);if(d!==false){var c=this.grid.selModel;if(!c.isSelected(d)||b.hasModifier()){c.handleMouseDown(this.grid,d,b)}return{grid:this.grid,ddel:this.ddel,rowIndex:d,selections:c.getSelections()}}return false},onInitDrag:function(b){var a=this.dragData;this.ddel.innerHTML=this.grid.getDragDropText();this.proxy.update(this.ddel)},afterRepair:function(){this.dragging=false},getRepairXY:function(b,a){return false},onEndDrag:function(a,b){},onValidDrop:function(a,b,c){this.hideProxy()},beforeInvalidDrop:function(a,b){}});Ext.grid.ColumnModel=Ext.extend(Ext.util.Observable,{defaultWidth:100,defaultSortable:false,constructor:function(a){if(a.columns){Ext.apply(this,a);this.setConfig(a.columns,true)}else{this.setConfig(a,true)}this.addEvents("widthchange","headerchange","hiddenchange","columnmoved","configchange");Ext.grid.ColumnModel.superclass.constructor.call(this)},getColumnId:function(a){return this.config[a].id},getColumnAt:function(a){return this.config[a]},setConfig:function(d,b){var e,h,a;if(!b){delete this.totalWidth;for(e=0,a=this.config.length;e<a;e++){h=this.config[e];if(h.setEditor){h.setEditor(null)}}}this.defaults=Ext.apply({width:this.defaultWidth,sortable:this.defaultSortable},this.defaults);this.config=d;this.lookup={};for(e=0,a=d.length;e<a;e++){h=Ext.applyIf(d[e],this.defaults);if(Ext.isEmpty(h.id)){h.id=e}if(!h.isColumn){var g=Ext.grid.Column.types[h.xtype||"gridcolumn"];h=new g(h);d[e]=h}this.lookup[h.id]=h}if(!b){this.fireEvent("configchange",this)}},getColumnById:function(a){return this.lookup[a]},getIndexById:function(c){for(var b=0,a=this.config.length;b<a;b++){if(this.config[b].id==c){return b}}return -1},moveColumn:function(e,b){var a=this.config,d=a[e];a.splice(e,1);a.splice(b,0,d);this.dataMap=null;this.fireEvent("columnmoved",this,e,b)},getColumnCount:function(b){var d=this.config.length,e=0,a;if(b===true){for(a=0;a<d;a++){if(!this.isHidden(a)){e++}}return e}return d},getColumnsBy:function(g,e){var b=this.config,h=b.length,a=[],d,k;for(d=0;d<h;d++){k=b[d];if(g.call(e||this,k,d)===true){a[a.length]=k}}return a},isSortable:function(a){return !!this.config[a].sortable},isMenuDisabled:function(a){return !!this.config[a].menuDisabled},getRenderer:function(a){return this.config[a].renderer||Ext.grid.ColumnModel.defaultRenderer},getRendererScope:function(a){return this.config[a].scope},setRenderer:function(a,b){this.config[a].renderer=b},getColumnWidth:function(a){var b=this.config[a].width;if(typeof b!="number"){b=this.defaultWidth}return b},setColumnWidth:function(b,c,a){this.config[b].width=c;this.totalWidth=null;if(!a){this.fireEvent("widthchange",this,b,c)}},getTotalWidth:function(b){if(!this.totalWidth){this.totalWidth=0;for(var c=0,a=this.config.length;c<a;c++){if(b||!this.isHidden(c)){this.totalWidth+=this.getColumnWidth(c)}}}return this.totalWidth},getColumnHeader:function(a){return this.config[a].header},setColumnHeader:function(a,b){this.config[a].header=b;this.fireEvent("headerchange",this,a,b)},getColumnTooltip:function(a){return this.config[a].tooltip},setColumnTooltip:function(a,b){this.config[a].tooltip=b},getDataIndex:function(a){return this.config[a].dataIndex},setDataIndex:function(a,b){this.config[a].dataIndex=b},findColumnIndex:function(d){var e=this.config;for(var b=0,a=e.length;b<a;b++){if(e[b].dataIndex==d){return b}}return -1},isCellEditable:function(b,e){var d=this.config[b],a=d.editable;return !!(a||(!Ext.isDefined(a)&&d.editor))},getCellEditor:function(a,b){return this.config[a].getCellEditor(b)},setEditable:function(a,b){this.config[a].editable=b},isHidden:function(a){return !!this.config[a].hidden},isFixed:function(a){return !!this.config[a].fixed},isResizable:function(a){return a>=0&&this.config[a].resizable!==false&&this.config[a].fixed!==true},setHidden:function(a,b){var d=this.config[a];if(d.hidden!==b){d.hidden=b;this.totalWidth=null;this.fireEvent("hiddenchange",this,a,b)}},setEditor:function(a,b){this.config[a].setEditor(b)},destroy:function(){var b=this.config.length,a=0;for(;a<b;a++){this.config[a].destroy()}delete this.config;delete this.lookup;this.purgeListeners()},setState:function(a,b){b=Ext.applyIf(b,this.defaults);Ext.apply(this.config[a],b)}});Ext.grid.ColumnModel.defaultRenderer=function(a){if(typeof a=="string"&&a.length<1){return" "}return a};Ext.grid.AbstractSelectionModel=Ext.extend(Ext.util.Observable,{constructor:function(){this.locked=false;Ext.grid.AbstractSelectionModel.superclass.constructor.call(this)},init:function(a){this.grid=a;if(this.lockOnInit){delete this.lockOnInit;this.locked=false;this.lock()}this.initEvents()},lock:function(){if(!this.locked){this.locked=true;var a=this.grid;if(a){a.getView().on({scope:this,beforerefresh:this.sortUnLock,refresh:this.sortLock})}else{this.lockOnInit=true}}},sortLock:function(){this.locked=true},sortUnLock:function(){this.locked=false},unlock:function(){if(this.locked){this.locked=false;var a=this.grid,b;if(a){b=a.getView();b.un("beforerefresh",this.sortUnLock,this);b.un("refresh",this.sortLock,this)}else{delete this.lockOnInit}}},isLocked:function(){return this.locked},destroy:function(){this.unlock();this.purgeListeners()}});Ext.grid.RowSelectionModel=Ext.extend(Ext.grid.AbstractSelectionModel,{singleSelect:false,constructor:function(a){Ext.apply(this,a);this.selections=new Ext.util.MixedCollection(false,function(b){return b.id});this.last=false;this.lastActive=false;this.addEvents("selectionchange","beforerowselect","rowselect","rowdeselect");Ext.grid.RowSelectionModel.superclass.constructor.call(this)},initEvents:function(){if(!this.grid.enableDragDrop&&!this.grid.enableDrag){this.grid.on("rowmousedown",this.handleMouseDown,this)}this.rowNav=new Ext.KeyNav(this.grid.getGridEl(),{up:this.onKeyPress,down:this.onKeyPress,scope:this});this.grid.getView().on({scope:this,refresh:this.onRefresh,rowupdated:this.onRowUpdated,rowremoved:this.onRemove})},onKeyPress:function(g,b){var a=b=="up",h=a?"selectPrevious":"selectNext",d=a?-1:1,c;if(!g.shiftKey||this.singleSelect){this[h](false)}else{if(this.last!==false&&this.lastActive!==false){c=this.last;this.selectRange(this.last,this.lastActive+d);this.grid.getView().focusRow(this.lastActive);if(c!==false){this.last=c}}else{this.selectFirstRow()}}},onRefresh:function(){var g=this.grid.store,d=this.getSelections(),c=0,a=d.length,b,e;this.silent=true;this.clearSelections(true);for(;c<a;c++){e=d[c];if((b=g.indexOfId(e.id))!=-1){this.selectRow(b,true)}}if(d.length!=this.selections.getCount()){this.fireEvent("selectionchange",this)}this.silent=false},onRemove:function(a,b,c){if(this.selections.remove(c)!==false){this.fireEvent("selectionchange",this)}},onRowUpdated:function(a,b,c){if(this.isSelected(c)){a.onRowSelect(b)}},selectRecords:function(b,e){if(!e){this.clearSelections()}var d=this.grid.store,c=0,a=b.length;for(;c<a;c++){this.selectRow(d.indexOf(b[c]),true)}},getCount:function(){return this.selections.length},selectFirstRow:function(){this.selectRow(0)},selectLastRow:function(a){this.selectRow(this.grid.store.getCount()-1,a)},selectNext:function(a){if(this.hasNext()){this.selectRow(this.last+1,a);this.grid.getView().focusRow(this.last);return true}return false},selectPrevious:function(a){if(this.hasPrevious()){this.selectRow(this.last-1,a);this.grid.getView().focusRow(this.last);return true}return false},hasNext:function(){return this.last!==false&&(this.last+1)<this.grid.store.getCount()},hasPrevious:function(){return !!this.last},getSelections:function(){return[].concat(this.selections.items)},getSelected:function(){return this.selections.itemAt(0)},each:function(e,d){var c=this.getSelections(),b=0,a=c.length;for(;b<a;b++){if(e.call(d||this,c[b],b)===false){return false}}return true},clearSelections:function(a){if(this.isLocked()){return}if(a!==true){var c=this.grid.store,b=this.selections;b.each(function(d){this.deselectRow(c.indexOfId(d.id))},this);b.clear()}else{this.selections.clear()}this.last=false},selectAll:function(){if(this.isLocked()){return}this.selections.clear();for(var b=0,a=this.grid.store.getCount();b<a;b++){this.selectRow(b,true)}},hasSelection:function(){return this.selections.length>0},isSelected:function(a){var b=Ext.isNumber(a)?this.grid.store.getAt(a):a;return(b&&this.selections.key(b.id)?true:false)},isIdSelected:function(a){return(this.selections.key(a)?true:false)},handleMouseDown:function(d,i,h){if(h.button!==0||this.isLocked()){return}var a=this.grid.getView();if(h.shiftKey&&!this.singleSelect&&this.last!==false){var c=this.last;this.selectRange(c,i,h.ctrlKey);this.last=c;a.focusRow(i)}else{var b=this.isSelected(i);if(h.ctrlKey&&b){this.deselectRow(i)}else{if(!b||this.getCount()>1){this.selectRow(i,h.ctrlKey||h.shiftKey);a.focusRow(i)}}}},selectRows:function(c,d){if(!d){this.clearSelections()}for(var b=0,a=c.length;b<a;b++){this.selectRow(c[b],true)}},selectRange:function(b,a,d){var c;if(this.isLocked()){return}if(!d){this.clearSelections()}if(b<=a){for(c=b;c<=a;c++){this.selectRow(c,true)}}else{for(c=b;c>=a;c--){this.selectRow(c,true)}}},deselectRange:function(c,b,a){if(this.isLocked()){return}for(var d=c;d<=b;d++){this.deselectRow(d,a)}},selectRow:function(b,d,a){if(this.isLocked()||(b<0||b>=this.grid.store.getCount())||(d&&this.isSelected(b))){return}var c=this.grid.store.getAt(b);if(c&&this.fireEvent("beforerowselect",this,b,d,c)!==false){if(!d||this.singleSelect){this.clearSelections()}this.selections.add(c);this.last=this.lastActive=b;if(!a){this.grid.getView().onRowSelect(b)}if(!this.silent){this.fireEvent("rowselect",this,b,c);this.fireEvent("selectionchange",this)}}},deselectRow:function(b,a){if(this.isLocked()){return}if(this.last==b){this.last=false}if(this.lastActive==b){this.lastActive=false}var c=this.grid.store.getAt(b);if(c){this.selections.remove(c);if(!a){this.grid.getView().onRowDeselect(b)}this.fireEvent("rowdeselect",this,b,c);this.fireEvent("selectionchange",this)}},acceptsNav:function(c,b,a){return !a.isHidden(b)&&a.isCellEditable(b,c)},onEditorKey:function(o,m){var d=m.getKey(),h,i=this.grid,q=i.lastEdit,l=i.activeEditor,b=m.shiftKey,p,q,a,n;if(d==m.TAB){m.stopEvent();l.completeEdit();if(b){h=i.walkCells(l.row,l.col-1,-1,this.acceptsNav,this)}else{h=i.walkCells(l.row,l.col+1,1,this.acceptsNav,this)}}else{if(d==m.ENTER){if(this.moveEditorOnEnter!==false){if(b){h=i.walkCells(q.row-1,q.col,-1,this.acceptsNav,this)}else{h=i.walkCells(q.row+1,q.col,1,this.acceptsNav,this)}}}}if(h){a=h[0];n=h[1];this.onEditorSelect(a,q.row);if(i.isEditor&&i.editing){p=i.activeEditor;if(p&&p.field.triggerBlur){p.field.triggerBlur()}}i.startEditing(a,n)}},onEditorSelect:function(b,a){if(a!=b){this.selectRow(b)}},destroy:function(){Ext.destroy(this.rowNav);this.rowNav=null;Ext.grid.RowSelectionModel.superclass.destroy.call(this)}});Ext.grid.Column=Ext.extend(Ext.util.Observable,{isColumn:true,constructor:function(b){Ext.apply(this,b);if(Ext.isString(this.renderer)){this.renderer=Ext.util.Format[this.renderer]}else{if(Ext.isObject(this.renderer)){this.scope=this.renderer.scope;this.renderer=this.renderer.fn}}if(!this.scope){this.scope=this}var a=this.editor;delete this.editor;this.setEditor(a);this.addEvents("click","contextmenu","dblclick","mousedown");Ext.grid.Column.superclass.constructor.call(this)},processEvent:function(b,d,c,g,a){return this.fireEvent(b,this,c,g,d)},destroy:function(){if(this.setEditor){this.setEditor(null)}this.purgeListeners()},renderer:function(a){return a},getEditor:function(a){return this.editable!==false?this.editor:null},setEditor:function(b){var a=this.editor;if(a){if(a.gridEditor){a.gridEditor.destroy();delete a.gridEditor}else{a.destroy()}}this.editor=null;if(b){if(!b.isXType){b=Ext.create(b,"textfield")}this.editor=b}},getCellEditor:function(b){var a=this.getEditor(b);if(a){if(!a.startEdit){if(!a.gridEditor){a.gridEditor=new Ext.grid.GridEditor(a)}a=a.gridEditor}}return a}});Ext.grid.BooleanColumn=Ext.extend(Ext.grid.Column,{trueText:"true",falseText:"false",undefinedText:" ",constructor:function(a){Ext.grid.BooleanColumn.superclass.constructor.call(this,a);var c=this.trueText,d=this.falseText,b=this.undefinedText;this.renderer=function(e){if(e===undefined){return b}if(!e||e==="false"){return d}return c}}});Ext.grid.NumberColumn=Ext.extend(Ext.grid.Column,{format:"0,000.00",constructor:function(a){Ext.grid.NumberColumn.superclass.constructor.call(this,a);this.renderer=Ext.util.Format.numberRenderer(this.format)}});Ext.grid.DateColumn=Ext.extend(Ext.grid.Column,{format:"m/d/Y",constructor:function(a){Ext.grid.DateColumn.superclass.constructor.call(this,a);this.renderer=Ext.util.Format.dateRenderer(this.format)}});Ext.grid.TemplateColumn=Ext.extend(Ext.grid.Column,{constructor:function(a){Ext.grid.TemplateColumn.superclass.constructor.call(this,a);var b=(!Ext.isPrimitive(this.tpl)&&this.tpl.compile)?this.tpl:new Ext.XTemplate(this.tpl);this.renderer=function(d,e,c){return b.apply(c.data)};this.tpl=b}});Ext.grid.ActionColumn=Ext.extend(Ext.grid.Column,{header:" ",actionIdRe:/x-action-col-(\d+)/,altText:"",constructor:function(b){var g=this,c=b.items||(g.items=[g]),a=c.length,d,e;Ext.grid.ActionColumn.superclass.constructor.call(g,b);g.renderer=function(h,i){h=Ext.isFunction(b.renderer)?b.renderer.apply(this,arguments)||"":"";i.css+=" x-action-col-cell";for(d=0;d<a;d++){e=c[d];h+='<img alt="'+g.altText+'" src="'+(e.icon||Ext.BLANK_IMAGE_URL)+'" class="x-action-col-icon x-action-col-'+String(d)+" "+(e.iconCls||"")+" "+(Ext.isFunction(e.getClass)?e.getClass.apply(e.scope||this.scope||this,arguments):"")+'"'+((e.tooltip)?' ext:qtip="'+e.tooltip+'"':"")+" />"}return h}},destroy:function(){delete this.items;delete this.renderer;return Ext.grid.ActionColumn.superclass.destroy.apply(this,arguments)},processEvent:function(c,i,d,k,b){var a=i.getTarget().className.match(this.actionIdRe),h,g;if(a&&(h=this.items[parseInt(a[1],10)])){if(c=="click"){(g=h.handler||this.handler)&&g.call(h.scope||this.scope||this,d,k,b,h,i)}else{if((c=="mousedown")&&(h.stopSelection!==false)){return false}}}return Ext.grid.ActionColumn.superclass.processEvent.apply(this,arguments)}});Ext.grid.Column.types={gridcolumn:Ext.grid.Column,booleancolumn:Ext.grid.BooleanColumn,numbercolumn:Ext.grid.NumberColumn,datecolumn:Ext.grid.DateColumn,templatecolumn:Ext.grid.TemplateColumn,actioncolumn:Ext.grid.ActionColumn};Ext.grid.RowNumberer=Ext.extend(Object,{header:"",width:23,sortable:false,constructor:function(a){Ext.apply(this,a);if(this.rowspan){this.renderer=this.renderer.createDelegate(this)}},fixed:true,hideable:false,menuDisabled:true,dataIndex:"",id:"numberer",rowspan:undefined,renderer:function(b,c,a,d){if(this.rowspan){c.cellAttr='rowspan="'+this.rowspan+'"'}return d+1}});Ext.grid.CheckboxSelectionModel=Ext.extend(Ext.grid.RowSelectionModel,{header:'<div class="x-grid3-hd-checker"> </div>',width:20,sortable:false,menuDisabled:true,fixed:true,hideable:false,dataIndex:"",id:"checker",isColumn:true,constructor:function(){Ext.grid.CheckboxSelectionModel.superclass.constructor.apply(this,arguments);if(this.checkOnly){this.handleMouseDown=Ext.emptyFn}},initEvents:function(){Ext.grid.CheckboxSelectionModel.superclass.initEvents.call(this);this.grid.on("render",function(){Ext.fly(this.grid.getView().innerHd).on("mousedown",this.onHdMouseDown,this)},this)},processEvent:function(b,d,c,g,a){if(b=="mousedown"){this.onMouseDown(d,d.getTarget());return false}else{return Ext.grid.Column.prototype.processEvent.apply(this,arguments)}},onMouseDown:function(c,b){if(c.button===0&&b.className=="x-grid3-row-checker"){c.stopEvent();var d=c.getTarget(".x-grid3-row");if(d){var a=d.rowIndex;if(this.isSelected(a)){this.deselectRow(a)}else{this.selectRow(a,true);this.grid.getView().focusRow(a)}}}},onHdMouseDown:function(c,a){if(a.className=="x-grid3-hd-checker"){c.stopEvent();var b=Ext.fly(a.parentNode);var d=b.hasClass("x-grid3-hd-checker-on");if(d){b.removeClass("x-grid3-hd-checker-on");this.clearSelections()}else{b.addClass("x-grid3-hd-checker-on");this.selectAll()}}},renderer:function(b,c,a){return'<div class="x-grid3-row-checker"> </div>'},onEditorSelect:function(b,a){if(a!=b&&!this.checkOnly){this.selectRow(b)}}});Ext.grid.CellSelectionModel=Ext.extend(Ext.grid.AbstractSelectionModel,{constructor:function(a){Ext.apply(this,a);this.selection=null;this.addEvents("beforecellselect","cellselect","selectionchange");Ext.grid.CellSelectionModel.superclass.constructor.call(this)},initEvents:function(){this.grid.on("cellmousedown",this.handleMouseDown,this);this.grid.on(Ext.EventManager.getKeyEvent(),this.handleKeyDown,this);this.grid.getView().on({scope:this,refresh:this.onViewChange,rowupdated:this.onRowUpdated,beforerowremoved:this.clearSelections,beforerowsinserted:this.clearSelections});if(this.grid.isEditor){this.grid.on("beforeedit",this.beforeEdit,this)}},beforeEdit:function(a){this.select(a.row,a.column,false,true,a.record)},onRowUpdated:function(a,b,c){if(this.selection&&this.selection.record==c){a.onCellSelect(b,this.selection.cell[1])}},onViewChange:function(){this.clearSelections(true)},getSelectedCell:function(){return this.selection?this.selection.cell:null},clearSelections:function(b){var a=this.selection;if(a){if(b!==true){this.grid.view.onCellDeselect(a.cell[0],a.cell[1])}this.selection=null;this.fireEvent("selectionchange",this,null)}},hasSelection:function(){return this.selection?true:false},handleMouseDown:function(b,d,a,c){if(c.button!==0||this.isLocked()){return}this.select(d,a)},select:function(g,c,b,e,d){if(this.fireEvent("beforecellselect",this,g,c)!==false){this.clearSelections();d=d||this.grid.store.getAt(g);this.selection={record:d,cell:[g,c]};if(!b){var a=this.grid.getView();a.onCellSelect(g,c);if(e!==true){a.focusCell(g,c)}}this.fireEvent("cellselect",this,g,c);this.fireEvent("selectionchange",this,this.selection)}},isSelectable:function(c,b,a){return !a.isHidden(b)},onEditorKey:function(b,a){if(a.getKey()==a.TAB){this.handleKeyDown(a)}},handleKeyDown:function(l){if(!l.isNavKeyPress()){return}var d=l.getKey(),i=this.grid,q=this.selection,b=this,n=function(g,c,e){return i.walkCells(g,c,e,i.isEditor&&i.editing?b.acceptsNav:b.isSelectable,b)},p,h,a,m,o;switch(d){case l.ESC:case l.PAGE_UP:case l.PAGE_DOWN:break;default:l.stopEvent();break}if(!q){p=n(0,0,1);if(p){this.select(p[0],p[1])}return}p=q.cell;a=p[0];m=p[1];switch(d){case l.TAB:if(l.shiftKey){h=n(a,m-1,-1)}else{h=n(a,m+1,1)}break;case l.DOWN:h=n(a+1,m,1);break;case l.UP:h=n(a-1,m,-1);break;case l.RIGHT:h=n(a,m+1,1);break;case l.LEFT:h=n(a,m-1,-1);break;case l.ENTER:if(i.isEditor&&!i.editing){i.startEditing(a,m);return}break}if(h){a=h[0];m=h[1];this.select(a,m);if(i.isEditor&&i.editing){o=i.activeEditor;if(o&&o.field.triggerBlur){o.field.triggerBlur()}i.startEditing(a,m)}}},acceptsNav:function(c,b,a){return !a.isHidden(b)&&a.isCellEditable(b,c)}});Ext.grid.EditorGridPanel=Ext.extend(Ext.grid.GridPanel,{clicksToEdit:2,forceValidation:false,isEditor:true,detectEdit:false,autoEncode:false,trackMouseOver:false,initComponent:function(){Ext.grid.EditorGridPanel.superclass.initComponent.call(this);if(!this.selModel){this.selModel=new Ext.grid.CellSelectionModel()}this.activeEditor=null;this.addEvents("beforeedit","afteredit","validateedit")},initEvents:function(){Ext.grid.EditorGridPanel.superclass.initEvents.call(this);this.getGridEl().on("mousewheel",this.stopEditing.createDelegate(this,[true]),this);this.on("columnresize",this.stopEditing,this,[true]);if(this.clicksToEdit==1){this.on("cellclick",this.onCellDblClick,this)}else{var a=this.getView();if(this.clicksToEdit=="auto"&&a.mainBody){a.mainBody.on("mousedown",this.onAutoEditClick,this)}this.on("celldblclick",this.onCellDblClick,this)}},onResize:function(){Ext.grid.EditorGridPanel.superclass.onResize.apply(this,arguments);var a=this.activeEditor;if(this.editing&&a){a.realign(true)}},onCellDblClick:function(b,c,a){this.startEditing(c,a)},onAutoEditClick:function(c,b){if(c.button!==0){return}var g=this.view.findRowIndex(b),a=this.view.findCellIndex(b);if(g!==false&&a!==false){this.stopEditing();if(this.selModel.getSelectedCell){var d=this.selModel.getSelectedCell();if(d&&d[0]===g&&d[1]===a){this.startEditing(g,a)}}else{if(this.selModel.isSelected(g)){this.startEditing(g,a)}}}},onEditComplete:function(b,d,a){this.editing=false;this.lastActiveEditor=this.activeEditor;this.activeEditor=null;var c=b.record,h=this.colModel.getDataIndex(b.col);d=this.postEditValue(d,a,c,h);if(this.forceValidation===true||String(d)!==String(a)){var g={grid:this,record:c,field:h,originalValue:a,value:d,row:b.row,column:b.col,cancel:false};if(this.fireEvent("validateedit",g)!==false&&!g.cancel&&String(d)!==String(a)){c.set(h,g.value);delete g.cancel;this.fireEvent("afteredit",g)}}this.view.focusCell(b.row,b.col)},startEditing:function(i,c){this.stopEditing();if(this.colModel.isCellEditable(c,i)){this.view.ensureVisible(i,c,true);var d=this.store.getAt(i),h=this.colModel.getDataIndex(c),g={grid:this,record:d,field:h,value:d.data[h],row:i,column:c,cancel:false};if(this.fireEvent("beforeedit",g)!==false&&!g.cancel){this.editing=true;var b=this.colModel.getCellEditor(c,i);if(!b){return}if(!b.rendered){b.parentEl=this.view.getEditorParent(b);b.on({scope:this,render:{fn:function(e){e.field.focus(false,true)},single:true,scope:this},specialkey:function(l,k){this.getSelectionModel().onEditorKey(l,k)},complete:this.onEditComplete,canceledit:this.stopEditing.createDelegate(this,[true])})}Ext.apply(b,{row:i,col:c,record:d});this.lastEdit={row:i,col:c};this.activeEditor=b;b.selectSameEditor=(this.activeEditor==this.lastActiveEditor);var a=this.preEditValue(d,h);b.startEdit(this.view.getCell(i,c).firstChild,Ext.isDefined(a)?a:"");(function(){delete b.selectSameEditor}).defer(50)}}},preEditValue:function(a,c){var b=a.data[c];return this.autoEncode&&Ext.isString(b)?Ext.util.Format.htmlDecode(b):b},postEditValue:function(c,a,b,d){return this.autoEncode&&Ext.isString(c)?Ext.util.Format.htmlEncode(c):c},stopEditing:function(b){if(this.editing){var a=this.lastActiveEditor=this.activeEditor;if(a){a[b===true?"cancelEdit":"completeEdit"]();this.view.focusCell(a.row,a.col)}this.activeEditor=null}this.editing=false}});Ext.reg("editorgrid",Ext.grid.EditorGridPanel);Ext.grid.GridEditor=function(b,a){Ext.grid.GridEditor.superclass.constructor.call(this,b,a);b.monitorTab=false};Ext.extend(Ext.grid.GridEditor,Ext.Editor,{alignment:"tl-tl",autoSize:"width",hideEl:false,cls:"x-small-editor x-grid-editor",shim:false,shadow:false});Ext.grid.PropertyRecord=Ext.data.Record.create([{name:"name",type:"string"},"value"]);Ext.grid.PropertyStore=Ext.extend(Ext.util.Observable,{constructor:function(a,b){this.grid=a;this.store=new Ext.data.Store({recordType:Ext.grid.PropertyRecord});this.store.on("update",this.onUpdate,this);if(b){this.setSource(b)}Ext.grid.PropertyStore.superclass.constructor.call(this)},setSource:function(c){this.source=c;this.store.removeAll();var b=[];for(var a in c){if(this.isEditableValue(c[a])){b.push(new Ext.grid.PropertyRecord({name:a,value:c[a]},a))}}this.store.loadRecords({records:b},{},true)},onUpdate:function(e,a,d){if(d==Ext.data.Record.EDIT){var b=a.data.value;var c=a.modified.value;if(this.grid.fireEvent("beforepropertychange",this.source,a.id,b,c)!==false){this.source[a.id]=b;a.commit();this.grid.fireEvent("propertychange",this.source,a.id,b,c)}else{a.reject()}}},getProperty:function(a){return this.store.getAt(a)},isEditableValue:function(a){return Ext.isPrimitive(a)||Ext.isDate(a)},setValue:function(d,c,a){var b=this.getRec(d);if(b){b.set("value",c);this.source[d]=c}else{if(a){this.source[d]=c;b=new Ext.grid.PropertyRecord({name:d,value:c},d);this.store.add(b)}}},remove:function(b){var a=this.getRec(b);if(a){this.store.remove(a);delete this.source[b]}},getRec:function(a){return this.store.getById(a)},getSource:function(){return this.source}});Ext.grid.PropertyColumnModel=Ext.extend(Ext.grid.ColumnModel,{nameText:"Name",valueText:"Value",dateFormat:"m/j/Y",trueText:"true",falseText:"false",constructor:function(c,b){var d=Ext.grid,e=Ext.form;this.grid=c;d.PropertyColumnModel.superclass.constructor.call(this,[{header:this.nameText,width:50,sortable:true,dataIndex:"name",id:"name",menuDisabled:true},{header:this.valueText,width:50,resizable:false,dataIndex:"value",id:"value",menuDisabled:true}]);this.store=b;var a=new e.Field({autoCreate:{tag:"select",children:[{tag:"option",value:"true",html:this.trueText},{tag:"option",value:"false",html:this.falseText}]},getValue:function(){return this.el.dom.value=="true"}});this.editors={date:new d.GridEditor(new e.DateField({selectOnFocus:true})),string:new d.GridEditor(new e.TextField({selectOnFocus:true})),number:new d.GridEditor(new e.NumberField({selectOnFocus:true,style:"text-align:left;"})),"boolean":new d.GridEditor(a,{autoSize:"both"})};this.renderCellDelegate=this.renderCell.createDelegate(this);this.renderPropDelegate=this.renderProp.createDelegate(this)},renderDate:function(a){return a.dateFormat(this.dateFormat)},renderBool:function(a){return this[a?"trueText":"falseText"]},isCellEditable:function(a,b){return a==1},getRenderer:function(a){return a==1?this.renderCellDelegate:this.renderPropDelegate},renderProp:function(a){return this.getPropertyName(a)},renderCell:function(d,b,c){var a=this.grid.customRenderers[c.get("name")];if(a){return a.apply(this,arguments)}var e=d;if(Ext.isDate(d)){e=this.renderDate(d)}else{if(typeof d=="boolean"){e=this.renderBool(d)}}return Ext.util.Format.htmlEncode(e)},getPropertyName:function(b){var a=this.grid.propertyNames;return a&&a[b]?a[b]:b},getCellEditor:function(a,e){var b=this.store.getProperty(e),d=b.data.name,c=b.data.value;if(this.grid.customEditors[d]){return this.grid.customEditors[d]}if(Ext.isDate(c)){return this.editors.date}else{if(typeof c=="number"){return this.editors.number}else{if(typeof c=="boolean"){return this.editors["boolean"]}else{return this.editors.string}}}},destroy:function(){Ext.grid.PropertyColumnModel.superclass.destroy.call(this);this.destroyEditors(this.editors);this.destroyEditors(this.grid.customEditors)},destroyEditors:function(b){for(var a in b){Ext.destroy(b[a])}}});Ext.grid.PropertyGrid=Ext.extend(Ext.grid.EditorGridPanel,{enableColumnMove:false,stripeRows:false,trackMouseOver:false,clicksToEdit:1,enableHdMenu:false,viewConfig:{forceFit:true},initComponent:function(){this.customRenderers=this.customRenderers||{};this.customEditors=this.customEditors||{};this.lastEditRow=null;var b=new Ext.grid.PropertyStore(this);this.propStore=b;var a=new Ext.grid.PropertyColumnModel(this,b);b.store.sort("name","ASC");this.addEvents("beforepropertychange","propertychange");this.cm=a;this.ds=b.store;Ext.grid.PropertyGrid.superclass.initComponent.call(this);this.mon(this.selModel,"beforecellselect",function(e,d,c){if(c===0){this.startEditing.defer(200,this,[d,1]);return false}},this)},onRender:function(){Ext.grid.PropertyGrid.superclass.onRender.apply(this,arguments);this.getGridEl().addClass("x-props-grid")},afterRender:function(){Ext.grid.PropertyGrid.superclass.afterRender.apply(this,arguments);if(this.source){this.setSource(this.source)}},setSource:function(a){this.propStore.setSource(a)},getSource:function(){return this.propStore.getSource()},setProperty:function(c,b,a){this.propStore.setValue(c,b,a)},removeProperty:function(a){this.propStore.remove(a)}});Ext.reg("propertygrid",Ext.grid.PropertyGrid);Ext.grid.GroupingView=Ext.extend(Ext.grid.GridView,{groupByText:"Group By This Field",showGroupsText:"Show in Groups",hideGroupedColumn:false,showGroupName:true,startCollapsed:false,enableGrouping:true,enableGroupingMenu:true,enableNoGroups:true,emptyGroupText:"(None)",ignoreAdd:false,groupTextTpl:"{text}",groupMode:"value",cancelEditOnToggle:true,initTemplates:function(){Ext.grid.GroupingView.superclass.initTemplates.call(this);this.state={};var a=this.grid.getSelectionModel();a.on(a.selectRow?"beforerowselect":"beforecellselect",this.onBeforeRowSelect,this);if(!this.startGroup){this.startGroup=new Ext.XTemplate('<div id="{groupId}" class="x-grid-group {cls}">','<div id="{groupId}-hd" class="x-grid-group-hd" style="{style}"><div class="x-grid-group-title">',this.groupTextTpl,"</div></div>",'<div id="{groupId}-bd" class="x-grid-group-body">')}this.startGroup.compile();if(!this.endGroup){this.endGroup="</div></div>"}},findGroup:function(a){return Ext.fly(a).up(".x-grid-group",this.mainBody.dom)},getGroups:function(){return this.hasRows()?this.mainBody.dom.childNodes:[]},onAdd:function(d,a,b){if(this.canGroup()&&!this.ignoreAdd){var c=this.getScrollState();this.fireEvent("beforerowsinserted",d,b,b+(a.length-1));this.refresh();this.restoreScroll(c);this.fireEvent("rowsinserted",d,b,b+(a.length-1))}else{if(!this.canGroup()){Ext.grid.GroupingView.superclass.onAdd.apply(this,arguments)}}},onRemove:function(e,a,b,d){Ext.grid.GroupingView.superclass.onRemove.apply(this,arguments);var c=document.getElementById(a._groupId);if(c&&c.childNodes[1].childNodes.length<1){Ext.removeNode(c)}this.applyEmptyText()},refreshRow:function(a){if(this.ds.getCount()==1){this.refresh()}else{this.isUpdating=true;Ext.grid.GroupingView.superclass.refreshRow.apply(this,arguments);this.isUpdating=false}},beforeMenuShow:function(){var c,a=this.hmenu.items,b=this.cm.config[this.hdCtxIndex].groupable===false;if((c=a.get("groupBy"))){c.setDisabled(b)}if((c=a.get("showGroups"))){c.setDisabled(b);c.setChecked(this.canGroup(),true)}},renderUI:function(){var a=Ext.grid.GroupingView.superclass.renderUI.call(this);if(this.enableGroupingMenu&&this.hmenu){this.hmenu.add("-",{itemId:"groupBy",text:this.groupByText,handler:this.onGroupByClick,scope:this,iconCls:"x-group-by-icon"});if(this.enableNoGroups){this.hmenu.add({itemId:"showGroups",text:this.showGroupsText,checked:true,checkHandler:this.onShowGroupsClick,scope:this})}this.hmenu.on("beforeshow",this.beforeMenuShow,this)}return a},processEvent:function(b,i){Ext.grid.GroupingView.superclass.processEvent.call(this,b,i);var h=i.getTarget(".x-grid-group-hd",this.mainBody);if(h){var g=this.getGroupField(),d=this.getPrefix(g),a=h.id.substring(d.length),c=new RegExp("gp-"+Ext.escapeRe(g)+"--hd");a=a.substr(0,a.length-3);if(a||c.test(h.id)){this.grid.fireEvent("group"+b,this.grid,g,a,i)}if(b=="mousedown"&&i.button==0){this.toggleGroup(h.parentNode)}}},onGroupByClick:function(){var a=this.grid;this.enableGrouping=true;a.store.groupBy(this.cm.getDataIndex(this.hdCtxIndex));a.fireEvent("groupchange",a,a.store.getGroupState());this.beforeMenuShow();this.refresh()},onShowGroupsClick:function(a,b){this.enableGrouping=b;if(b){this.onGroupByClick()}else{this.grid.store.clearGrouping();this.grid.fireEvent("groupchange",this,null)}},toggleRowIndex:function(c,a){if(!this.canGroup()){return}var b=this.getRow(c);if(b){this.toggleGroup(this.findGroup(b),a)}},toggleGroup:function(c,b){var a=Ext.get(c);b=Ext.isDefined(b)?b:a.hasClass("x-grid-group-collapsed");if(this.state[a.id]!==b){if(this.cancelEditOnToggle!==false){this.grid.stopEditing(true)}this.state[a.id]=b;a[b?"removeClass":"addClass"]("x-grid-group-collapsed")}},toggleAllGroups:function(c){var b=this.getGroups();for(var d=0,a=b.length;d<a;d++){this.toggleGroup(b[d],c)}},expandAllGroups:function(){this.toggleAllGroups(true)},collapseAllGroups:function(){this.toggleAllGroups(false)},getGroup:function(a,e,i,k,b,h){var c=this.cm.config[b],d=i?i.call(c.scope,a,{},e,k,b,h):String(a);if(d===""||d===" "){d=c.emptyGroupText||this.emptyGroupText}return d},getGroupField:function(){return this.grid.store.getGroupState()},afterRender:function(){if(!this.ds||!this.cm){return}Ext.grid.GroupingView.superclass.afterRender.call(this);if(this.grid.deferRowRender){this.updateGroupWidths()}},afterRenderUI:function(){Ext.grid.GroupingView.superclass.afterRenderUI.call(this);if(this.enableGroupingMenu&&this.hmenu){this.hmenu.add("-",{itemId:"groupBy",text:this.groupByText,handler:this.onGroupByClick,scope:this,iconCls:"x-group-by-icon"});if(this.enableNoGroups){this.hmenu.add({itemId:"showGroups",text:this.showGroupsText,checked:true,checkHandler:this.onShowGroupsClick,scope:this})}this.hmenu.on("beforeshow",this.beforeMenuShow,this)}},renderRows:function(){var a=this.getGroupField();var e=!!a;if(this.hideGroupedColumn){var b=this.cm.findColumnIndex(a),d=Ext.isDefined(this.lastGroupField);if(!e&&d){this.mainBody.update("");this.cm.setHidden(this.cm.findColumnIndex(this.lastGroupField),false);delete this.lastGroupField}else{if(e&&!d){this.lastGroupField=a;this.cm.setHidden(b,true)}else{if(e&&d&&a!==this.lastGroupField){this.mainBody.update("");var c=this.cm.findColumnIndex(this.lastGroupField);this.cm.setHidden(c,false);this.lastGroupField=a;this.cm.setHidden(b,true)}}}}return Ext.grid.GroupingView.superclass.renderRows.apply(this,arguments)},doRender:function(c,h,s,a,q,t){if(h.length<1){return""}if(!this.canGroup()||this.isUpdating){return Ext.grid.GroupingView.superclass.doRender.apply(this,arguments)}var A=this.getGroupField(),p=this.cm.findColumnIndex(A),x,k="width:"+this.getTotalWidth()+";",e=this.cm.config[p],b=e.groupRenderer||e.renderer,u=this.showGroupName?(e.groupName||e.header)+": ":"",z=[],m,v,w,o;for(v=0,w=h.length;v<w;v++){var l=a+v,n=h[v],d=n.data[A];x=this.getGroup(d,n,b,l,p,s);if(!m||m.group!=x){o=this.constructId(d,A,p);this.state[o]=!(Ext.isDefined(this.state[o])?!this.state[o]:this.startCollapsed);m={group:x,gvalue:d,text:u+x,groupId:o,startRow:l,rs:[n],cls:this.state[o]?"":"x-grid-group-collapsed",style:k};z.push(m)}else{m.rs.push(n)}n._groupId=o}var y=[];for(v=0,w=z.length;v<w;v++){x=z[v];this.doGroupStart(y,x,c,s,q);y[y.length]=Ext.grid.GroupingView.superclass.doRender.call(this,c,x.rs,s,x.startRow,q,t);this.doGroupEnd(y,x,c,s,q)}return y.join("")},getGroupId:function(a){var b=this.getGroupField();return this.constructId(a,b,this.cm.findColumnIndex(b))},constructId:function(c,e,a){var b=this.cm.config[a],d=b.groupRenderer||b.renderer,g=(this.groupMode=="value")?c:this.getGroup(c,{data:{}},d,0,a,this.ds);return this.getPrefix(e)+Ext.util.Format.htmlEncode(g)},canGroup:function(){return this.enableGrouping&&!!this.getGroupField()},getPrefix:function(a){return this.grid.getGridEl().id+"-gp-"+a+"-"},doGroupStart:function(a,d,b,e,c){a[a.length]=this.startGroup.apply(d)},doGroupEnd:function(a,d,b,e,c){a[a.length]=this.endGroup},getRows:function(){if(!this.canGroup()){return Ext.grid.GroupingView.superclass.getRows.call(this)}var k=[],c=this.getGroups(),h,e=0,a=c.length,d,b;for(;e<a;++e){h=c[e].childNodes[1];if(h){h=h.childNodes;for(d=0,b=h.length;d<b;++d){k[k.length]=h[d]}}}return k},updateGroupWidths:function(){if(!this.canGroup()||!this.hasRows()){return}var c=Math.max(this.cm.getTotalWidth(),this.el.dom.offsetWidth-this.getScrollOffset())+"px";var b=this.getGroups();for(var d=0,a=b.length;d<a;d++){b[d].firstChild.style.width=c}},onColumnWidthUpdated:function(c,a,b){Ext.grid.GroupingView.superclass.onColumnWidthUpdated.call(this,c,a,b);this.updateGroupWidths()},onAllColumnWidthsUpdated:function(a,b){Ext.grid.GroupingView.superclass.onAllColumnWidthsUpdated.call(this,a,b);this.updateGroupWidths()},onColumnHiddenUpdated:function(b,c,a){Ext.grid.GroupingView.superclass.onColumnHiddenUpdated.call(this,b,c,a);this.updateGroupWidths()},onLayout:function(){this.updateGroupWidths()},onBeforeRowSelect:function(b,a){this.toggleRowIndex(a,true)}});Ext.grid.GroupingView.GROUP_ID=1000; \ No newline at end of file diff --git a/tests/javascript/frameworks/ext/ext-base-2.3.0.js b/tests/javascript/frameworks/ext/ext-base-2.3.0.js index 56fa97e525552de3b0225ea288cfaab961a91f7f..148fffa0bd01cc1207526f15fe9b2df51e263b99 100644 --- a/tests/javascript/frameworks/ext/ext-base-2.3.0.js +++ b/tests/javascript/frameworks/ext/ext-base-2.3.0.js @@ -2,7 +2,7 @@ * Ext JS Library 2.3.0 * Copyright(c) 2006-2009, Ext JS, LLC. * licensing@extjs.com - * + * * http://extjs.com/license */ diff --git a/tests/javascript/frameworks/ext/ext-core-3.0.0.js b/tests/javascript/frameworks/ext/ext-core-3.0.0.js index 0735c672b6ab1ba65d9056b236289e1d22748b95..1d77c6b2ee5c9a05be05675e50bfdc5ebb8eb9f2 100644 --- a/tests/javascript/frameworks/ext/ext-core-3.0.0.js +++ b/tests/javascript/frameworks/ext/ext-core-3.0.0.js @@ -2,8 +2,8 @@ * Ext Core Library 3.0 * http://extjs.com/ * Copyright(c) 2006-2009, Ext JS, LLC. - * + * * MIT Licensed - http://extjs.com/license/mit.txt - * + * */ window.undefined=window.undefined;Ext={version:"3.0"};Ext.apply=function(d,e,b){if(b){Ext.apply(d,b)}if(d&&e&&typeof e=="object"){for(var a in e){d[a]=e[a]}}return d};(function(){var d=0,r=navigator.userAgent.toLowerCase(),w=function(e){return e.test(r)},k=document.compatMode=="CSS1Compat",y=w(/opera/),g=w(/chrome/),s=w(/webkit/),v=!g&&w(/safari/),a=v&&w(/version\/3/),z=v&&w(/version\/4/),q=!y&&w(/msie/),o=q&&w(/msie 7/),n=q&&w(/msie 8/),p=q&&!o&&!n,m=!s&&w(/gecko/),b=m&&w(/rv:1\.9/),t=q&&!k,x=w(/windows|win32/),j=w(/macintosh|mac os x/),h=w(/adobeair/),l=w(/linux/),c=/^https/i.test(window.location.protocol);if(p){try{document.execCommand("BackgroundImageCache",false,true)}catch(u){}}Ext.apply(Ext,{isStrict:k,isSecure:c,isReady:false,enableGarbageCollector:true,enableListenerCollection:false,USE_NATIVE_JSON:false,applyIf:function(A,B){if(A){for(var e in B){if(Ext.isEmpty(A[e])){A[e]=B[e]}}}return A},id:function(e,A){return(e=Ext.getDom(e)||{}).id=e.id||(A||"ext-gen")+(++d)},extend:function(){var A=function(C){for(var B in C){this[B]=C[B]}};var e=Object.prototype.constructor;return function(H,D,G){if(Ext.isObject(D)){G=D;D=H;H=G.constructor!=e?G.constructor:function(){D.apply(this,arguments)}}var C=function(){},E,B=D.prototype;C.prototype=B;E=H.prototype=new C();E.constructor=H;H.superclass=B;if(B.constructor==e){B.constructor=D}H.override=function(F){Ext.override(H,F)};E.superclass=E.supr=(function(){return B});E.override=A;Ext.override(H,G);H.extend=function(F){Ext.extend(H,F)};return H}}(),override:function(e,B){if(B){var A=e.prototype;Ext.apply(A,B);if(Ext.isIE&&B.toString!=e.toString){A.toString=B.toString}}},namespace:function(){var A,e;Ext.each(arguments,function(B){e=B.split(".");A=window[e[0]]=window[e[0]]||{};Ext.each(e.slice(1),function(C){A=A[C]=A[C]||{}})});return A},urlEncode:function(F,E){var C,A=[],B,D=encodeURIComponent;for(B in F){C=typeof F[B]=="undefined";Ext.each(C?B:F[B],function(G,e){A.push("&",D(B),"=",(G!=B||!C)?D(G):"")})}if(!E){A.shift();E=""}return E+A.join("")},urlDecode:function(B,A){var E={},D=B.split("&"),F=decodeURIComponent,e,C;Ext.each(D,function(G){G=G.split("=");e=F(G[0]);C=F(G[1]);E[e]=A||!E[e]?C:[].concat(E[e]).concat(C)});return E},toArray:function(){return q?function(e,C,A,B){B=[];Ext.each(e,function(D){B.push(D)});return B.slice(C||0,A||B.length)}:function(e,B,A){return Array.prototype.slice.call(e,B||0,A||e.length)}}(),each:function(D,C,B){if(Ext.isEmpty(D,true)){return}if(typeof D.length=="undefined"||Ext.isPrimitive(D)){D=[D]}for(var A=0,e=D.length;A<e;A++){if(C.call(B||D[A],D[A],A,D)===false){return A}}},getDom:function(e){if(!e||!document){return null}return e.dom?e.dom:(typeof e=="string"?document.getElementById(e):e)},getBody:function(){return Ext.get(document.body||document.documentElement)},removeNode:q?function(){var e;return function(A){if(A&&A.tagName!="BODY"){e=e||document.createElement("div");e.appendChild(A);e.innerHTML=""}}}():function(e){if(e&&e.parentNode&&e.tagName!="BODY"){e.parentNode.removeChild(e)}},isEmpty:function(A,e){return A===null||A===undefined||((Ext.isArray(A)&&!A.length))||(!e?A==="":false)},isArray:function(e){return Object.prototype.toString.apply(e)==="[object Array]"},isObject:function(e){return e&&typeof e=="object"},isPrimitive:function(e){var A=typeof e;return A=="string"||A=="number"||A=="boolean"},isFunction:function(e){return typeof e=="function"},isOpera:y,isWebKit:s,isChrome:g,isSafari:v,isSafari3:a,isSafari4:z,isSafari2:v&&!(a||z),isIE:q,isIE6:p,isIE7:o,isIE8:n,isGecko:m,isGecko2:m&&!b,isGecko3:b,isBorderBox:t,isLinux:l,isWindows:x,isMac:j,isAir:h});Ext.ns=Ext.namespace})();Ext.ns("Ext","Ext.util","Ext.lib","Ext.data");Ext.apply(Function.prototype,{createInterceptor:function(b,a){var c=this;return !Ext.isFunction(b)?this:function(){var e=this,d=arguments;b.target=e;b.method=c;return(b.apply(a||e||window,d)!==false)?c.apply(e||window,d):null}},createCallback:function(){var a=arguments,b=this;return function(){return b.apply(window,a)}},createDelegate:function(c,b,a){var d=this;return function(){var g=b||arguments;if(a===true){g=Array.prototype.slice.call(arguments,0);g=g.concat(b)}else{if(typeof a=="number"){g=Array.prototype.slice.call(arguments,0);var e=[a,0].concat(b);Array.prototype.splice.apply(g,e)}}return d.apply(c||window,g)}},defer:function(c,e,b,a){var d=this.createDelegate(e,b,a);if(c>0){return setTimeout(d,c)}d();return 0}});Ext.applyIf(String,{format:function(b){var a=Ext.toArray(arguments,1);return b.replace(/\{(\d+)\}/g,function(c,d){return a[d]})}});Ext.applyIf(Array.prototype,{indexOf:function(c){for(var b=0,a=this.length;b<a;b++){if(this[b]==c){return b}}return -1},remove:function(b){var a=this.indexOf(b);if(a!=-1){this.splice(a,1)}return this}});Ext.util.TaskRunner=function(e){e=e||10;var g=[],a=[],b=0,h=false,d=function(){h=false;clearInterval(b);b=0},j=function(){if(!h){h=true;b=setInterval(k,e)}},c=function(l){a.push(l);if(l.onStop){l.onStop.apply(l.scope||l)}},k=function(){var n=a.length,p=new Date().getTime();if(n>0){for(var r=0;r<n;r++){g.remove(a[r])}a=[];if(g.length<1){d();return}}for(var r=0,q,m,o,l=g.length;r<l;++r){q=g[r];m=p-q.taskRunTime;if(q.interval<=m){o=q.run.apply(q.scope||q,q.args||[++q.taskRunCount]);q.taskRunTime=p;if(o===false||q.taskRunCount===q.repeat){c(q);return}}if(q.duration&&q.duration<=(p-q.taskStartTime)){c(q)}}};this.start=function(l){g.push(l);l.taskStartTime=new Date().getTime();l.taskRunTime=0;l.taskRunCount=0;j();return l};this.stop=function(l){c(l);return l};this.stopAll=function(){d();for(var m=0,l=g.length;m<l;m++){if(g[m].onStop){g[m].onStop()}}g=[];a=[]}};Ext.TaskMgr=new Ext.util.TaskRunner();(function(){var b;function c(d){if(!b){b=new Ext.Element.Flyweight()}b.dom=d;return b}(function(){var g=document,d=g.compatMode=="CSS1Compat",e=Math.max,h=parseInt;Ext.lib.Dom={isAncestor:function(k,l){var j=false;k=Ext.getDom(k);l=Ext.getDom(l);if(k&&l){if(k.contains){return k.contains(l)}else{if(k.compareDocumentPosition){return !!(k.compareDocumentPosition(l)&16)}else{while(l=l.parentNode){j=l==k||j}}}}return j},getViewWidth:function(j){return j?this.getDocumentWidth():this.getViewportWidth()},getViewHeight:function(j){return j?this.getDocumentHeight():this.getViewportHeight()},getDocumentHeight:function(){return e(!d?g.body.scrollHeight:g.documentElement.scrollHeight,this.getViewportHeight())},getDocumentWidth:function(){return e(!d?g.body.scrollWidth:g.documentElement.scrollWidth,this.getViewportWidth())},getViewportHeight:function(){return Ext.isIE?(Ext.isStrict?g.documentElement.clientHeight:g.body.clientHeight):self.innerHeight},getViewportWidth:function(){return !Ext.isStrict&&!Ext.isOpera?g.body.clientWidth:Ext.isIE?g.documentElement.clientWidth:self.innerWidth},getY:function(j){return this.getXY(j)[1]},getX:function(j){return this.getXY(j)[0]},getXY:function(l){var k,r,t,w,m,n,v=0,s=0,u,j,o=(g.body||g.documentElement),q=[0,0];l=Ext.getDom(l);if(l!=o){if(l.getBoundingClientRect){t=l.getBoundingClientRect();u=c(document).getScroll();q=[t.left+u.left,t.top+u.top]}else{k=l;j=c(l).isStyle("position","absolute");while(k){r=c(k);v+=k.offsetLeft;s+=k.offsetTop;j=j||r.isStyle("position","absolute");if(Ext.isGecko){s+=w=h(r.getStyle("borderTopWidth"),10)||0;v+=m=h(r.getStyle("borderLeftWidth"),10)||0;if(k!=l&&!r.isStyle("overflow","visible")){v+=m;s+=w}}k=k.offsetParent}if(Ext.isSafari&&j){v-=o.offsetLeft;s-=o.offsetTop}if(Ext.isGecko&&!j){n=c(o);v+=h(n.getStyle("borderLeftWidth"),10)||0;s+=h(n.getStyle("borderTopWidth"),10)||0}k=l.parentNode;while(k&&k!=o){if(!Ext.isOpera||(k.tagName!="TR"&&!c(k).isStyle("display","inline"))){v-=k.scrollLeft;s-=k.scrollTop}k=k.parentNode}q=[v,s]}}return q},setXY:function(k,l){(k=Ext.fly(k,"_setXY")).position();var m=k.translatePoints(l),j=k.dom.style,n;for(n in m){if(!isNaN(m[n])){j[n]=m[n]+"px"}}},setX:function(k,j){this.setXY(k,[j,false])},setY:function(j,k){this.setXY(j,[false,k])}}})();Ext.lib.Event=function(){var x=false,v=[],g=[],B=0,r=[],d,E=false,l=window,H=document,m=200,t=20,C=0,s=1,j=2,n=3,u=3,y=4,e=function(){var I;if(l.addEventListener){I=function(M,K,L,J){if(K=="mouseenter"){L=L.createInterceptor(p);M.addEventListener("mouseover",L,(J))}else{if(K=="mouseleave"){L=L.createInterceptor(p);M.addEventListener("mouseout",L,(J))}else{M.addEventListener(K,L,(J))}}return L}}else{if(l.attachEvent){I=function(M,K,L,J){M.attachEvent("on"+K,L);return L}}else{I=function(){}}}return I}(),h=function(){var I;if(l.removeEventListener){I=function(M,K,L,J){if(K=="mouseenter"){K="mouseover"}else{if(K=="mouseleave"){K="mouseout"}}M.removeEventListener(K,L,(J))}}else{if(l.detachEvent){I=function(L,J,K){L.detachEvent("on"+J,K)}}else{I=function(){}}}return I}();var D=Ext.isGecko?function(I){return Object.prototype.toString.call(I)=="[object XULElement]"}:function(){};var q=Ext.isGecko?function(I){try{return I.nodeType==3}catch(J){return false}}:function(I){return I.nodeType==3};function p(J){var I=z.getRelatedTarget(J);return !(D(I)||w(J.currentTarget,I))}function w(I,K){if(I&&I.firstChild){while(K){if(K===I){return true}try{K=K.parentNode}catch(J){return false}if(K&&(K.nodeType!=1)){K=null}}}return false}function A(L,I,K){var J=-1;Ext.each(v,function(M,N){if(M&&M[j]==K&&M[C]==L&&M[s]==I){J=N}});return J}function F(){var I=false,L=[],J,K=!x||(B>0);if(!E){E=true;Ext.each(r,function(N,O,M){if(N&&(J=H.getElementById(N.id))){if(!N.checkReady||x||J.nextSibling||(H&&H.body)){J=N.override?(N.override===true?N.obj:N.override):J;N.fn.call(J,N.obj);r[O]=null}else{L.push(item)}}});B=(L.length==0)?0:B-1;if(K){o()}else{clearInterval(d);d=null}I=!(E=false)}return I}function o(){if(!d){var I=function(){F()};d=setInterval(I,t)}}function G(){var I=Ext.fly(H).getScroll();return[I.top,I.top]}function k(I,J){I=I.browserEvent||I;var K=I["page"+J];if(!K&&0!=K){K=I["client"+J]||0;if(Ext.isIE){K+=G()[J=="X"?0:1]}}return K}var z={onAvailable:function(K,I,L,J){r.push({id:K,fn:I,obj:L,override:J,checkReady:false});B=m;o()},addListener:function(L,I,K){var J;L=Ext.getDom(L);if(L&&K){if("unload"==I){J=!!(g[g.length]=[L,I,K])}else{v.push([L,I,K,J=e(L,I,K,false)])}}return !!J},removeListener:function(N,J,M){var L=false,K,I;N=Ext.getDom(N);if(!M){L=this.purgeElement(N,false,J)}else{if("unload"==J){Ext.each(g,function(P,Q,O){if(P&&P[0]==N&&P[1]==J&&P[2]==M){g.splice(Q,1);L=true}})}else{K=arguments[3]||A(N,J,M);I=v[K];if(N&&I){h(N,J,I[n],false);I[n]=I[j]=null;v.splice(K,1);L=true}}}return L},getTarget:function(I){I=I.browserEvent||I;return this.resolveTextNode(I.target||I.srcElement)},resolveTextNode:function(I){return I&&!D(I)&&q(I)?I.parentNode:I},getRelatedTarget:function(I){I=I.browserEvent||I;return this.resolveTextNode(I.relatedTarget||(I.type=="mouseout"?I.toElement:I.type=="mouseover"?I.fromElement:null))},getPageX:function(I){return k(I,"X")},getPageY:function(I){return k(I,"Y")},getXY:function(I){return[this.getPageX(I),this.getPageY(I)]},stopEvent:function(I){this.stopPropagation(I);this.preventDefault(I)},stopPropagation:function(I){I=I.browserEvent||I;if(I.stopPropagation){I.stopPropagation()}else{I.cancelBubble=true}},preventDefault:function(I){I=I.browserEvent||I;if(I.preventDefault){I.preventDefault()}else{I.returnValue=false}},getEvent:function(I){I=I||l.event;if(!I){var J=this.getEvent.caller;while(J){I=J.arguments[0];if(I&&Event==I.constructor){break}J=J.caller}}return I},getCharCode:function(I){I=I.browserEvent||I;return I.charCode||I.keyCode||0},_load:function(J){x=true;var I=Ext.lib.Event;if(Ext.isIE&&J!==true){h(l,"load",arguments.callee)}},purgeElement:function(J,L,I){var K=this;Ext.each(K.getListeners(J,I),function(M){if(M){K.removeListener(J,M.type,M.fn)}});if(L&&J&&J.childNodes){Ext.each(J.childNodes,function(M){K.purgeElement(M,L,I)})}},getListeners:function(L,J){var M=this,K=[],I;if(J){I=J=="unload"?g:v}else{I=v.concat(g)}Ext.each(I,function(N,O){if(N&&N[C]==L&&(!J||J==N[s])){K.push({type:N[s],fn:N[j],obj:N[u],adjust:N[y],index:O})}});return K.length?K:null},_unload:function(P){var O=Ext.lib.Event,M,L,J,I,K,N;Ext.each(g,function(Q){if(Q){try{N=Q[y]?(Q[y]===true?Q[u]:Q[y]):l;Q[j].call(N,O.getEvent(R),Q[u])}catch(R){}}});g=null;if(v&&(L=v.length)){while(L){if(J=v[K=--L]){O.removeListener(J[C],J[s],J[j],K)}}}h(l,"unload",O._unload)}};z.on=z.addListener;z.un=z.removeListener;if(H&&H.body){z._load(true)}else{e(l,"load",z._load)}e(l,"unload",z._unload);F();return z}();Ext.lib.Ajax=function(){var g=["MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];function h(t){var s=t.conn,u;function r(v,w){for(u in w){if(w.hasOwnProperty(u)){v.setRequestHeader(u,w[u])}}}if(l.defaultHeaders){r(s,l.defaultHeaders)}if(l.headers){r(s,l.headers);l.headers=null}}function d(u,t,s,r){return{tId:u,status:s?-1:0,statusText:s?"transaction aborted":"communication failure",isAbort:true,isTimeout:true,argument:t}}function k(r,s){(l.headers=l.headers||{})[r]=s}function p(w,u){var r={},s,t=w.conn;try{s=w.conn.getAllResponseHeaders();Ext.each(s.split("\n"),function(x){var y=x.indexOf(":");r[x.substr(0,y)]=x.substr(y+1)})}catch(v){}return{tId:w.tId,status:t.status,statusText:t.statusText,getResponseHeader:function(x){return r[x]},getAllResponseHeaders:function(){return s},responseText:t.responseText,responseXML:t.responseXML,argument:u}}function o(r){r.conn=null;r=null}function e(w,x,s,r){if(!x){o(w);return}var u,t;try{if(w.conn.status!==undefined&&w.conn.status!=0){u=w.conn.status}else{u=13030}}catch(v){u=13030}if((u>=200&&u<300)||(Ext.isIE&&u==1223)){t=p(w,x.argument);if(x.success){if(!x.scope){x.success(t)}else{x.success.apply(x.scope,[t])}}}else{switch(u){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:t=d(w.tId,x.argument,(s?s:false),r);if(x.failure){if(!x.scope){x.failure(t)}else{x.failure.apply(x.scope,[t])}}break;default:t=p(w,x.argument);if(x.failure){if(!x.scope){x.failure(t)}else{x.failure.apply(x.scope,[t])}}}}o(w);t=null}function n(t,w){w=w||{};var r=t.conn,v=t.tId,s=l.poll,u=w.timeout||null;if(u){l.timeout[v]=setTimeout(function(){l.abort(t,w,true)},u)}s[v]=setInterval(function(){if(r&&r.readyState==4){clearInterval(s[v]);s[v]=null;if(u){clearTimeout(l.timeout[v]);l.timeout[v]=null}e(t,w)}},l.pollInterval)}function j(v,s,u,r){var t=m()||null;if(t){t.conn.open(v,s,true);if(l.useDefaultXhrHeader){k("X-Requested-With",l.defaultXhrHeader)}if(r&&l.useDefaultHeader&&(!l.headers||!l.headers["Content-Type"])){k("Content-Type",l.defaultPostHeader)}if(l.defaultHeaders||l.headers){h(t)}n(t,u);t.conn.send(r||null)}return t}function m(){var s;try{if(s=q(l.transactionId)){l.transactionId++}}catch(r){}finally{return s}}function q(u){var r;try{r=new XMLHttpRequest()}catch(t){for(var s=0;s<g.length;++s){try{r=new ActiveXObject(g[s]);break}catch(t){}}}finally{return{conn:r,tId:u}}}var l={request:function(y,w,r,x,s){if(s){var v=this,u=s.xmlData,t=s.jsonData;Ext.applyIf(v,s);if(u||t){k("Content-Type",u?"text/xml":"application/json");x=u||(Ext.isObject(t)?Ext.encode(t):t)}}return j(y||s.method||"POST",w,r,x)},serializeForm:function(s){var t=s.elements||(document.forms[s]||Ext.getDom(s)).elements,z=false,y=encodeURIComponent,w,A,r,u,v="",x;Ext.each(t,function(B){r=B.name;x=B.type;if(!B.disabled&&r){if(/select-(one|multiple)/i.test(x)){Ext.each(B.options,function(C){if(C.selected){v+=String.format("{0}={1}&",y(r),(C.hasAttribute?C.hasAttribute("value"):C.getAttribute("value")!==null)?C.value:C.text)}})}else{if(!/file|undefined|reset|button/i.test(x)){if(!(/radio|checkbox/i.test(x)&&!B.checked)&&!(x=="submit"&&z)){v+=y(r)+"="+y(B.value)+"&";z=/submit/i.test(x)}}}}});return v.substr(0,v.length-1)},useDefaultHeader:true,defaultPostHeader:"application/x-www-form-urlencoded; charset=UTF-8",useDefaultXhrHeader:true,defaultXhrHeader:"XMLHttpRequest",poll:{},timeout:{},pollInterval:50,transactionId:0,abort:function(u,w,r){var t=this,v=u.tId,s=false;if(t.isCallInProgress(u)){u.conn.abort();clearInterval(t.poll[v]);t.poll[v]=null;if(r){t.timeout[v]=null}e(u,w,(s=true),r)}return s},isCallInProgress:function(r){return r.conn&&!{0:true,4:true}[r.conn.readyState]}};return l}();(function(){var h=Ext.lib,k=/width|height|opacity|padding/i,g=/^((width|height)|(top|left))$/,d=/width|height|top$|bottom$|left$|right$/i,j=/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i,l=function(m){return typeof m!=="undefined"},e=function(){return new Date()};h.Anim={motion:function(p,n,q,r,m,o){return this.run(p,n,q,r,m,o,Ext.lib.Motion)},run:function(q,n,s,t,m,p,o){o=o||Ext.lib.AnimBase;if(typeof t=="string"){t=Ext.lib.Easing[t]}var r=new o(q,n,s,t);r.animateX(function(){if(Ext.isFunction(m)){m.call(p)}});return r}};h.AnimBase=function(n,m,o,p){if(n){this.init(n,m,o,p)}};h.AnimBase.prototype={doMethod:function(m,p,n){var o=this;return o.method(o.curFrame,p,n-p,o.totalFrames)},setAttr:function(m,o,n){if(k.test(m)&&o<0){o=0}Ext.fly(this.el,"_anim").setStyle(m,o+n)},getAttr:function(m){var o=Ext.fly(this.el),p=o.getStyle(m),n=g.exec(m)||[];if(p!=="auto"&&!j.test(p)){return parseFloat(p)}return(!!(n[2])||(o.getStyle("position")=="absolute"&&!!(n[3])))?o.dom["offset"+n[0].charAt(0).toUpperCase()+n[0].substr(1)]:0},getDefaultUnit:function(m){return d.test(m)?"px":""},animateX:function(p,m){var n=this,o=function(){n.onComplete.removeListener(o);if(Ext.isFunction(p)){p.call(m||n,n)}};n.onComplete.addListener(o,n);n.animate()},setRunAttr:function(p){var r=this,s=this.attributes[p],t=s.to,q=s.by,u=s.from,v=s.unit,n=(this.runAttrs[p]={}),o;if(!l(t)&&!l(q)){return false}var m=l(u)?u:r.getAttr(p);if(l(t)){o=t}else{if(l(q)){if(Ext.isArray(m)){o=[];Ext.each(m,function(w,x){o[x]=w+q[x]})}else{o=m+q}}}Ext.apply(n,{start:m,end:o,unit:l(v)?v:r.getDefaultUnit(p)})},init:function(n,r,q,m){var t=this,p=0,u=h.AnimMgr;Ext.apply(t,{isAnimated:false,startTime:null,el:Ext.getDom(n),attributes:r||{},duration:q||1,method:m||h.Easing.easeNone,useSec:true,curFrame:0,totalFrames:u.fps,runAttrs:{},animate:function(){var w=this,x=w.duration;if(w.isAnimated){return false}w.curFrame=0;w.totalFrames=w.useSec?Math.ceil(u.fps*x):x;u.registerElement(w)},stop:function(w){var x=this;if(w){x.curFrame=x.totalFrames;x._onTween.fire()}u.stop(x)}});var v=function(){var x=this,w;x.onStart.fire();x.runAttrs={};for(w in this.attributes){this.setRunAttr(w)}x.isAnimated=true;x.startTime=e();p=0};var s=function(){var x=this;x.onTween.fire({duration:e()-x.startTime,curFrame:x.curFrame});var y=x.runAttrs;for(var w in y){this.setAttr(w,x.doMethod(w,y[w].start,y[w].end),y[w].unit)}++p};var o=function(){var w=this,y=(e()-w.startTime)/1000,x={duration:y,frames:p,fps:p/y};w.isAnimated=false;p=0;w.onComplete.fire(x)};t.onStart=new Ext.util.Event(t);t.onTween=new Ext.util.Event(t);t.onComplete=new Ext.util.Event(t);(t._onStart=new Ext.util.Event(t)).addListener(v);(t._onTween=new Ext.util.Event(t)).addListener(s);(t._onComplete=new Ext.util.Event(t)).addListener(o)}};Ext.lib.AnimMgr=new function(){var q=this,o=null,n=[],m=0;Ext.apply(q,{fps:1000,delay:1,registerElement:function(s){n.push(s);++m;s._onStart.fire();q.start()},unRegister:function(t,s){t._onComplete.fire();s=s||r(t);if(s!=-1){n.splice(s,1)}if(--m<=0){q.stop()}},start:function(){if(o===null){o=setInterval(q.run,q.delay)}},stop:function(u){if(!u){clearInterval(o);for(var t=0,s=n.length;t<s;++t){if(n[0].isAnimated){q.unRegister(n[0],0)}}n=[];o=null;m=0}else{q.unRegister(u)}},run:function(){var s;Ext.each(n,function(t){if(t&&t.isAnimated){s=t.totalFrames;if(t.curFrame<s||s===null){++t.curFrame;if(t.useSec){p(t)}t._onTween.fire()}else{q.stop(t)}}},q)}});var r=function(t){var s=-1;Ext.each(n,function(v,u){if(v==t){s=u;return false}});return s};var p=function(t){var x=t.totalFrames,w=t.curFrame,v=t.duration,u=(w*v*1000/x),s=(e()-t.startTime),y=0;if(s<v*1000){y=Math.round((s/u-1)*w)}else{y=x-(w+1)}if(y>0&&isFinite(y)){if(t.curFrame+y>=x){y=x-(w+1)}t.curFrame+=y}}};h.Bezier=new function(){this.getPosition=function(r,q){var u=r.length,p=[],s=1-q,o,m;for(o=0;o<u;++o){p[o]=[r[o][0],r[o][1]]}for(m=1;m<u;++m){for(o=0;o<u-m;++o){p[o][0]=s*p[o][0]+q*p[parseInt(o+1,10)][0];p[o][1]=s*p[o][1]+q*p[parseInt(o+1,10)][1]}}return[p[0][0],p[0][1]]}};h.Easing={easeNone:function(n,m,p,o){return p*n/o+m},easeIn:function(n,m,p,o){return p*(n/=o)*n+m},easeOut:function(n,m,p,o){return -p*(n/=o)*(n-2)+m}};(function(){h.Motion=function(r,q,s,t){if(r){h.Motion.superclass.constructor.call(this,r,q,s,t)}};Ext.extend(h.Motion,Ext.lib.AnimBase);var p=h.Motion.superclass,o=h.Motion.prototype,n=/^points$/i;Ext.apply(h.Motion.prototype,{setAttr:function(q,u,t){var s=this,r=p.setAttr;if(n.test(q)){t=t||"px";r.call(s,"left",u[0],t);r.call(s,"top",u[1],t)}else{r.call(s,q,u,t)}},getAttr:function(q){var s=this,r=p.getAttr;return n.test(q)?[r.call(s,"left"),r.call(s,"top")]:r.call(s,q)},doMethod:function(q,t,r){var s=this;return n.test(q)?h.Bezier.getPosition(s.runAttrs[q],s.method(s.curFrame,0,100,s.totalFrames)/100):p.doMethod.call(s,q,t,r)},setRunAttr:function(x){if(n.test(x)){var z=this,s=this.el,C=this.attributes.points,v=C.control||[],A=C.from,B=C.to,y=C.by,D=h.Dom,r,u,t,w,q;if(v.length>0&&!Ext.isArray(v[0])){v=[v]}else{}Ext.fly(s,"_anim").position();D.setXY(s,l(A)?A:D.getXY(s));r=z.getAttr("points");if(l(B)){t=m.call(z,B,r);for(u=0,w=v.length;u<w;++u){v[u]=m.call(z,v[u],r)}}else{if(l(y)){t=[r[0]+y[0],r[1]+y[1]];for(u=0,w=v.length;u<w;++u){v[u]=[r[0]+v[u][0],r[1]+v[u][1]]}}}q=this.runAttrs[x]=[r];if(v.length>0){q=q.concat(v)}q[q.length]=t}else{p.setRunAttr.call(this,x)}}});var m=function(q,s){var r=h.Dom.getXY(this.el);return[q[0]-r[0]+s[0],q[1]-r[1]+s[1]]}})()})();(function(){var d=Math.abs,k=Math.PI,j=Math.asin,h=Math.pow,e=Math.sin,g=Ext.lib;Ext.apply(g.Easing,{easeBoth:function(m,l,o,n){return((m/=n/2)<1)?o/2*m*m+l:-o/2*((--m)*(m-2)-1)+l},easeInStrong:function(m,l,o,n){return o*(m/=n)*m*m*m+l},easeOutStrong:function(m,l,o,n){return -o*((m=m/n-1)*m*m*m-1)+l},easeBothStrong:function(m,l,o,n){return((m/=n/2)<1)?o/2*m*m*m*m+l:-o/2*((m-=2)*m*m*m-2)+l},elasticIn:function(n,l,u,r,m,q){if(n==0||(n/=r)==1){return n==0?l:l+u}q=q||(r*0.3);var o;if(m>=d(u)){o=q/(2*k)*j(u/m)}else{m=u;o=q/4}return -(m*h(2,10*(n-=1))*e((n*r-o)*(2*k)/q))+l},elasticOut:function(n,l,u,r,m,q){if(n==0||(n/=r)==1){return n==0?l:l+u}q=q||(r*0.3);var o;if(m>=d(u)){o=q/(2*k)*j(u/m)}else{m=u;o=q/4}return m*h(2,-10*n)*e((n*r-o)*(2*k)/q)+u+l},elasticBoth:function(n,l,u,r,m,q){if(n==0||(n/=r/2)==2){return n==0?l:l+u}q=q||(r*(0.3*1.5));var o;if(m>=d(u)){o=q/(2*k)*j(u/m)}else{m=u;o=q/4}return n<1?-0.5*(m*h(2,10*(n-=1))*e((n*r-o)*(2*k)/q))+l:m*h(2,-10*(n-=1))*e((n*r-o)*(2*k)/q)*0.5+u+l},backIn:function(m,l,p,o,n){n=n||1.70158;return p*(m/=o)*m*((n+1)*m-n)+l},backOut:function(m,l,p,o,n){if(!n){n=1.70158}return p*((m=m/o-1)*m*((n+1)*m+n)+1)+l},backBoth:function(m,l,p,o,n){n=n||1.70158;return((m/=o/2)<1)?p/2*(m*m*(((n*=(1.525))+1)*m-n))+l:p/2*((m-=2)*m*(((n*=(1.525))+1)*m+n)+2)+l},bounceIn:function(m,l,o,n){return o-g.Easing.bounceOut(n-m,0,o,n)+l},bounceOut:function(m,l,o,n){if((m/=n)<(1/2.75)){return o*(7.5625*m*m)+l}else{if(m<(2/2.75)){return o*(7.5625*(m-=(1.5/2.75))*m+0.75)+l}else{if(m<(2.5/2.75)){return o*(7.5625*(m-=(2.25/2.75))*m+0.9375)+l}}}return o*(7.5625*(m-=(2.625/2.75))*m+0.984375)+l},bounceBoth:function(m,l,o,n){return(m<n/2)?g.Easing.bounceIn(m*2,0,o,n)*0.5+l:g.Easing.bounceOut(m*2-n,0,o,n)*0.5+o*0.5+l}})})();(function(){var j=Ext.lib;j.Anim.color=function(r,p,s,t,o,q){return j.Anim.run(r,p,s,t,o,q,j.ColorAnim)};j.ColorAnim=function(p,o,q,r){j.ColorAnim.superclass.constructor.call(this,p,o,q,r)};Ext.extend(j.ColorAnim,j.AnimBase);var l=j.ColorAnim.superclass,k=/color$/i,g=/^transparent|rgba\(0, 0, 0, 0\)$/,n=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,d=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,e=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i,h=function(o){return typeof o!=="undefined"};function m(p){var r=parseInt,q,o=null,t;if(p.length==3){return p}Ext.each([d,n,e],function(u,s){q=(s%2==0)?16:10;t=u.exec(p);if(t&&t.length==4){o=[r(t[1],q),r(t[2],q),r(t[3],q)];return false}});return o}Ext.apply(j.ColorAnim.prototype,{getAttr:function(o){var q=this,p=q.el,r;if(k.test(o)){while(p&&g.test(r=Ext.fly(p).getStyle(o))){p=p.parentNode;r="fff"}}else{r=l.getAttr.call(q,o)}return r},doMethod:function(o,t,p){var r=this,s,q=Math.floor;if(k.test(o)){s=[];Ext.each(t,function(u,w){s[w]=l.doMethod.call(r,o,u,p[w])});s="rgb("+q(s[0])+","+q(s[1])+","+q(s[2])+")"}else{s=l.doMethod.call(r,o,t,p)}return s},setRunAttr:function(o){var r=this,q=r.attributes[o],v=q.to,s=q.by,t;l.setRunAttr.call(r,o);t=r.runAttrs[o];if(k.test(o)){var u=m(t.start),p=m(t.end);if(!h(v)&&h(s)){p=m(s);Ext.each(u,function(x,w){p[i]=x+p[i]})}t.start=u;t.end=p}}})})();(function(){var d=Ext.lib;d.Anim.scroll=function(l,j,m,n,h,k){return d.Anim.run(l,j,m,n,h,k,d.Scroll)};d.Scroll=function(j,h,k,l){if(j){d.Scroll.superclass.constructor.call(this,j,h,k,l)}};Ext.extend(d.Scroll,d.ColorAnim);var g=d.Scroll.superclass,e="scroll";Ext.apply(d.Scroll.prototype,{doMethod:function(h,o,j){var m,l=this,n=l.curFrame,k=l.totalFrames;if(h==e){m=[l.method(n,o[0],j[0]-o[0],k),l.method(n,o[1],j[1]-o[1],k)]}else{m=g.doMethod.call(l,h,o,j)}return m},getAttr:function(h){var j=this;if(h==e){return[j.el.scrollLeft,j.el.scrollTop]}else{return g.getAttr.call(j,h)}},setAttr:function(h,l,k){var j=this;if(h==e){j.el.scrollLeft=l[0];j.el.scrollTop=l[1]}else{g.setAttr.call(j,h,l,k)}}})})();if(Ext.isIE){function a(){var d=Function.prototype;delete d.createSequence;delete d.defer;delete d.createDelegate;delete d.createCallback;delete d.createInterceptor;window.detachEvent("onunload",a)}window.attachEvent("onunload",a)}})();(function(){var j=Ext.util,m=Ext.toArray,l=Ext.each,a=Ext.isObject,h=true,k=false;j.Observable=function(){var n=this,o=n.events;if(n.listeners){n.on(n.listeners);delete n.listeners}n.events=o||{}};j.Observable.prototype=function(){var o=/^(?:scope|delay|buffer|single)$/,n=function(p){return p.toLowerCase()};return{fireEvent:function(){var p=m(arguments),s=n(p[0]),t=this,r=h,v=t.events[s],u,w;if(t.eventsSuspended===h){if(u=t.suspendedEventsQueue){u.push(p)}}else{if(a(v)&&v.bubble){if(v.fire.apply(v,p.slice(1))===k){return k}w=t.getBubbleTarget&&t.getBubbleTarget();if(w&&w.enableBubble){w.enableBubble(s);return w.fireEvent.apply(w,p)}}else{if(a(v)){p.shift();r=v.fire.apply(v,p)}}}return r},addListener:function(r,u,w,q){var t=this,s,x,v,p;if(a(r)){q=r;for(s in q){x=q[s];if(!o.test(s)){t.addListener(s,x.fn||x,x.scope||q.scope,x.fn?x:q)}}}else{r=n(r);p=t.events[r]||h;if(typeof p=="boolean"){t.events[r]=p=new j.Event(t,r)}p.addListener(u,w,a(q)?q:{})}},removeListener:function(p,r,q){var s=this.events[n(p)];if(a(s)){s.removeListener(r,q)}},purgeListeners:function(){var r=this.events,p,q;for(q in r){p=r[q];if(a(p)){p.clearListeners()}}},addEvents:function(q){var p=this;p.events=p.events||{};if(typeof q=="string"){l(arguments,function(r){p.events[r]=p.events[r]||h})}else{Ext.applyIf(p.events,q)}},hasListener:function(p){var q=this.events[p];return a(q)&&q.listeners.length>0},suspendEvents:function(p){this.eventsSuspended=h;if(p){this.suspendedEventsQueue=[]}},resumeEvents:function(){var p=this;p.eventsSuspended=!delete p.suspendedEventQueue;l(p.suspendedEventsQueue,function(q){p.fireEvent.apply(p,q)})}}}();var e=j.Observable.prototype;e.on=e.addListener;e.un=e.removeListener;j.Observable.releaseCapture=function(n){n.fireEvent=e.fireEvent};function g(p,q,n){return function(){if(q.target==arguments[0]){p.apply(n,m(arguments))}}}function c(q,r,p){var n=new j.DelayedTask();return function(){n.delay(r.buffer,q,p,m(arguments))}}function d(p,q,o,n){return function(){q.removeListener(o,n);return p.apply(n,arguments)}}function b(p,q,n){return function(){var o=m(arguments);(function(){p.apply(n,o)}).defer(q.delay||10)}}j.Event=function(o,n){this.name=n;this.obj=o;this.listeners=[]};j.Event.prototype={addListener:function(q,p,o){var r=this,n;p=p||r.obj;if(!r.isListening(q,p)){n=r.createListener(q,p,o);if(r.firing){r.listeners=r.listeners.slice(0)}r.listeners.push(n)}},createListener:function(r,q,s){s=s||{},q=q||this.obj;var n={fn:r,scope:q,options:s},p=r;if(s.target){p=g(p,s,q)}if(s.delay){p=b(p,s,q)}if(s.single){p=d(p,this,r,q)}if(s.buffer){p=c(p,s,q)}n.fireFn=p;return n},findListener:function(q,p){var o,n=-1;l(this.listeners,function(r,s){o=r.scope;if(r.fn==q&&(o==p||o==this.obj)){n=s;return k}},this);return n},isListening:function(o,n){return this.findListener(o,n)!=-1},removeListener:function(q,p){var o,r=this,n=k;if((o=r.findListener(q,p))!=-1){if(r.firing){r.listeners=r.listeners.slice(0)}r.listeners.splice(o,1);n=h}return n},clearListeners:function(){this.listeners=[]},fire:function(){var p=this,o=m(arguments),n=h;l(p.listeners,function(q){p.firing=h;if(q.fireFn.apply(q.scope||p.obj||window,o)===k){return n=p.firing=k}});p.firing=k;return n}}})();Ext.DomHelper=function(){var t=null,k=/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i,m=/^table|tbody|tr|td$/i,q,n="afterbegin",o="afterend",c="beforebegin",p="beforeend",a="<table>",h="</table>",b=a+"<tbody>",j="</tbody>"+h,l=b+"<tr>",s="</tr>"+j;function g(x,z,y,A,w,u){var v=q.insertHtml(A,Ext.getDom(x),r(z));return y?Ext.get(v,true):v}function r(z){var w="",v,y,x,u,A;if(typeof z=="string"){w=z}else{if(Ext.isArray(z)){Ext.each(z,function(B){w+=r(B)})}else{w+="<"+(z.tag=z.tag||"div");for(v in z){y=z[v];if(!/tag|children|cn|html$/i.test(v)&&!Ext.isFunction(y)){if(Ext.isObject(y)){w+=" "+v+"='";for(x in y){u=y[x];w+=!Ext.isFunction(u)?x+":"+u+";":""}w+="'"}else{w+=" "+({cls:"class",htmlFor:"for"}[v]||v)+"='"+y+"'"}}}if(k.test(z.tag)){w+="/>"}else{w+=">";if(A=z.children||z.cn){w+=r(A)}else{if(z.html){w+=z.html}}w+="</"+z.tag+">"}}}return w}function e(z,x,w,y){t.innerHTML=[x,w,y].join("");var u=-1,v=t;while(++u<z){v=v.firstChild}return v}function d(u,v,x,w){var y,z;t=t||document.createElement("div");if(u=="td"&&(v==n||v==p)||!/td|tr|tbody/i.test(u)&&(v==c||v==o)){return}z=v==c?x:v==o?x.nextSibling:v==n?x.firstChild:null;if(v==c||v==o){x=x.parentNode}if(u=="td"||(u=="tr"&&(v==p||v==n))){y=e(4,l,w,s)}else{if((u=="tbody"&&(v==p||v==n))||(u=="tr"&&(v==c||v==o))){y=e(3,b,w,j)}else{y=e(2,a,w,h)}}x.insertBefore(y,z);return y}q={markup:function(u){return r(u)},insertHtml:function(z,u,A){var y={},w,C,B,D,x,v;z=z.toLowerCase();y[c]=["BeforeBegin","previousSibling"];y[o]=["AfterEnd","nextSibling"];if(u.insertAdjacentHTML){if(m.test(u.tagName)&&(v=d(u.tagName.toLowerCase(),z,u,A))){return v}y[n]=["AfterBegin","firstChild"];y[p]=["BeforeEnd","lastChild"];if(w=y[z]){u.insertAdjacentHTML(w[0],A);return u[w[1]]}}else{B=u.ownerDocument.createRange();C="setStart"+(/end/i.test(z)?"After":"Before");if(y[z]){B[C](u);D=B.createContextualFragment(A);u.parentNode.insertBefore(D,z==c?u:u.nextSibling);return u[(z==c?"previous":"next")+"Sibling"]}else{x=(z==n?"first":"last")+"Child";if(u.firstChild){B[C](u[x]);D=B.createContextualFragment(A);z==n?u.insertBefore(D,u.firstChild):u.appendChild(D)}else{u.innerHTML=A}return u[x]}}throw'Illegal insertion point -> "'+z+'"'},insertBefore:function(u,w,v){return g(u,w,v,c)},insertAfter:function(u,w,v){return g(u,w,v,o,"nextSibling")},insertFirst:function(u,w,v){return g(u,w,v,n,"firstChild")},append:function(u,w,v){return g(u,w,v,p,"",true)},overwrite:function(u,w,v){u=Ext.getDom(u);u.innerHTML=r(w);return v?Ext.get(u.firstChild):u.firstChild},createHtml:r};return q}();Ext.Template=function(d){var e=this,b=arguments,c=[];if(Ext.isArray(d)){d=d.join("")}else{if(b.length>1){Ext.each(b,function(a){if(Ext.isObject(a)){Ext.apply(e,a)}else{c.push(a)}});d=c.join("")}}e.html=d;if(e.compiled){e.compile()}};Ext.Template.prototype={applyTemplate:function(a){var b=this;return b.compiled?b.compiled(a):b.html.replace(b.re,function(c,d){return a[d]!==undefined?a[d]:""})},set:function(a,c){var b=this;b.html=a;b.compiled=null;return c?b.compile():b},re:/\{([\w-]+)\}/g,compile:function(){var me=this,sep=Ext.isGecko?"+":",";function fn(m,name){name="values['"+name+"']";return"'"+sep+"("+name+" == undefined ? '' : "+name+")"+sep+"'"}eval("this.compiled = function(values){ return "+(Ext.isGecko?"'":"['")+me.html.replace(/\\/g,"\\\\").replace(/(\r\n|\n)/g,"\\n").replace(/'/g,"\\'").replace(this.re,fn)+(Ext.isGecko?"';};":"'].join('');};"));return me},insertFirst:function(b,a,c){return this.doInsert("afterBegin",b,a,c)},insertBefore:function(b,a,c){return this.doInsert("beforeBegin",b,a,c)},insertAfter:function(b,a,c){return this.doInsert("afterEnd",b,a,c)},append:function(b,a,c){return this.doInsert("beforeEnd",b,a,c)},doInsert:function(c,e,b,a){e=Ext.getDom(e);var d=Ext.DomHelper.insertHtml(c,e,this.applyTemplate(b));return a?Ext.get(d,true):d},overwrite:function(b,a,c){b=Ext.getDom(b);b.innerHTML=this.applyTemplate(a);return c?Ext.get(b.firstChild,true):b.firstChild}};Ext.Template.prototype.apply=Ext.Template.prototype.applyTemplate;Ext.Template.from=function(b,a){b=Ext.getDom(b);return new Ext.Template(b.value||b.innerHTML,a||"")};Ext.DomQuery=function(){var cache={},simpleCache={},valueCache={},nonSpace=/\S/,trimRe=/^\s+|\s+$/g,tplRe=/\{(\d+)\}/g,modeRe=/^(\s?[\/>+~]\s?|\s|$)/,tagTokenRe=/^(#)?([\w-\*]+)/,nthRe=/(\d*)n\+?(\d*)/,nthRe2=/\D/,isIE=window.ActiveXObject?true:false,isOpera=Ext.isOpera,key=30803;eval("var batch = 30803;");function child(p,index){var i=0,n=p.firstChild;while(n){if(n.nodeType==1){if(++i==index){return n}}n=n.nextSibling}return null}function next(n){while((n=n.nextSibling)&&n.nodeType!=1){}return n}function prev(n){while((n=n.previousSibling)&&n.nodeType!=1){}return n}function children(d){var n=d.firstChild,ni=-1,nx;while(n){nx=n.nextSibling;if(n.nodeType==3&&!nonSpace.test(n.nodeValue)){d.removeChild(n)}else{n.nodeIndex=++ni}n=nx}return this}function byClassName(c,a,v){if(!v){return c}var r=[],ri=-1,cn;for(var i=0,ci;ci=c[i];i++){if((" "+ci.className+" ").indexOf(v)!=-1){r[++ri]=ci}}return r}function attrValue(n,attr){if(!n.tagName&&typeof n.length!="undefined"){n=n[0]}if(!n){return null}if(attr=="for"){return n.htmlFor}if(attr=="class"||attr=="className"){return n.className}return n.getAttribute(attr)||n[attr]}function getNodes(ns,mode,tagName){var result=[],ri=-1,cs;if(!ns){return result}tagName=tagName||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns]}if(!mode){for(var i=0,ni;ni=ns[i];i++){cs=ni.getElementsByTagName(tagName);for(var j=0,ci;ci=cs[j];j++){result[++ri]=ci}}}else{if(mode=="/"||mode==">"){var utag=tagName.toUpperCase();for(var i=0,ni,cn;ni=ns[i];i++){cn=isOpera?ni.childNodes:(ni.children||ni.childNodes);for(var j=0,cj;cj=cn[j];j++){if(cj.nodeName==utag||cj.nodeName==tagName||tagName=="*"){result[++ri]=cj}}}}else{if(mode=="+"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(n&&(n.nodeName==utag||n.nodeName==tagName||tagName=="*")){result[++ri]=n}}}else{if(mode=="~"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)){if(n.nodeName==utag||n.nodeName==tagName||tagName=="*"){result[++ri]=n}}}}}}}return result}function concat(a,b){if(b.slice){return a.concat(b)}for(var i=0,l=b.length;i<l;i++){a[a.length]=b[i]}return a}function byTag(cs,tagName){if(cs.tagName||cs==document){cs=[cs]}if(!tagName){return cs}var r=[],ri=-1;tagName=tagName.toLowerCase();for(var i=0,ci;ci=cs[i];i++){if(ci.nodeType==1&&ci.tagName.toLowerCase()==tagName){r[++ri]=ci}}return r}function byId(cs,attr,id){if(cs.tagName||cs==document){cs=[cs]}if(!id){return cs}var r=[],ri=-1;for(var i=0,ci;ci=cs[i];i++){if(ci&&ci.id==id){r[++ri]=ci;return r}}return r}function byAttribute(cs,attr,value,op,custom){var r=[],ri=-1,st=custom=="{",f=Ext.DomQuery.operators[op];for(var i=0,ci;ci=cs[i];i++){if(ci.nodeType!=1){continue}var a;if(st){a=Ext.DomQuery.getStyle(ci,attr)}else{if(attr=="class"||attr=="className"){a=ci.className}else{if(attr=="for"){a=ci.htmlFor}else{if(attr=="href"){a=ci.getAttribute("href",2)}else{a=ci.getAttribute(attr)}}}}if((f&&f(a,value))||(!f&&a)){r[++ri]=ci}}return r}function byPseudo(cs,name,value){return Ext.DomQuery.pseudos[name](cs,value)}function nodupIEXml(cs){var d=++key,r;cs[0].setAttribute("_nodup",d);r=[cs[0]];for(var i=1,len=cs.length;i<len;i++){var c=cs[i];if(!c.getAttribute("_nodup")!=d){c.setAttribute("_nodup",d);r[r.length]=c}}for(var i=0,len=cs.length;i<len;i++){cs[i].removeAttribute("_nodup")}return r}function nodup(cs){if(!cs){return[]}var len=cs.length,c,i,r=cs,cj,ri=-1;if(!len||typeof cs.nodeType!="undefined"||len==1){return cs}if(isIE&&typeof cs[0].selectSingleNode!="undefined"){return nodupIEXml(cs)}var d=++key;cs[0]._nodup=d;for(i=1;c=cs[i];i++){if(c._nodup!=d){c._nodup=d}else{r=[];for(var j=0;j<i;j++){r[++ri]=cs[j]}for(j=i+1;cj=cs[j];j++){if(cj._nodup!=d){cj._nodup=d;r[++ri]=cj}}return r}}return r}function quickDiffIEXml(c1,c2){var d=++key,r=[];for(var i=0,len=c1.length;i<len;i++){c1[i].setAttribute("_qdiff",d)}for(var i=0,len=c2.length;i<len;i++){if(c2[i].getAttribute("_qdiff")!=d){r[r.length]=c2[i]}}for(var i=0,len=c1.length;i<len;i++){c1[i].removeAttribute("_qdiff")}return r}function quickDiff(c1,c2){var len1=c1.length,d=++key,r=[];if(!len1){return c2}if(isIE&&c1[0].selectSingleNode){return quickDiffIEXml(c1,c2)}for(var i=0;i<len1;i++){c1[i]._qdiff=d}for(var i=0,len=c2.length;i<len;i++){if(c2[i]._qdiff!=d){r[r.length]=c2[i]}}return r}function quickId(ns,mode,root,id){if(ns==root){var d=root.ownerDocument||root;return d.getElementById(id)}ns=getNodes(ns,mode,"*");return byId(ns,null,id)}return{getStyle:function(el,name){return Ext.fly(el).getStyle(name)},compile:function(path,type){type=type||"select";var fn=["var f = function(root){\n var mode; ++batch; var n = root || document;\n"],q=path,mode,lq,tk=Ext.DomQuery.matchers,tklen=tk.length,mm,lmode=q.match(modeRe);if(lmode&&lmode[1]){fn[fn.length]='mode="'+lmode[1].replace(trimRe,"")+'";';q=q.replace(lmode[1],"")}while(path.substr(0,1)=="/"){path=path.substr(1)}while(q&&lq!=q){lq=q;var tm=q.match(tagTokenRe);if(type=="select"){if(tm){if(tm[1]=="#"){fn[fn.length]='n = quickId(n, mode, root, "'+tm[2]+'");'}else{fn[fn.length]='n = getNodes(n, mode, "'+tm[2]+'");'}q=q.replace(tm[0],"")}else{if(q.substr(0,1)!="@"){fn[fn.length]='n = getNodes(n, mode, "*");'}}}else{if(tm){if(tm[1]=="#"){fn[fn.length]='n = byId(n, null, "'+tm[2]+'");'}else{fn[fn.length]='n = byTag(n, "'+tm[2]+'");'}q=q.replace(tm[0],"")}}while(!(mm=q.match(modeRe))){var matched=false;for(var j=0;j<tklen;j++){var t=tk[j];var m=q.match(t.re);if(m){fn[fn.length]=t.select.replace(tplRe,function(x,i){return m[i]});q=q.replace(m[0],"");matched=true;break}}if(!matched){throw'Error parsing selector, parsing failed at "'+q+'"'}}if(mm[1]){fn[fn.length]='mode="'+mm[1].replace(trimRe,"")+'";';q=q.replace(mm[1],"")}}fn[fn.length]="return nodup(n);\n}";eval(fn.join(""));return f},select:function(path,root,type){if(!root||root==document){root=document}if(typeof root=="string"){root=document.getElementById(root)}var paths=path.split(","),results=[];for(var i=0,len=paths.length;i<len;i++){var p=paths[i].replace(trimRe,"");if(!cache[p]){cache[p]=Ext.DomQuery.compile(p);if(!cache[p]){throw p+" is not a valid selector"}}var result=cache[p](root);if(result&&result!=document){results=results.concat(result)}}if(paths.length>1){return nodup(results)}return results},selectNode:function(path,root){return Ext.DomQuery.select(path,root)[0]},selectValue:function(path,root,defaultValue){path=path.replace(trimRe,"");if(!valueCache[path]){valueCache[path]=Ext.DomQuery.compile(path,"select")}var n=valueCache[path](root),v;n=n[0]?n[0]:n;v=(n&&n.firstChild?n.firstChild.nodeValue:null);return((v===null||v===undefined||v==="")?defaultValue:v)},selectNumber:function(path,root,defaultValue){var v=Ext.DomQuery.selectValue(path,root,defaultValue||0);return parseFloat(v)},is:function(el,ss){if(typeof el=="string"){el=document.getElementById(el)}var isArray=Ext.isArray(el),result=Ext.DomQuery.filter(isArray?el:[el],ss);return isArray?(result.length==el.length):(result.length>0)},filter:function(els,ss,nonMatches){ss=ss.replace(trimRe,"");if(!simpleCache[ss]){simpleCache[ss]=Ext.DomQuery.compile(ss,"simple")}var result=simpleCache[ss](els);return nonMatches?quickDiff(result,els):result},matchers:[{re:/^\.([\w-]+)/,select:'n = byClassName(n, null, " {1} ");'},{re:/^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:'n = byPseudo(n, "{1}", "{2}");'},{re:/^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,select:'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'},{re:/^#([\w-]+)/,select:'n = byId(n, null, "{1}");'},{re:/^@([\w-]+)/,select:'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'}],operators:{"=":function(a,v){return a==v},"!=":function(a,v){return a!=v},"^=":function(a,v){return a&&a.substr(0,v.length)==v},"$=":function(a,v){return a&&a.substr(a.length-v.length)==v},"*=":function(a,v){return a&&a.indexOf(v)!==-1},"%=":function(a,v){return(a%v)==0},"|=":function(a,v){return a&&(a==v||a.substr(0,v.length+1)==v+"-")},"~=":function(a,v){return a&&(" "+a+" ").indexOf(" "+v+" ")!=-1}},pseudos:{"first-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.previousSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"last-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"nth-child":function(c,a){var r=[],ri=-1,m=nthRe.exec(a=="even"&&"2n"||a=="odd"&&"2n+1"||!nthRe2.test(a)&&"n+"+a||a),f=(m[1]||1)-0,l=m[2]-0;for(var i=0,n;n=c[i];i++){var pn=n.parentNode;if(batch!=pn._batch){var j=0;for(var cn=pn.firstChild;cn;cn=cn.nextSibling){if(cn.nodeType==1){cn.nodeIndex=++j}}pn._batch=batch}if(f==1){if(l==0||n.nodeIndex==l){r[++ri]=n}}else{if((n.nodeIndex+l)%f==0){r[++ri]=n}}}return r},"only-child":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(!prev(ci)&&!next(ci)){r[++ri]=ci}}return r},empty:function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var cns=ci.childNodes,j=0,cn,empty=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){empty=false;break}}if(empty){r[++ri]=ci}}return r},contains:function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if((ci.textContent||ci.innerText||"").indexOf(v)!=-1){r[++ri]=ci}}return r},nodeValue:function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[++ri]=ci}}return r},checked:function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.checked==true){r[++ri]=ci}}return r},not:function(c,ss){return Ext.DomQuery.filter(c,ss,true)},any:function(c,selectors){var ss=selectors.split("|"),r=[],ri=-1,s;for(var i=0,ci;ci=c[i];i++){for(var j=0;s=ss[j];j++){if(Ext.DomQuery.is(ci,s)){r[++ri]=ci;break}}}return r},odd:function(c){return this["nth-child"](c,"odd")},even:function(c){return this["nth-child"](c,"even")},nth:function(c,a){return c[a-1]||[]},first:function(c){return c[0]||[]},last:function(c){return c[c.length-1]||[]},has:function(c,ss){var s=Ext.DomQuery.select,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(s(ss,ci).length>0){r[++ri]=ci}}return r},next:function(c,ss){var is=Ext.DomQuery.is,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=next(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r},prev:function(c,ss){var is=Ext.DomQuery.is,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=prev(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r}}}}();Ext.query=Ext.DomQuery.select;Ext.EventManager=function(){var u,n,k=false,m=Ext.lib.Event,o=Ext.lib.Dom,b=document,v=window,g="ie-deferred-loader",p="DOMContentLoaded",e={},h=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;function l(B,x,A,z,y){var D=Ext.id(B),C=e[D]=e[D]||{};(C[x]=C[x]||[]).push([A,z,y]);m.on(B,x,z);if(x=="mousewheel"&&B.addEventListener){var w=["DOMMouseScroll",z,false];B.addEventListener.apply(B,w);m.on(window,"unload",function(){B.removeEventListener.apply(B,w)})}if(x=="mousedown"&&B==document){Ext.EventManager.stoppedMouseDownEvent.addListener(z)}}function c(){if(!k){Ext.isReady=k=true;if(n){clearInterval(n)}if(Ext.isGecko||Ext.isOpera){b.removeEventListener(p,c,false)}if(Ext.isIE){var w=b.getElementById(g);if(w){w.onreadystatechange=null;w.parentNode.removeChild(w)}}if(u){u.fire();u.clearListeners()}}}function a(){var w="complete";u=new Ext.util.Event();if(Ext.isGecko||Ext.isOpera){b.addEventListener(p,c,false)}else{if(Ext.isIE){b.write("<script id="+g+' defer="defer" src="//:"><\/script>');b.getElementById(g).onreadystatechange=function(){if(this.readyState==w){c()}}}else{if(Ext.isWebKit){n=setInterval(function(){if(b.readyState==w){c()}},10)}}}m.on(v,"load",c)}function s(w,x){return function(){var y=Ext.toArray(arguments);if(x.target==Ext.EventObject.setEvent(y[0]).target){w.apply(this,y)}}}function t(x,y){var w=new Ext.util.DelayedTask(x);return function(z){w.delay(y.buffer,x,null,[new Ext.EventObjectImpl(z)])}}function q(A,z,w,y,x){return function(B){Ext.EventManager.removeListener(z,w,y,x);A(B)}}function d(w,x){return function(y){y=new Ext.EventObjectImpl(y);setTimeout(function(){w(y)},x.delay||10)}}function j(y,x,w,C,B){var D=!Ext.isObject(w)?{}:w,A=Ext.getDom(y);C=C||D.fn;B=B||D.scope;if(!A){throw'Error listening for "'+x+'". Element "'+y+"\" doesn't exist."}function z(F){if(!Ext){return}F=Ext.EventObject.setEvent(F);var E;if(D.delegate){if(!(E=F.getTarget(D.delegate,A))){return}}else{E=F.target}if(D.stopEvent){F.stopEvent()}if(D.preventDefault){F.preventDefault()}if(D.stopPropagation){F.stopPropagation()}if(D.normalized){F=F.browserEvent}C.call(B||A,F,E,D)}if(D.target){z=s(z,D)}if(D.delay){z=d(z,D)}if(D.single){z=q(z,A,x,C,B)}if(D.buffer){z=t(z,D)}l(A,x,C,z,B);return z}var r={addListener:function(y,w,A,z,x){if(Ext.isObject(w)){var D=w,B,C;for(B in D){C=D[B];if(!h.test(B)){if(Ext.isFunction(C)){j(y,B,D,C,D.scope)}else{j(y,B,C)}}}}else{j(y,w,x,A,z)}},removeListener:function(x,w,B,A){var z=Ext.getDom(x),C=Ext.id(z),y;Ext.each((e[C]||{})[w],function(E,F,D){if(Ext.isArray(E)&&E[0]==B&&(!A||E[2]==A)){m.un(z,w,y=E[1]);D.splice(F,1);return false}});if(w=="mousewheel"&&z.addEventListener&&y){z.removeEventListener("DOMMouseScroll",y,false)}if(w=="mousedown"&&z==b&&y){Ext.EventManager.stoppedMouseDownEvent.removeListener(y)}},removeAll:function(x){var z=Ext.id(x=Ext.getDom(x)),y=e[z],w;for(w in y){if(y.hasOwnProperty(w)){Ext.each(y[w],function(A){m.un(x,w,A.wrap)})}}e[z]=null},onDocumentReady:function(y,x,w){if(k){u.addListener(y,x,w);u.fire();u.clearListeners()}else{if(!u){a()}w=w||{};w.delay=w.delay||1;u.addListener(y,x,w)}},elHash:e};r.on=r.addListener;r.un=r.removeListener;r.stoppedMouseDownEvent=new Ext.util.Event();return r}();Ext.onReady=Ext.EventManager.onDocumentReady;(function(){var a=function(){var c=document.body||document.getElementsByTagName("body")[0];if(!c){return false}var b=[" ",Ext.isIE?"ext-ie "+(Ext.isIE6?"ext-ie6":(Ext.isIE7?"ext-ie7":"ext-ie8")):Ext.isGecko?"ext-gecko "+(Ext.isGecko2?"ext-gecko2":"ext-gecko3"):Ext.isOpera?"ext-opera":Ext.isWebKit?"ext-webkit":""];if(Ext.isSafari){b.push("ext-safari "+(Ext.isSafari2?"ext-safari2":(Ext.isSafari3?"ext-safari3":"ext-safari4")))}else{if(Ext.isChrome){b.push("ext-chrome")}}if(Ext.isMac){b.push("ext-mac")}if(Ext.isLinux){b.push("ext-linux")}if(Ext.isBorderBox){b.push("ext-border-box")}if(Ext.isStrict){var d=c.parentNode;if(d){d.className+=" ext-strict"}}c.className+=b.join(" ");return true};if(!a()){Ext.onReady(a)}})();Ext.EventObject=function(){var b=Ext.lib.Event,a={3:13,63234:37,63235:39,63232:38,63233:40,63276:33,63277:34,63272:46,63273:36,63275:35},c=Ext.isIE?{1:0,4:1,2:2}:(Ext.isWebKit?{1:0,2:1,3:2}:{0:0,1:1,2:2});Ext.EventObjectImpl=function(d){if(d){this.setEvent(d.browserEvent||d)}};Ext.EventObjectImpl.prototype={setEvent:function(g){var d=this;if(g==d||(g&&g.browserEvent)){return g}d.browserEvent=g;if(g){d.button=g.button?c[g.button]:(g.which?g.which-1:-1);if(g.type=="click"&&d.button==-1){d.button=0}d.type=g.type;d.shiftKey=g.shiftKey;d.ctrlKey=g.ctrlKey||g.metaKey||false;d.altKey=g.altKey;d.keyCode=g.keyCode;d.charCode=g.charCode;d.target=b.getTarget(g);d.xy=b.getXY(g)}else{d.button=-1;d.shiftKey=false;d.ctrlKey=false;d.altKey=false;d.keyCode=0;d.charCode=0;d.target=null;d.xy=[0,0]}return d},stopEvent:function(){var d=this;if(d.browserEvent){if(d.browserEvent.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(d)}b.stopEvent(d.browserEvent)}},preventDefault:function(){if(this.browserEvent){b.preventDefault(this.browserEvent)}},stopPropagation:function(){var d=this;if(d.browserEvent){if(d.browserEvent.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(d)}b.stopPropagation(d.browserEvent)}},getCharCode:function(){return this.charCode||this.keyCode},getKey:function(){return this.normalizeKey(this.keyCode||this.charCode)},normalizeKey:function(d){return Ext.isSafari?(a[d]||d):d},getPageX:function(){return this.xy[0]},getPageY:function(){return this.xy[1]},getXY:function(){return this.xy},getTarget:function(e,g,d){return e?Ext.fly(this.target).findParent(e,g,d):(d?Ext.get(this.target):this.target)},getRelatedTarget:function(){return this.browserEvent?b.getRelatedTarget(this.browserEvent):null},getWheelDelta:function(){var d=this.browserEvent;var g=0;if(d.wheelDelta){g=d.wheelDelta/120}else{if(d.detail){g=-d.detail/3}}return g},within:function(g,h,d){if(g){var e=this[h?"getRelatedTarget":"getTarget"]();return e&&((d?(e==Ext.getDom(g)):false)||Ext.fly(g).contains(e))}return false}};return new Ext.EventObjectImpl()}();(function(){var j=document;Ext.Element=function(o,p){var q=typeof o=="string"?j.getElementById(o):o,r;if(!q){return null}r=q.id;if(!p&&r&&Ext.Element.cache[r]){return Ext.Element.cache[r]}this.dom=q;this.id=r||Ext.id(q)};var a=Ext.lib.Dom,e=Ext.DomHelper,m=Ext.lib.Event,d=Ext.lib.Anim,g=Ext.Element;g.prototype={set:function(t,q){var r=this.dom,p,s;for(p in t){s=t[p];if(p!="style"&&!Ext.isFunction(s)){if(p=="cls"){r.className=s}else{if(t.hasOwnProperty(p)){if(q||!!r.setAttribute){r.setAttribute(p,s)}else{r[p]=s}}}}}if(t.style){Ext.DomHelper.applyStyles(r,t.style)}return this},defaultUnit:"px",is:function(o){return Ext.DomQuery.is(this.dom,o)},focus:function(r,q){var o=this,q=q||o.dom;try{if(Number(r)){o.focus.defer(r,null,[null,q])}else{q.focus()}}catch(p){}return o},blur:function(){try{this.dom.blur()}catch(o){}return this},getValue:function(o){var p=this.dom.value;return o?parseInt(p,10):p},addListener:function(o,r,q,p){Ext.EventManager.on(this.dom,o,r,q||this,p);return this},removeListener:function(o,q,p){Ext.EventManager.removeListener(this.dom,o,q,p||this);return this},removeAllListeners:function(){Ext.EventManager.removeAll(this.dom);return this},addUnits:function(o){if(o===""||o=="auto"||o===undefined){o=o||""}else{if(!isNaN(o)||!k.test(o)){o=o+(this.defaultUnit||"px")}}return o},load:function(p,q,o){Ext.Ajax.request(Ext.apply({params:q,url:p.url||p,callback:o,el:this.dom,indicatorText:p.indicatorText||""},Ext.isObject(p)?p:{}));return this},isBorderBox:function(){return h[(this.dom.tagName||"").toLowerCase()]||Ext.isBorderBox},remove:function(){var o=this,p=o.dom;o.removeAllListeners();delete g.cache[p.id];delete g.dataCache[p.id];Ext.removeNode(p)},hover:function(p,o,r,q){var s=this;s.on("mouseenter",p,r||s.dom,q);s.on("mouseleave",o,r||s.dom,q);return s},contains:function(o){return !o?false:Ext.lib.Dom.isAncestor(this.dom,o.dom?o.dom:o)},getAttributeNS:function(p,o){return this.getAttribute(o,p)},getAttribute:Ext.isIE?function(o,q){var r=this.dom,p=typeof r[q+":"+o];if(["undefined","unknown"].indexOf(p)==-1){return r[q+":"+o]}return r[o]}:function(o,p){var q=this.dom;return q.getAttributeNS(p,o)||q.getAttribute(p+":"+o)||q.getAttribute(o)||q[o]},update:function(o){this.dom.innerHTML=o}};var n=g.prototype;g.addMethods=function(p){Ext.apply(n,p)};n.on=n.addListener;n.un=n.removeListener;n.autoBoxAdjust=true;var k=/\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i,c;g.cache={};g.dataCache={};g.get=function(p){var o,s,r;if(!p){return null}if(typeof p=="string"){if(!(s=j.getElementById(p))){return null}if(o=g.cache[p]){o.dom=s}else{o=g.cache[p]=new g(s)}return o}else{if(p.tagName){if(!(r=p.id)){r=Ext.id(p)}if(o=g.cache[r]){o.dom=p}else{o=g.cache[r]=new g(p)}return o}else{if(p instanceof g){if(p!=c){p.dom=j.getElementById(p.id)||p.dom;g.cache[p.id]=p}return p}else{if(p.isComposite){return p}else{if(Ext.isArray(p)){return g.select(p)}else{if(p==j){if(!c){var q=function(){};q.prototype=g.prototype;c=new q();c.dom=j}return c}}}}}}return null};g.data=function(p,o,q){var r=g.dataCache[p.id];if(!r){r=g.dataCache[p.id]={}}if(arguments.length==2){return r[o]}else{r[o]=q}};function l(){if(!Ext.enableGarbageCollector){clearInterval(g.collectorThread)}else{var o,p,q;for(o in g.cache){p=g.cache[o];q=p.dom;if(!q||!q.parentNode||(!q.offsetParent&&!j.getElementById(o))){delete g.cache[o];if(q&&Ext.enableListenerCollection){Ext.EventManager.removeAll(q)}}}}}g.collectorThreadId=setInterval(l,30000);var b=function(){};b.prototype=g.prototype;g.Flyweight=function(o){this.dom=o};g.Flyweight.prototype=new b();g.Flyweight.prototype.isFlyweight=true;g._flyweights={};g.fly=function(q,o){var p=null;o=o||"_global";if(q=Ext.getDom(q)){(g._flyweights[o]=g._flyweights[o]||new g.Flyweight()).dom=q;p=g._flyweights[o]}return p};Ext.get=g.get;Ext.fly=g.fly;var h=Ext.isStrict?{select:1}:{input:1,select:1,textarea:1};if(Ext.isIE||Ext.isGecko){h.button=1}Ext.EventManager.on(window,"unload",function(){delete g.cache;delete g.dataCache;delete g._flyweights})})();Ext.Element.addMethods(function(){var d="parentNode",b="nextSibling",c="previousSibling",e=Ext.DomQuery,a=Ext.get;return{findParent:function(n,m,h){var k=this.dom,g=document.body,l=0,j;if(Ext.isGecko&&Object.prototype.toString.call(k)=="[object XULElement]"){return null}m=m||50;if(isNaN(m)){j=Ext.getDom(m);m=10}while(k&&k.nodeType==1&&l<m&&k!=g&&k!=j){if(e.is(k,n)){return h?a(k):k}l++;k=k.parentNode}return null},findParentNode:function(k,j,g){var h=Ext.fly(this.dom.parentNode,"_internal");return h?h.findParent(k,j,g):null},up:function(h,g){return this.findParentNode(h,g,true)},select:function(g,h){return Ext.Element.select(g,h,this.dom)},query:function(g,h){return e.select(g,this.dom)},child:function(g,h){var j=e.selectNode(g,this.dom);return h?j:a(j)},down:function(g,h){var j=e.selectNode(" > "+g,this.dom);return h?j:a(j)},parent:function(g,h){return this.matchNode(d,d,g,h)},next:function(g,h){return this.matchNode(b,b,g,h)},prev:function(g,h){return this.matchNode(c,c,g,h)},first:function(g,h){return this.matchNode(b,"firstChild",g,h)},last:function(g,h){return this.matchNode(c,"lastChild",g,h)},matchNode:function(h,l,g,j){var k=this.dom[l];while(k){if(k.nodeType==1&&(!g||e.is(k,g))){return !j?a(k):k}k=k[h]}return null}}}());Ext.Element.addMethods(function(){var d=Ext.getDom,a=Ext.get,c=Ext.DomHelper,b=function(e){return(e.nodeType||e.dom||typeof e=="string")};return{appendChild:function(e){return a(e).appendTo(this)},appendTo:function(e){d(e).appendChild(this.dom);return this},insertBefore:function(e){(e=d(e)).parentNode.insertBefore(this.dom,e);return this},insertAfter:function(e){(e=d(e)).parentNode.insertBefore(this.dom,e.nextSibling);return this},insertFirst:function(g,e){g=g||{};if(b(g)){g=d(g);this.dom.insertBefore(g,this.dom.firstChild);return !e?a(g):g}else{return this.createChild(g,this.dom.firstChild,e)}},replace:function(e){e=a(e);this.insertBefore(e);e.remove();return this},replaceWith:function(g){var h=this,e=Ext.Element;if(b(g)){g=d(g);h.dom.parentNode.insertBefore(g,h.dom)}else{g=c.insertBefore(h.dom,g)}delete e.cache[h.id];Ext.removeNode(h.dom);h.id=Ext.id(h.dom=g);return e.cache[h.id]=h},createChild:function(g,e,h){g=g||{tag:"div"};return e?c.insertBefore(e,g,h!==true):c[!this.dom.firstChild?"overwrite":"append"](this.dom,g,h!==true)},wrap:function(e,g){var h=c.insertBefore(this.dom,e||{tag:"div"},!g);h.dom?h.dom.appendChild(this.dom):h.appendChild(this.dom);return h},insertHtml:function(g,h,e){var j=c.insertHtml(g,this.dom,h);return e?Ext.get(j):j}}}());Ext.Element.addMethods(function(){var g={},u=/(-[a-z])/gi,b={},p=document.defaultView,r=Ext.isIE?"styleFloat":"cssFloat",x=/alpha\(opacity=(.*)\)/i,k=/^\s+|\s+$/g,w=Ext.Element,d="padding",c="margin",v="border",q="-left",o="-right",t="-top",l="-bottom",h="-width",j={l:v+q+h,r:v+o+h,t:v+t+h,b:v+l+h},e={l:d+q,r:d+o,t:d+t,b:d+l},a={l:c+q,r:c+o,t:c+t,b:c+l},y=Ext.Element.data;function n(z,A){return A.charAt(1).toUpperCase()}function m(A,z){var B=0;Ext.each(A.match(/\w/g),function(C){if(C=parseInt(this.getStyle(z[C]),10)){B+=Math.abs(C)}},this);return B}function s(z){return g[z]||(g[z]=z=="float"?r:z.replace(u,n))}return{adjustWidth:function(z){var A=this;if(typeof z=="number"&&A.autoBoxAdjust&&!A.isBorderBox()){z-=(A.getBorderWidth("lr")+A.getPadding("lr"));z=z<0?0:z}return z},adjustHeight:function(z){var A=this;if(typeof z=="number"&&A.autoBoxAdjust&&!A.isBorderBox()){z-=(A.getBorderWidth("tb")+A.getPadding("tb"));z=z<0?0:z}return z},addClass:function(z){var A=this;Ext.each(z,function(B){A.dom.className+=(!A.hasClass(B)&&B?" "+B:"")});return A},radioClass:function(z){Ext.each(this.dom.parentNode.childNodes,function(A){if(A.nodeType==1){Ext.fly(A).removeClass(z)}});return this.addClass(z)},removeClass:function(z){var A=this;if(A.dom.className){Ext.each(z,function(B){A.dom.className=A.dom.className.replace(b[B]=b[B]||new RegExp("(?:^|\\s+)"+B+"(?:\\s+|$)","g")," ")})}return A},toggleClass:function(z){return this.hasClass(z)?this.removeClass(z):this.addClass(z)},hasClass:function(z){return z&&(" "+this.dom.className+" ").indexOf(" "+z+" ")!=-1},replaceClass:function(A,z){return this.removeClass(A).addClass(z)},isStyle:function(z,A){return this.getStyle(z)==A},getStyle:function(){return p&&p.getComputedStyle?function(C){var B=this.dom,z,A;if(B==document){return null}C=s(C);return(z=B.style[C])?z:(A=p.getComputedStyle(B,""))?A[C]:null}:function(D){var B=this.dom,z,A;if(B==document){return null}if(D=="opacity"){if(B.style.filter.match){if(z=B.style.filter.match(x)){var C=parseFloat(z[1]);if(!isNaN(C)){return C?C/100:0}}}return 1}D=s(D);return B.style[D]||((A=B.currentStyle)?A[D]:null)}}(),getColor:function(z,A,E){var D,C=this.getStyle(z),B=E||"#";if(!C||C=="transparent"||C=="inherit"){return A}if(/^r/.test(C)){Ext.each(C.slice(4,C.length-1).split(","),function(F){D=(F*1).toString(16);B+=D<16?"0"+D:D})}else{B+=C.replace("#","").replace(/^(\w)(\w)(\w)$/,"$1$1$2$2$3$3")}return B.length>5?B.toLowerCase():A},setStyle:function(D,C){var A,B,z;if(!Ext.isObject(D)){A={};A[D]=C;D=A}for(B in D){C=D[B];B=="opacity"?this.setOpacity(C):this.dom.style[s(B)]=C}return this},setOpacity:function(A,z){var D=this,B=D.dom.style;if(!z||!D.anim){if(Ext.isIE){var C=A<1?"alpha(opacity="+A*100+")":"",E=B.filter.replace(x,"").replace(k,"");B.zoom=1;B.filter=E+(E.length>0?" ":"")+C}else{B.opacity=A}}else{D.anim({opacity:{to:A}},D.preanim(arguments,1),null,0.35,"easeIn")}return D},clearOpacity:function(){var z=this.dom.style;if(Ext.isIE){if(!Ext.isEmpty(z.filter)){z.filter=z.filter.replace(x,"").replace(k,"")}}else{z.opacity=z["-moz-opacity"]=z["-khtml-opacity"]=""}return this},getHeight:function(A){var z=this.dom.offsetHeight||0;z=!A?z:z-this.getBorderWidth("tb")-this.getPadding("tb");return z<0?0:z},getWidth:function(A){var z=this.dom.offsetWidth||0;z=!A?z:z-this.getBorderWidth("lr")-this.getPadding("lr");return z<0?0:z},setWidth:function(A,z){var B=this;A=B.adjustWidth(A);!z||!B.anim?B.dom.style.width=B.addUnits(A):B.anim({width:{to:A}},B.preanim(arguments,1));return B},setHeight:function(z,A){var B=this;z=B.adjustHeight(z);!A||!B.anim?B.dom.style.height=B.addUnits(z):B.anim({height:{to:z}},B.preanim(arguments,1));return B},getBorderWidth:function(z){return m.call(this,z,j)},getPadding:function(z){return m.call(this,z,e)},clip:function(){var z=this;dom=z.dom;if(!y(dom,"isClipped")){y(dom,"isClipped",true);y(dom,"originalClip,",{o:z.getStyle("overflow"),x:z.getStyle("overflow-x"),y:z.getStyle("overflow-y")});z.setStyle("overflow","hidden");z.setStyle("overflow-x","hidden");z.setStyle("overflow-y","hidden")}return z},unclip:function(){var z=this,B=z.dom;if(y(B,"isClipped")){y(B,"isClipped",false);var A=y(B,"originalClip");if(A.o){z.setStyle("overflow",A.o)}if(A.x){z.setStyle("overflow-x",A.x)}if(A.y){z.setStyle("overflow-y",A.y)}}return z},addStyles:m,margins:a}}());(function(){var a=Ext.lib.Dom,b="left",g="right",d="top",j="bottom",h="position",c="static",e="relative",k="auto",l="z-index";function m(o,n,p){return this.preanim&&!!n?this.preanim(o,p):false}Ext.Element.addMethods({getX:function(){return a.getX(this.dom)},getY:function(){return a.getY(this.dom)},getXY:function(){return a.getXY(this.dom)},getOffsetsTo:function(n){var q=this.getXY(),p=Ext.fly(n,"_internal").getXY();return[q[0]-p[0],q[1]-p[1]]},setX:function(n,o){return this.setXY([n,this.getY()],m.call(this,arguments,o,1))},setY:function(o,n){return this.setXY([this.getX(),o],m.call(this,arguments,n,1))},setLeft:function(n){this.setStyle(b,this.addUnits(n));return this},setTop:function(n){this.setStyle(d,this.addUnits(n));return this},setRight:function(n){this.setStyle(g,this.addUnits(n));return this},setBottom:function(n){this.setStyle(j,this.addUnits(n));return this},setXY:function(p,n){var o=this;if(!n||!o.anim){a.setXY(o.dom,p)}else{o.anim({points:{to:p}},o.preanim(arguments,1),"motion")}return o},setLocation:function(n,p,o){return this.setXY([n,p],m.call(this,arguments,o,2))},moveTo:function(n,p,o){return this.setXY([n,p],m.call(this,arguments,o,2))},getLeft:function(n){return !n?this.getX():parseInt(this.getStyle(b),10)||0},getRight:function(n){var o=this;return !n?o.getX()+o.getWidth():(o.getLeft(true)+o.getWidth())||0},getTop:function(n){return !n?this.getY():parseInt(this.getStyle(d),10)||0},getBottom:function(n){var o=this;return !n?o.getY()+o.getHeight():(o.getTop(true)+o.getHeight())||0},position:function(r,q,n,p){var o=this;if(!r&&o.isStyle(h,c)){o.setStyle(h,e)}else{if(r){o.setStyle(h,r)}}if(q){o.setStyle(l,q)}if(n||p){o.setXY([n||false,p||false])}},clearPositioning:function(n){n=n||"";this.setStyle({left:n,right:n,top:n,bottom:n,"z-index":"",position:c});return this},getPositioning:function(){var n=this.getStyle(b);var o=this.getStyle(d);return{position:this.getStyle(h),left:n,right:n?"":this.getStyle(g),top:o,bottom:o?"":this.getStyle(j),"z-index":this.getStyle(l)}},setPositioning:function(n){var p=this,o=p.dom.style;p.setStyle(n);if(n.right==k){o.right=""}if(n.bottom==k){o.bottom=""}return p},translatePoints:function(n,v){v=isNaN(n[1])?v:n[1];n=isNaN(n[0])?n:n[0];var r=this,s=r.isStyle(h,e),u=r.getXY(),p=parseInt(r.getStyle(b),10),q=parseInt(r.getStyle(d),10);p=!isNaN(p)?p:(s?0:r.dom.offsetLeft);q=!isNaN(q)?q:(s?0:r.dom.offsetTop);return{left:(n-u[0]+p),top:(v-u[1]+q)}},animTest:m})})();Ext.Element.addMethods({isScrollable:function(){var a=this.dom;return a.scrollHeight>a.clientHeight||a.scrollWidth>a.clientWidth},scrollTo:function(a,b){this.dom["scroll"+(/top/i.test(a)?"Top":"Left")]=b;return this},getScroll:function(){var j=this.dom,h=document,a=h.body,c=h.documentElement,b,g,e;if(j==h||j==a){if(Ext.isIE&&Ext.isStrict){b=c.scrollLeft;g=c.scrollTop}else{b=window.pageXOffset;g=window.pageYOffset}e={left:b||(a?a.scrollLeft:0),top:g||(a?a.scrollTop:0)}}else{e={left:j.scrollLeft,top:j.scrollTop}}return e}});Ext.Element.VISIBILITY=1;Ext.Element.DISPLAY=2;Ext.Element.addMethods(function(){var h="visibility",d="display",b="hidden",k="none",a="originalDisplay",c="visibilityMode",e=Ext.Element.DISPLAY,g=Ext.Element.data,j=function(n){var m=g(n,a);if(m===undefined){g(n,a,m="")}return m},l=function(o){var n=g(o,c);if(n===undefined){g(o,c,n=1)}return n};return{originalDisplay:"",visibilityMode:1,setVisibilityMode:function(m){g(this.dom,c,m);return this},animate:function(n,p,o,q,m){this.anim(n,{duration:p,callback:o,easing:q},m);return this},anim:function(p,q,n,s,o,m){n=n||"run";q=q||{};var r=this,t=Ext.lib.Anim[n](r.dom,p,(q.duration||s)||0.35,(q.easing||o)||"easeOut",function(){if(m){m.call(r)}if(q.callback){q.callback.call(q.scope||r,r,q)}},r);q.anim=t;return t},preanim:function(m,n){return !m[n]?false:(Ext.isObject(m[n])?m[n]:{duration:m[n+1],callback:m[n+2],easing:m[n+3]})},isVisible:function(){return !this.isStyle(h,b)&&!this.isStyle(d,k)},setVisible:function(q,n){var o=this,p=o.dom,m=l(this.dom)==e;if(!n||!o.anim){if(m){o.setDisplayed(q)}else{o.fixDisplay();p.style.visibility=q?"visible":b}}else{if(q){o.setOpacity(0.01);o.setVisible(true)}o.anim({opacity:{to:(q?1:0)}},o.preanim(arguments,1),null,0.35,"easeIn",function(){if(!q){p.style[m?d:h]=(m)?k:b;Ext.fly(p).setOpacity(1)}})}return o},toggle:function(m){var n=this;n.setVisible(!n.isVisible(),n.preanim(arguments,0));return n},setDisplayed:function(m){if(typeof m=="boolean"){m=m?j(this.dom):k}this.setStyle(d,m);return this},fixDisplay:function(){var m=this;if(m.isStyle(d,k)){m.setStyle(h,b);m.setStyle(d,j(this.dom));if(m.isStyle(d,k)){m.setStyle(d,"block")}}},hide:function(m){this.setVisible(false,this.preanim(arguments,0));return this},show:function(m){this.setVisible(true,this.preanim(arguments,0));return this}}}());(function(){var z=null,B=undefined,l=true,u=false,k="setX",h="setY",a="setXY",o="left",m="bottom",t="top",n="right",r="height",g="width",j="points",x="hidden",A="absolute",v="visible",e="motion",p="position",s="easeOut",d=new Ext.Element.Flyweight(),w={},y=function(C){return C||{}},q=function(C){d.dom=C;d.id=Ext.id(C);return d},c=function(C){if(!w[C]){w[C]=[]}return w[C]},b=function(D,C){w[D]=C};Ext.enableFx=l;Ext.Fx={switchStatements:function(D,E,C){return E.apply(this,C[D])},slideIn:function(I,F){F=y(F);var K=this,H=K.dom,N=H.style,P,C,M,E,D,N,J,O,L,G;I=I||"t";K.queueFx(F,function(){P=q(H).getXY();q(H).fixDisplay();C=q(H).getFxRestore();M={x:P[0],y:P[1],0:P[0],1:P[1],width:H.offsetWidth,height:H.offsetHeight};M.right=M.x+M.width;M.bottom=M.y+M.height;q(H).setWidth(M.width).setHeight(M.height);E=q(H).fxWrap(C.pos,F,x);N.visibility=v;N.position=A;function Q(){q(H).fxUnwrap(E,C.pos,F);N.width=C.width;N.height=C.height;q(H).afterFx(F)}O={to:[M.x,M.y]};L={to:M.width};G={to:M.height};function R(V,S,W,T,Y,aa,ad,ac,ab,X,U){var Z={};q(V).setWidth(W).setHeight(T);if(q(V)[Y]){q(V)[Y](aa)}S[ad]=S[ac]="0";if(ab){Z.width=ab}if(X){Z.height=X}if(U){Z.points=U}return Z}J=q(H).switchStatements(I.toLowerCase(),R,{t:[E,N,M.width,0,z,z,o,m,z,G,z],l:[E,N,0,M.height,z,z,n,t,L,z,z],r:[E,N,M.width,M.height,k,M.right,o,t,z,z,O],b:[E,N,M.width,M.height,h,M.bottom,o,t,z,G,O],tl:[E,N,0,0,z,z,n,m,L,G,O],bl:[E,N,0,0,h,M.y+M.height,n,t,L,G,O],br:[E,N,0,0,a,[M.right,M.bottom],o,t,L,G,O],tr:[E,N,0,0,k,M.x+M.width,o,m,L,G,O]});N.visibility=v;q(E).show();arguments.callee.anim=q(E).fxanim(J,F,e,0.5,s,Q)});return K},slideOut:function(G,E){E=y(E);var I=this,F=I.dom,L=F.style,M=I.getXY(),D,C,J,K,H={to:0};G=G||"t";I.queueFx(E,function(){C=q(F).getFxRestore();J={x:M[0],y:M[1],0:M[0],1:M[1],width:F.offsetWidth,height:F.offsetHeight};J.right=J.x+J.width;J.bottom=J.y+J.height;q(F).setWidth(J.width).setHeight(J.height);D=q(F).fxWrap(C.pos,E,v);L.visibility=v;L.position=A;q(D).setWidth(J.width).setHeight(J.height);function N(){E.useDisplay?q(F).setDisplayed(u):q(F).hide();q(F).fxUnwrap(D,C.pos,E);L.width=C.width;L.height=C.height;q(F).afterFx(E)}function O(P,X,V,Y,T,W,S,U,R){var Q={};P[X]=P[V]="0";Q[Y]=T;if(W){Q[W]=S}if(U){Q[U]=R}return Q}K=q(F).switchStatements(G.toLowerCase(),O,{t:[L,o,m,r,H],l:[L,n,t,g,H],r:[L,o,t,g,H,j,{to:[J.right,J.y]}],b:[L,o,t,r,H,j,{to:[J.x,J.bottom]}],tl:[L,n,m,g,H,r,H],bl:[L,n,t,g,H,r,H,j,{to:[J.x,J.bottom]}],br:[L,o,t,g,H,r,H,j,{to:[J.x+J.width,J.bottom]}],tr:[L,o,m,g,H,r,H,j,{to:[J.right,J.y]}]});arguments.callee.anim=q(D).fxanim(K,E,e,0.5,s,N)});return I},puff:function(I){I=y(I);var G=this,H=G.dom,D=H.style,E,C,F;G.queueFx(I,function(){E=q(H).getWidth();C=q(H).getHeight();q(H).clearOpacity();q(H).show();F=q(H).getFxRestore();function J(){I.useDisplay?q(H).setDisplayed(u):q(H).hide();q(H).clearOpacity();q(H).setPositioning(F.pos);D.width=F.width;D.height=F.height;D.fontSize="";q(H).afterFx(I)}arguments.callee.anim=q(H).fxanim({width:{to:q(H).adjustWidth(E*2)},height:{to:q(H).adjustHeight(C*2)},points:{by:[-E*0.5,-C*0.5]},opacity:{to:0},fontSize:{to:200,unit:"%"}},I,e,0.5,s,J)});return G},switchOff:function(G){G=y(G);var E=this,F=E.dom,C=F.style,D;E.queueFx(G,function(){q(F).clearOpacity();q(F).clip();D=q(F).getFxRestore();function H(){G.useDisplay?q(F).setDisplayed(u):q(F).hide();q(F).clearOpacity();q(F).setPositioning(D.pos);C.width=D.width;C.height=D.height;q(F).afterFx(G)}q(F).fxanim({opacity:{to:0.3}},z,z,0.1,z,function(){q(F).clearOpacity();(function(){q(F).fxanim({height:{to:1},points:{by:[0,q(F).getHeight()*0.5]}},G,e,0.3,"easeIn",H)}).defer(100)})});return E},highlight:function(E,I){I=y(I);var G=this,H=G.dom,C=I.attr||"backgroundColor",D={},F;G.queueFx(I,function(){q(H).clearOpacity();q(H).show();function J(){H.style[C]=F;q(H).afterFx(I)}F=H.style[C];D[C]={from:E||"ffff9c",to:I.endColor||q(H).getColor(C)||"ffffff"};arguments.callee.anim=q(H).fxanim(D,I,"color",1,"easeIn",J)});return G},frame:function(C,F,I){I=y(I);var E=this,H=E.dom,D,G;E.queueFx(I,function(){C=C||"#C3DAF9";if(C.length==6){C="#"+C}F=F||1;q(H).show();var M=q(H).getXY(),K={x:M[0],y:M[1],0:M[0],1:M[1],width:H.offsetWidth,height:H.offsetHeight},J=function(){D=q(document.body||document.documentElement).createChild({style:{visbility:x,position:A,"z-index":35000,border:"0px solid "+C}});return D.queueFx({},L)};arguments.callee.anim={isAnimated:true,stop:function(){F=0;D.stopFx()}};function L(){var N=Ext.isBorderBox?2:1;G=D.anim({top:{from:K.y,to:K.y-20},left:{from:K.x,to:K.x-20},borderWidth:{from:0,to:10},opacity:{from:1,to:0},height:{from:K.height,to:K.height+20*N},width:{from:K.width,to:K.width+20*N}},{duration:I.duration||1,callback:function(){D.remove();--F>0?J():q(H).afterFx(I)}});arguments.callee.anim={isAnimated:true,stop:function(){G.stop()}}}J()});return E},pause:function(E){var D=this.dom,C;this.queueFx({},function(){C=setTimeout(function(){q(D).afterFx({})},E*1000);arguments.callee.anim={isAnimated:true,stop:function(){clearTimeout(C);q(D).afterFx({})}}});return this},fadeIn:function(E){E=y(E);var C=this,D=C.dom,F=E.endOpacity||1;C.queueFx(E,function(){q(D).setOpacity(0);q(D).fixDisplay();D.style.visibility=v;arguments.callee.anim=q(D).fxanim({opacity:{to:F}},E,z,0.5,s,function(){if(F==1){q(D).clearOpacity()}q(D).afterFx(E)})});return C},fadeOut:function(F){F=y(F);var D=this,E=D.dom,C=E.style,G=F.endOpacity||0;D.queueFx(F,function(){arguments.callee.anim=q(E).fxanim({opacity:{to:G}},F,z,0.5,s,function(){if(G==0){Ext.Element.data(E,"visibilityMode")==Ext.Element.DISPLAY||F.useDisplay?C.display="none":C.visibility=x;q(E).clearOpacity()}q(E).afterFx(F)})});return D},scale:function(C,D,E){this.shift(Ext.apply({},E,{width:C,height:D}));return this},shift:function(E){E=y(E);var D=this.dom,C={};this.queueFx(E,function(){for(var F in E){if(E[F]!=B){C[F]={to:E[F]}}}C.width?C.width.to=q(D).adjustWidth(E.width):C;C.height?C.height.to=q(D).adjustWidth(E.height):C;if(C.x||C.y||C.xy){C.points=C.xy||{to:[C.x?C.x.to:q(D).getX(),C.y?C.y.to:q(D).getY()]}}arguments.callee.anim=q(D).fxanim(C,E,e,0.35,s,function(){q(D).afterFx(E)})});return this},ghost:function(F,D){D=y(D);var H=this,E=H.dom,K=E.style,I={opacity:{to:0},points:{}},L=I.points,C,J,G;F=F||"b";H.queueFx(D,function(){C=q(E).getFxRestore();J=q(E).getWidth();G=q(E).getHeight();function M(){D.useDisplay?q(E).setDisplayed(u):q(E).hide();q(E).clearOpacity();q(E).setPositioning(C.pos);K.width=C.width;K.height=C.height;q(E).afterFx(D)}L.by=q(E).switchStatements(F.toLowerCase(),function(O,N){return[O,N]},{t:[0,-G],l:[-J,0],r:[J,0],b:[0,G],tl:[-J,-G],bl:[-J,G],br:[J,G],tr:[J,-G]});arguments.callee.anim=q(E).fxanim(I,D,e,0.5,s,M)});return H},syncFx:function(){var C=this;C.fxDefaults=Ext.apply(C.fxDefaults||{},{block:u,concurrent:l,stopFx:u});return C},sequenceFx:function(){var C=this;C.fxDefaults=Ext.apply(C.fxDefaults||{},{block:u,concurrent:u,stopFx:u});return C},nextFx:function(){var C=c(this.dom.id)[0];if(C){C.call(this)}},hasActiveFx:function(){return c(this.dom.id)[0]},stopFx:function(C){var D=this,F=D.dom.id;if(D.hasActiveFx()){var E=c(F)[0];if(E&&E.anim){if(E.anim.isAnimated){b(F,[E]);E.anim.stop(C!==undefined?C:l)}else{b(F,[])}}}return D},beforeFx:function(C){if(this.hasActiveFx()&&!C.concurrent){if(C.stopFx){this.stopFx();return l}return u}return l},hasFxBlock:function(){var C=c(this.dom.id);return C&&C[0]&&C[0].block},queueFx:function(F,C){var D=this;if(!D.hasFxBlock()){Ext.applyIf(F,D.fxDefaults);if(!F.concurrent){var E=D.beforeFx(F);C.block=F.block;c(D.dom.id).push(C);if(E){D.nextFx()}}else{C.call(D)}}return D},fxWrap:function(I,G,E){var F=this.dom,D,C;if(!G.wrap||!(D=Ext.getDom(G.wrap))){if(G.fixPosition){C=q(F).getXY()}var H=document.createElement("div");H.style.visibility=E;D=F.parentNode.insertBefore(H,F);q(D).setPositioning(I);if(q(D).isStyle(p,"static")){q(D).position("relative")}q(F).clearPositioning("auto");q(D).clip();D.appendChild(F);if(C){q(D).setXY(C)}}return D},fxUnwrap:function(C,F,E){var D=this.dom;q(D).clearPositioning();q(D).setPositioning(F);if(!E.wrap){C.parentNode.insertBefore(D,C);q(C).remove()}},getFxRestore:function(){var C=this.dom.style;return{pos:this.getPositioning(),width:C.width,height:C.height}},afterFx:function(D){var C=this.dom,E=C.id;if(D.afterStyle){q(C).setStyle(D.afterStyle)}if(D.afterCls){q(C).addClass(D.afterCls)}if(D.remove==l){q(C).remove()}if(D.callback){D.callback.call(D.scope,q(C))}if(!D.concurrent){c(E).shift();q(C).nextFx()}},fxanim:function(F,G,D,H,E,C){D=D||"run";G=G||{};var I=Ext.lib.Anim[D](this.dom,F,(G.duration||H)||0.35,(G.easing||E)||s,C,this);G.anim=I;return I}};Ext.Fx.resize=Ext.Fx.scale;Ext.Element.addMethods(Ext.Fx)})();Ext.CompositeElementLite=function(b,a){this.elements=[];this.add(b,a);this.el=new Ext.Element.Flyweight()};Ext.CompositeElementLite.prototype={isComposite:true,getCount:function(){return this.elements.length},add:function(b){if(b){if(Ext.isArray(b)){this.elements=this.elements.concat(b)}else{var a=this.elements;Ext.each(b,function(c){a.push(c)})}}return this},invoke:function(d,a){var b=this.elements,c=this.el;Ext.each(b,function(g){c.dom=g;Ext.Element.prototype[d].apply(c,a)});return this},item:function(a){var b=this;if(!b.elements[a]){return null}b.el.dom=b.elements[a];return b.el},addListener:function(a,d,c,b){Ext.each(this.elements,function(g){Ext.EventManager.on(g,a,d,c||g,b)});return this},each:function(c,b){var d=this,a=d.el;Ext.each(d.elements,function(h,g){a.dom=h;return c.call(b||a,a,d,g)});return d},indexOf:function(a){return this.elements.indexOf(Ext.getDom(a))},replaceElement:function(e,c,a){var b=!isNaN(e)?e:this.indexOf(e),g;if(b>-1){c=Ext.getDom(c);if(a){g=this.elements[b];g.parentNode.insertBefore(c,g);Ext.removeNode(g)}this.elements.splice(b,1,c)}return this},clear:function(){this.elements=[]}};Ext.CompositeElementLite.prototype.on=Ext.CompositeElementLite.prototype.addListener;(function(){var c,b=Ext.Element.prototype,a=Ext.CompositeElementLite.prototype;for(var c in b){if(Ext.isFunction(b[c])){(function(d){a[d]=a[d]||function(){return this.invoke(d,arguments)}}).call(a,c)}}})();if(Ext.DomQuery){Ext.Element.selectorFunction=Ext.DomQuery.select}Ext.Element.select=function(a,d,b){var c;if(typeof a=="string"){c=Ext.Element.selectorFunction(a,b)}else{if(a.length!==undefined){c=a}else{throw"Invalid selector"}}return new Ext.CompositeElementLite(c)};Ext.select=Ext.Element.select;(function(){var c="beforerequest",m="requestcomplete",l="requestexception",e=undefined,j="load",h="POST",k="GET",g=window;Ext.data.Connection=function(n){Ext.apply(this,n);this.addEvents(c,m,l);Ext.data.Connection.superclass.constructor.call(this)};function b(n){this.transId=false;var o=n.argument.options;n.argument=o?o.argument:null;this.fireEvent(m,this,n,o);if(o.success){o.success.call(o.scope,n,o)}if(o.callback){o.callback.call(o.scope,o,true,n)}}function d(n,p){this.transId=false;var o=n.argument.options;n.argument=o?o.argument:null;this.fireEvent(l,this,n,o,p);if(o.failure){o.failure.call(o.scope,n,o)}if(o.callback){o.callback.call(o.scope,o,false,n)}}function a(s,n,p){var q=Ext.id(),y=document,t=y.createElement("iframe"),r=Ext.getDom(s.form),x=[],w;t.id=t.name=q;t.className="x-hidden";t.src=Ext.SSL_SECURE_URL;y.body.appendChild(t);if(Ext.isIE){y.frames[q].name=q}r.target=q;r.method=h;r.enctype=r.encoding="multipart/form-data";r.action=p||"";n=Ext.urlDecode(n,false);for(var v in n){if(n.hasOwnProperty(v)){w=y.createElement("input");w.type="hidden";w.value=n[w.name=v];r.appendChild(w);x.push(w)}}function u(){var z=this,o={responseText:"",responseXML:null,argument:s.argument},C,B;try{C=t.contentWindow.document||t.contentDocument||g.frames[q].document;if(C){if(C.body){if(/textarea/i.test((B=C.body.firstChild||{}).tagName)){o.responseText=B.value}else{o.responseText=C.body.innerHTML}}else{o.responseXML=C.XMLDocument||C}}}catch(A){}Ext.EventManager.removeListener(t,j,u,z);z.fireEvent(m,z,o,s);Ext.callback(s.success,s.scope,[o,s]);Ext.callback(s.callback,s.scope,[s,true,o]);if(!z.debugUploads){setTimeout(function(){Ext.removeNode(t)},100)}}Ext.EventManager.on(t,j,u,this);r.submit();Ext.each(x,function(o){Ext.removeNode(o)})}Ext.extend(Ext.data.Connection,Ext.util.Observable,{timeout:30000,autoAbort:false,disableCaching:true,disableCachingParam:"_dc",request:function(t){var w=this;if(w.fireEvent(c,w,t)){if(t.el){if(!Ext.isEmpty(t.indicatorText)){w.indicatorText='<div class="loading-indicator">'+t.indicatorText+"</div>"}if(w.indicatorText){Ext.getDom(t.el).innerHTML=w.indicatorText}t.success=(Ext.isFunction(t.success)?t.success:function(){}).createInterceptor(function(o){Ext.getDom(t.el).innerHTML=o.responseText})}var r=t.params,q=t.url||w.url,n,u={success:b,failure:d,scope:w,argument:{options:t},timeout:t.timeout||w.timeout},s,x;if(Ext.isFunction(r)){r=r.call(t.scope||g,t)}r=Ext.urlEncode(w.extraParams,typeof r=="object"?Ext.urlEncode(r):r);if(Ext.isFunction(q)){q=q.call(t.scope||g,t)}if(s=Ext.getDom(t.form)){q=q||s.action;if(t.isUpload||/multipart\/form-data/i.test(s.getAttribute("enctype"))){return a.call(w,t,r,q)}x=Ext.lib.Ajax.serializeForm(s);r=r?(r+"&"+x):x}n=t.method||w.method||((r||t.xmlData||t.jsonData)?h:k);if(n===k&&(w.disableCaching&&t.disableCaching!==false)||t.disableCaching===true){var v=t.disableCachingParam||w.disableCachingParam;q+=(q.indexOf("?")!=-1?"&":"?")+v+"="+(new Date().getTime())}t.headers=Ext.apply(t.headers||{},w.defaultHeaders||{});if(t.autoAbort===true||w.autoAbort){w.abort()}if((n==k||t.xmlData||t.jsonData)&&r){q+=(/\?/.test(q)?"&":"?")+r;r=""}return w.transId=Ext.lib.Ajax.request(n,q,u,r,t)}else{return t.callback?t.callback.apply(t.scope,[t,e,e]):null}},isLoading:function(n){return n?Ext.lib.Ajax.isCallInProgress(n):!!this.transId},abort:function(n){if(n||this.isLoading()){Ext.lib.Ajax.abort(n||this.transId)}}})})();Ext.Ajax=new Ext.data.Connection({autoAbort:false,serializeForm:function(a){return Ext.lib.Ajax.serializeForm(a)}});Ext.util.DelayedTask=function(d,c,a){var e=this,g,b=function(){clearInterval(g);g=null;d.apply(c,a||[])};e.delay=function(j,l,k,h){e.cancel();d=l||d;c=k||c;a=h||a;g=setInterval(b,j)};e.cancel=function(){if(g){clearInterval(g);g=null}}};Ext.util.JSON=new (function(){var useHasOwn=!!{}.hasOwnProperty,isNative=Ext.USE_NATIVE_JSON&&JSON&&JSON.toString()=="[object JSON]";var pad=function(n){return n<10?"0"+n:n};var m={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};var encodeString=function(s){if(/["\\\x00-\x1f]/.test(s)){return'"'+s.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c}c=b.charCodeAt();return"\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16)})+'"'}return'"'+s+'"'};var encodeArray=function(o){var a=["["],b,i,l=o.length,v;for(i=0;i<l;i+=1){v=o[i];switch(typeof v){case"undefined":case"function":case"unknown":break;default:if(b){a.push(",")}a.push(v===null?"null":Ext.util.JSON.encode(v));b=true}}a.push("]");return a.join("")};this.encodeDate=function(o){return'"'+o.getFullYear()+"-"+pad(o.getMonth()+1)+"-"+pad(o.getDate())+"T"+pad(o.getHours())+":"+pad(o.getMinutes())+":"+pad(o.getSeconds())+'"'};this.encode=isNative?JSON.stringify:function(o){if(typeof o=="undefined"||o===null){return"null"}else{if(Ext.isArray(o)){return encodeArray(o)}else{if(Object.prototype.toString.apply(o)==="[object Date]"){return Ext.util.JSON.encodeDate(o)}else{if(typeof o=="string"){return encodeString(o)}else{if(typeof o=="number"){return isFinite(o)?String(o):"null"}else{if(typeof o=="boolean"){return String(o)}else{var a=["{"],b,i,v;for(i in o){if(!useHasOwn||o.hasOwnProperty(i)){v=o[i];switch(typeof v){case"undefined":case"function":case"unknown":break;default:if(b){a.push(",")}a.push(this.encode(i),":",v===null?"null":this.encode(v));b=true}}}a.push("}");return a.join("")}}}}}}};this.decode=isNative?JSON.parse:function(json){return eval("("+json+")")}})();Ext.encode=Ext.util.JSON.encode;Ext.decode=Ext.util.JSON.decode; \ No newline at end of file diff --git a/tests/javascript/frameworks/ext/ext-core-3.1.0.js b/tests/javascript/frameworks/ext/ext-core-3.1.0.js index 9fc67279e33f062ddd7040c2045f5bb23a0cf6e7..66af9d80e58b292f7976974b9cbe1f0c69aa0c7e 100644 --- a/tests/javascript/frameworks/ext/ext-core-3.1.0.js +++ b/tests/javascript/frameworks/ext/ext-core-3.1.0.js @@ -2,7 +2,7 @@ * Ext Core Library 3.0 * http://extjs.com/ * Copyright(c) 2006-2009, Ext JS, LLC. - * + * * MIT Licensed - http://extjs.com/license/mit.txt */ window.undefined=window.undefined;Ext={version:"3.1.0"};Ext.apply=function(d,e,b){if(b){Ext.apply(d,b)}if(d&&e&&typeof e=="object"){for(var a in e){d[a]=e[a]}}return d};(function(){var h=0,t=Object.prototype.toString,u=navigator.userAgent.toLowerCase(),z=function(e){return e.test(u)},j=document,m=j.compatMode=="CSS1Compat",B=z(/opera/),i=z(/chrome/),v=z(/webkit/),y=!i&&z(/safari/),g=y&&z(/applewebkit\/4/),b=y&&z(/version\/3/),C=y&&z(/version\/4/),s=!B&&z(/msie/),q=s&&z(/msie 7/),p=s&&z(/msie 8/),r=s&&!q&&!p,o=!v&&z(/gecko/),d=o&&z(/rv:1\.8/),a=o&&z(/rv:1\.9/),w=s&&!m,A=z(/windows|win32/),l=z(/macintosh|mac os x/),k=z(/adobeair/),n=z(/linux/),c=/^https/i.test(window.location.protocol);if(r){try{j.execCommand("BackgroundImageCache",false,true)}catch(x){}}Ext.apply(Ext,{SSL_SECURE_URL:c&&s?'javascript:""':"about:blank",isStrict:m,isSecure:c,isReady:false,enableGarbageCollector:true,enableListenerCollection:false,enableNestedListenerRemoval:false,USE_NATIVE_JSON:false,applyIf:function(D,E){if(D){for(var e in E){if(!Ext.isDefined(D[e])){D[e]=E[e]}}}return D},id:function(e,D){return(e=Ext.getDom(e)||{}).id=e.id||(D||"ext-gen")+(++h)},extend:function(){var D=function(F){for(var E in F){this[E]=F[E]}};var e=Object.prototype.constructor;return function(K,H,J){if(Ext.isObject(H)){J=H;H=K;K=J.constructor!=e?J.constructor:function(){H.apply(this,arguments)}}var G=function(){},I,E=H.prototype;G.prototype=E;I=K.prototype=new G();I.constructor=K;K.superclass=E;if(E.constructor==e){E.constructor=H}K.override=function(F){Ext.override(K,F)};I.superclass=I.supr=(function(){return E});I.override=D;Ext.override(K,J);K.extend=function(F){return Ext.extend(K,F)};return K}}(),override:function(e,E){if(E){var D=e.prototype;Ext.apply(D,E);if(Ext.isIE&&E.hasOwnProperty("toString")){D.toString=E.toString}}},namespace:function(){var D,e;Ext.each(arguments,function(E){e=E.split(".");D=window[e[0]]=window[e[0]]||{};Ext.each(e.slice(1),function(F){D=D[F]=D[F]||{}})});return D},urlEncode:function(H,G){var E,D=[],F=encodeURIComponent;Ext.iterate(H,function(e,I){E=Ext.isEmpty(I);Ext.each(E?e:I,function(J){D.push("&",F(e),"=",(!Ext.isEmpty(J)&&(J!=e||!E))?(Ext.isDate(J)?Ext.encode(J).replace(/"/g,""):F(J)):"")})});if(!G){D.shift();G=""}return G+D.join("")},urlDecode:function(E,D){if(Ext.isEmpty(E)){return{}}var H={},G=E.split("&"),I=decodeURIComponent,e,F;Ext.each(G,function(J){J=J.split("=");e=I(J[0]);F=I(J[1]);H[e]=D||!H[e]?F:[].concat(H[e]).concat(F)});return H},urlAppend:function(e,D){if(!Ext.isEmpty(D)){return e+(e.indexOf("?")===-1?"?":"&")+D}return e},toArray:function(){return s?function(E,H,F,G){G=[];for(var D=0,e=E.length;D<e;D++){G.push(E[D])}return G.slice(H||0,F||G.length)}:function(e,E,D){return Array.prototype.slice.call(e,E||0,D||e.length)}}(),isIterable:function(e){if(Ext.isArray(e)||e.callee){return true}if(/NodeList|HTMLCollection/.test(t.call(e))){return true}return((typeof e.nextNode!="undefined"||e.item)&&Ext.isNumber(e.length))},each:function(G,F,E){if(Ext.isEmpty(G,true)){return}if(!Ext.isIterable(G)||Ext.isPrimitive(G)){G=[G]}for(var D=0,e=G.length;D<e;D++){if(F.call(E||G[D],G[D],D,G)===false){return D}}},iterate:function(E,D,e){if(Ext.isEmpty(E)){return}if(Ext.isIterable(E)){Ext.each(E,D,e);return}else{if(Ext.isObject(E)){for(var F in E){if(E.hasOwnProperty(F)){if(D.call(e||E,F,E[F],E)===false){return}}}}}},getDom:function(e){if(!e||!j){return null}return e.dom?e.dom:(Ext.isString(e)?j.getElementById(e):e)},getBody:function(){return Ext.get(j.body||j.documentElement)},removeNode:s&&!p?function(){var e;return function(D){if(D&&D.tagName!="BODY"){(Ext.enableNestedListenerRemoval)?Ext.EventManager.purgeElement(D,true):Ext.EventManager.removeAll(D);e=e||j.createElement("div");e.appendChild(D);e.innerHTML="";delete Ext.elCache[D.id]}}}():function(e){if(e&&e.parentNode&&e.tagName!="BODY"){(Ext.enableNestedListenerRemoval)?Ext.EventManager.purgeElement(e,true):Ext.EventManager.removeAll(e);e.parentNode.removeChild(e);delete Ext.elCache[e.id]}},isEmpty:function(D,e){return D===null||D===undefined||((Ext.isArray(D)&&!D.length))||(!e?D==="":false)},isArray:function(e){return t.apply(e)==="[object Array]"},isDate:function(e){return t.apply(e)==="[object Date]"},isObject:function(e){return !!e&&Object.prototype.toString.call(e)==="[object Object]"},isPrimitive:function(e){return Ext.isString(e)||Ext.isNumber(e)||Ext.isBoolean(e)},isFunction:function(e){return t.apply(e)==="[object Function]"},isNumber:function(e){return typeof e==="number"&&isFinite(e)},isString:function(e){return typeof e==="string"},isBoolean:function(e){return typeof e==="boolean"},isElement:function(e){return !!e&&e.tagName},isDefined:function(e){return typeof e!=="undefined"},isOpera:B,isWebKit:v,isChrome:i,isSafari:y,isSafari3:b,isSafari4:C,isSafari2:g,isIE:s,isIE6:r,isIE7:q,isIE8:p,isGecko:o,isGecko2:d,isGecko3:a,isBorderBox:w,isLinux:n,isWindows:A,isMac:l,isAir:k});Ext.ns=Ext.namespace})();Ext.ns("Ext.util","Ext.lib","Ext.data");Ext.elCache={};Ext.apply(Function.prototype,{createInterceptor:function(b,a){var c=this;return !Ext.isFunction(b)?this:function(){var e=this,d=arguments;b.target=e;b.method=c;return(b.apply(a||e||window,d)!==false)?c.apply(e||window,d):null}},createCallback:function(){var a=arguments,b=this;return function(){return b.apply(window,a)}},createDelegate:function(c,b,a){var d=this;return function(){var g=b||arguments;if(a===true){g=Array.prototype.slice.call(arguments,0);g=g.concat(b)}else{if(Ext.isNumber(a)){g=Array.prototype.slice.call(arguments,0);var e=[a,0].concat(b);Array.prototype.splice.apply(g,e)}}return d.apply(c||window,g)}},defer:function(c,e,b,a){var d=this.createDelegate(e,b,a);if(c>0){return setTimeout(d,c)}d();return 0}});Ext.applyIf(String,{format:function(b){var a=Ext.toArray(arguments,1);return b.replace(/\{(\d+)\}/g,function(c,d){return a[d]})}});Ext.applyIf(Array.prototype,{indexOf:function(b,c){var a=this.length;c=c||0;c+=(c<0)?a:0;for(;c<a;++c){if(this[c]===b){return c}}return -1},remove:function(b){var a=this.indexOf(b);if(a!=-1){this.splice(a,1)}return this}});Ext.util.TaskRunner=function(e){e=e||10;var g=[],a=[],b=0,h=false,d=function(){h=false;clearInterval(b);b=0},i=function(){if(!h){h=true;b=setInterval(j,e)}},c=function(k){a.push(k);if(k.onStop){k.onStop.apply(k.scope||k)}},j=function(){var m=a.length,o=new Date().getTime();if(m>0){for(var q=0;q<m;q++){g.remove(a[q])}a=[];if(g.length<1){d();return}}for(var q=0,p,l,n,k=g.length;q<k;++q){p=g[q];l=o-p.taskRunTime;if(p.interval<=l){n=p.run.apply(p.scope||p,p.args||[++p.taskRunCount]);p.taskRunTime=o;if(n===false||p.taskRunCount===p.repeat){c(p);return}}if(p.duration&&p.duration<=(o-p.taskStartTime)){c(p)}}};this.start=function(k){g.push(k);k.taskStartTime=new Date().getTime();k.taskRunTime=0;k.taskRunCount=0;i();return k};this.stop=function(k){c(k);return k};this.stopAll=function(){d();for(var l=0,k=g.length;l<k;l++){if(g[l].onStop){g[l].onStop()}}g=[];a=[]}};Ext.TaskMgr=new Ext.util.TaskRunner();Ext.util.DelayedTask=function(d,c,a){var e=this,g,b=function(){clearInterval(g);g=null;d.apply(c,a||[])};e.delay=function(i,k,j,h){e.cancel();d=k||d;c=j||c;a=h||a;g=setInterval(b,i)};e.cancel=function(){if(g){clearInterval(g);g=null}}};(function(){var b;function c(d){if(!b){b=new Ext.Element.Flyweight()}b.dom=d;return b}(function(){var h=document,e=h.compatMode=="CSS1Compat",g=Math.max,d=Math.round,i=parseInt;Ext.lib.Dom={isAncestor:function(k,l){var j=false;k=Ext.getDom(k);l=Ext.getDom(l);if(k&&l){if(k.contains){return k.contains(l)}else{if(k.compareDocumentPosition){return !!(k.compareDocumentPosition(l)&16)}else{while(l=l.parentNode){j=l==k||j}}}}return j},getViewWidth:function(j){return j?this.getDocumentWidth():this.getViewportWidth()},getViewHeight:function(j){return j?this.getDocumentHeight():this.getViewportHeight()},getDocumentHeight:function(){return g(!e?h.body.scrollHeight:h.documentElement.scrollHeight,this.getViewportHeight())},getDocumentWidth:function(){return g(!e?h.body.scrollWidth:h.documentElement.scrollWidth,this.getViewportWidth())},getViewportHeight:function(){return Ext.isIE?(Ext.isStrict?h.documentElement.clientHeight:h.body.clientHeight):self.innerHeight},getViewportWidth:function(){return !Ext.isStrict&&!Ext.isOpera?h.body.clientWidth:Ext.isIE?h.documentElement.clientWidth:self.innerWidth},getY:function(j){return this.getXY(j)[1]},getX:function(j){return this.getXY(j)[0]},getXY:function(l){var k,r,t,w,m,n,v=0,s=0,u,j,o=(h.body||h.documentElement),q=[0,0];l=Ext.getDom(l);if(l!=o){if(l.getBoundingClientRect){t=l.getBoundingClientRect();u=c(document).getScroll();q=[d(t.left+u.left),d(t.top+u.top)]}else{k=l;j=c(l).isStyle("position","absolute");while(k){r=c(k);v+=k.offsetLeft;s+=k.offsetTop;j=j||r.isStyle("position","absolute");if(Ext.isGecko){s+=w=i(r.getStyle("borderTopWidth"),10)||0;v+=m=i(r.getStyle("borderLeftWidth"),10)||0;if(k!=l&&!r.isStyle("overflow","visible")){v+=m;s+=w}}k=k.offsetParent}if(Ext.isSafari&&j){v-=o.offsetLeft;s-=o.offsetTop}if(Ext.isGecko&&!j){n=c(o);v+=i(n.getStyle("borderLeftWidth"),10)||0;s+=i(n.getStyle("borderTopWidth"),10)||0}k=l.parentNode;while(k&&k!=o){if(!Ext.isOpera||(k.tagName!="TR"&&!c(k).isStyle("display","inline"))){v-=k.scrollLeft;s-=k.scrollTop}k=k.parentNode}q=[v,s]}}return q},setXY:function(k,l){(k=Ext.fly(k,"_setXY")).position();var m=k.translatePoints(l),j=k.dom.style,n;for(n in m){if(!isNaN(m[n])){j[n]=m[n]+"px"}}},setX:function(k,j){this.setXY(k,[j,false])},setY:function(j,k){this.setXY(j,[false,k])}}})();Ext.lib.Event=function(){var x=false,h={},B=0,q=[],d,D=false,l=window,H=document,m=200,t=20,C=0,s=0,j=1,n=2,u=2,y=3,v="scrollLeft",r="scrollTop",g="unload",A="mouseover",G="mouseout",e=function(){var I;if(l.addEventListener){I=function(M,K,L,J){if(K=="mouseenter"){L=L.createInterceptor(p);M.addEventListener(A,L,(J))}else{if(K=="mouseleave"){L=L.createInterceptor(p);M.addEventListener(G,L,(J))}else{M.addEventListener(K,L,(J))}}return L}}else{if(l.attachEvent){I=function(M,K,L,J){M.attachEvent("on"+K,L);return L}}else{I=function(){}}}return I}(),i=function(){var I;if(l.removeEventListener){I=function(M,K,L,J){if(K=="mouseenter"){K=A}else{if(K=="mouseleave"){K=G}}M.removeEventListener(K,L,(J))}}else{if(l.detachEvent){I=function(L,J,K){L.detachEvent("on"+J,K)}}else{I=function(){}}}return I}();function p(I){return !w(I.currentTarget,z.getRelatedTarget(I))}function w(I,J){if(I&&I.firstChild){while(J){if(J===I){return true}J=J.parentNode;if(J&&(J.nodeType!=1)){J=null}}}return false}function E(){var K=false,O=[],M,L,I,J,N=!x||(B>0);if(!D){D=true;for(L=0,I=q.length;L<I;L++){J=q[L];if(J&&(M=H.getElementById(J.id))){if(!J.checkReady||x||M.nextSibling||(H&&H.body)){M=J.override?(J.override===true?J.obj:J.override):M;J.fn.call(M,J.obj);q.remove(J)}else{O.push(J)}}}B=(O.length===0)?0:B-1;if(N){o()}else{clearInterval(d);d=null}K=!(D=false)}return K}function o(){if(!d){var I=function(){E()};d=setInterval(I,t)}}function F(){var I=H.documentElement,J=H.body;if(I&&(I[r]||I[v])){return[I[v],I[r]]}else{if(J){return[J[v],J[r]]}else{return[0,0]}}}function k(I,J){I=I.browserEvent||I;var K=I["page"+J];if(!K&&K!==0){K=I["client"+J]||0;if(Ext.isIE){K+=F()[J=="X"?0:1]}}return K}var z={extAdapter:true,onAvailable:function(K,I,L,J){q.push({id:K,fn:I,obj:L,override:J,checkReady:false});B=m;o()},addListener:function(K,I,J){K=Ext.getDom(K);if(K&&J){if(I==g){if(h[K.id]===undefined){h[K.id]=[]}h[K.id].push([I,J]);return J}return e(K,I,J,false)}return false},removeListener:function(O,K,N){O=Ext.getDom(O);var M,J,I,L;if(O&&N){if(K==g){if((L=h[O.id])!==undefined){for(M=0,J=L.length;M<J;M++){if((I=L[M])&&I[s]==K&&I[j]==N){h[id].splice(M,1)}}}return}i(O,K,N,false)}},getTarget:function(I){I=I.browserEvent||I;return this.resolveTextNode(I.target||I.srcElement)},resolveTextNode:Ext.isGecko?function(J){if(!J){return}var I=HTMLElement.prototype.toString.call(J);if(I=="[xpconnect wrapped native prototype]"||I=="[object XULElement]"){return}return J.nodeType==3?J.parentNode:J}:function(I){return I&&I.nodeType==3?I.parentNode:I},getRelatedTarget:function(I){I=I.browserEvent||I;return this.resolveTextNode(I.relatedTarget||(I.type==G?I.toElement:I.type==A?I.fromElement:null))},getPageX:function(I){return k(I,"X")},getPageY:function(I){return k(I,"Y")},getXY:function(I){return[this.getPageX(I),this.getPageY(I)]},stopEvent:function(I){this.stopPropagation(I);this.preventDefault(I)},stopPropagation:function(I){I=I.browserEvent||I;if(I.stopPropagation){I.stopPropagation()}else{I.cancelBubble=true}},preventDefault:function(I){I=I.browserEvent||I;if(I.preventDefault){I.preventDefault()}else{I.returnValue=false}},getEvent:function(I){I=I||l.event;if(!I){var J=this.getEvent.caller;while(J){I=J.arguments[0];if(I&&Event==I.constructor){break}J=J.caller}}return I},getCharCode:function(I){I=I.browserEvent||I;return I.charCode||I.keyCode||0},getListeners:function(J,I){Ext.EventManager.getListeners(J,I)},purgeElement:function(J,K,I){Ext.EventManager.purgeElement(J,K,I)},_load:function(J){x=true;var I=Ext.lib.Event;if(Ext.isIE&&J!==true){i(l,"load",arguments.callee)}},_unload:function(P){var J=Ext.lib.Event,M,L,K,S,Q,I,O,N,T;for(I in h){Q=h[I];for(M=0,O=Q.length;M<O;M++){S=Q[M];if(S){try{T=S[y]?(S[y]===true?S[u]:S[y]):l;S[j].call(T,J.getEvent(P),S[u])}catch(R){}}}}h=null;Ext.EventManager._unload();i(l,g,J._unload)}};z.on=z.addListener;z.un=z.removeListener;if(H&&H.body){z._load(true)}else{e(l,"load",z._load)}e(l,g,z._unload);E();return z}();Ext.lib.Ajax=function(){var h=["MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"],d="Content-Type";function i(t){var s=t.conn,u;function r(v,w){for(u in w){if(w.hasOwnProperty(u)){v.setRequestHeader(u,w[u])}}}if(l.defaultHeaders){r(s,l.defaultHeaders)}if(l.headers){r(s,l.headers);delete l.headers}}function e(u,t,s,r){return{tId:u,status:s?-1:0,statusText:s?"transaction aborted":"communication failure",isAbort:s,isTimeout:r,argument:t}}function k(r,s){(l.headers=l.headers||{})[r]=s}function p(A,y){var u={},w,x=A.conn,r,v;try{w=A.conn.getAllResponseHeaders();Ext.each(w.replace(/\r\n/g,"\n").split("\n"),function(s){r=s.indexOf(":");if(r>=0){v=s.substr(0,r).toLowerCase();if(s.charAt(r+1)==" "){++r}u[v]=s.substr(r+1)}})}catch(z){}return{tId:A.tId,status:x.status,statusText:x.statusText,getResponseHeader:function(s){return u[s.toLowerCase()]},getAllResponseHeaders:function(){return w},responseText:x.responseText,responseXML:x.responseXML,argument:y}}function o(r){r.conn=null;r=null}function g(w,x,s,r){if(!x){o(w);return}var u,t;try{if(w.conn.status!==undefined&&w.conn.status!=0){u=w.conn.status}else{u=13030}}catch(v){u=13030}if((u>=200&&u<300)||(Ext.isIE&&u==1223)){t=p(w,x.argument);if(x.success){if(!x.scope){x.success(t)}else{x.success.apply(x.scope,[t])}}}else{switch(u){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:t=e(w.tId,x.argument,(s?s:false),r);if(x.failure){if(!x.scope){x.failure(t)}else{x.failure.apply(x.scope,[t])}}break;default:t=p(w,x.argument);if(x.failure){if(!x.scope){x.failure(t)}else{x.failure.apply(x.scope,[t])}}}}o(w);t=null}function n(t,w){w=w||{};var r=t.conn,v=t.tId,s=l.poll,u=w.timeout||null;if(u){l.timeout[v]=setTimeout(function(){l.abort(t,w,true)},u)}s[v]=setInterval(function(){if(r&&r.readyState==4){clearInterval(s[v]);s[v]=null;if(u){clearTimeout(l.timeout[v]);l.timeout[v]=null}g(t,w)}},l.pollInterval)}function j(v,s,u,r){var t=m()||null;if(t){t.conn.open(v,s,true);if(l.useDefaultXhrHeader){k("X-Requested-With",l.defaultXhrHeader)}if(r&&l.useDefaultHeader&&(!l.headers||!l.headers[d])){k(d,l.defaultPostHeader)}if(l.defaultHeaders||l.headers){i(t)}n(t,u);t.conn.send(r||null)}return t}function m(){var s;try{if(s=q(l.transactionId)){l.transactionId++}}catch(r){}finally{return s}}function q(u){var r;try{r=new XMLHttpRequest()}catch(t){for(var s=0;s<h.length;++s){try{r=new ActiveXObject(h[s]);break}catch(t){}}}finally{return{conn:r,tId:u}}}var l={request:function(r,t,u,v,z){if(z){var w=this,s=z.xmlData,x=z.jsonData,y;Ext.applyIf(w,z);if(s||x){y=w.headers;if(!y||!y[d]){k(d,s?"text/xml":"application/json")}v=s||(!Ext.isPrimitive(x)?Ext.encode(x):x)}}return j(r||z.method||"POST",t,u,v)},serializeForm:function(s){var t=s.elements||(document.forms[s]||Ext.getDom(s)).elements,z=false,y=encodeURIComponent,w,A,r,u,v="",x;Ext.each(t,function(B){r=B.name;x=B.type;if(!B.disabled&&r){if(/select-(one|multiple)/i.test(x)){Ext.each(B.options,function(C){if(C.selected){v+=String.format("{0}={1}&",y(r),y((C.hasAttribute?C.hasAttribute("value"):C.getAttribute("value")!==null)?C.value:C.text))}})}else{if(!/file|undefined|reset|button/i.test(x)){if(!(/radio|checkbox/i.test(x)&&!B.checked)&&!(x=="submit"&&z)){v+=y(r)+"="+y(B.value)+"&";z=/submit/i.test(x)}}}}});return v.substr(0,v.length-1)},useDefaultHeader:true,defaultPostHeader:"application/x-www-form-urlencoded; charset=UTF-8",useDefaultXhrHeader:true,defaultXhrHeader:"XMLHttpRequest",poll:{},timeout:{},pollInterval:50,transactionId:0,abort:function(u,w,r){var t=this,v=u.tId,s=false;if(t.isCallInProgress(u)){u.conn.abort();clearInterval(t.poll[v]);t.poll[v]=null;clearTimeout(l.timeout[v]);t.timeout[v]=null;g(u,w,(s=true),r)}return s},isCallInProgress:function(r){return r.conn&&!{0:true,4:true}[r.conn.readyState]}};return l}();(function(){var h=Ext.lib,j=/width|height|opacity|padding/i,g=/^((width|height)|(top|left))$/,d=/width|height|top$|bottom$|left$|right$/i,i=/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i,k=function(l){return typeof l!=="undefined"},e=function(){return new Date()};h.Anim={motion:function(o,m,p,q,l,n){return this.run(o,m,p,q,l,n,Ext.lib.Motion)},run:function(p,m,r,s,l,o,n){n=n||Ext.lib.AnimBase;if(typeof s=="string"){s=Ext.lib.Easing[s]}var q=new n(p,m,r,s);q.animateX(function(){if(Ext.isFunction(l)){l.call(o)}});return q}};h.AnimBase=function(m,l,n,o){if(m){this.init(m,l,n,o)}};h.AnimBase.prototype={doMethod:function(l,o,m){var n=this;return n.method(n.curFrame,o,m-o,n.totalFrames)},setAttr:function(l,n,m){if(j.test(l)&&n<0){n=0}Ext.fly(this.el,"_anim").setStyle(l,n+m)},getAttr:function(l){var n=Ext.fly(this.el),o=n.getStyle(l),m=g.exec(l)||[];if(o!=="auto"&&!i.test(o)){return parseFloat(o)}return(!!(m[2])||(n.getStyle("position")=="absolute"&&!!(m[3])))?n.dom["offset"+m[0].charAt(0).toUpperCase()+m[0].substr(1)]:0},getDefaultUnit:function(l){return d.test(l)?"px":""},animateX:function(o,l){var m=this,n=function(){m.onComplete.removeListener(n);if(Ext.isFunction(o)){o.call(l||m,m)}};m.onComplete.addListener(n,m);m.animate()},setRunAttr:function(q){var s=this,t=this.attributes[q],u=t.to,r=t.by,v=t.from,w=t.unit,m=(this.runAttrs[q]={}),n;if(!k(u)&&!k(r)){return false}var l=k(v)?v:s.getAttr(q);if(k(u)){n=u}else{if(k(r)){if(Ext.isArray(l)){n=[];for(var o=0,p=l.length;o<p;o++){n[o]=l[o]+r[o]}}else{n=l+r}}}Ext.apply(m,{start:l,end:n,unit:k(w)?w:s.getDefaultUnit(q)})},init:function(m,q,p,l){var s=this,o=0,t=h.AnimMgr;Ext.apply(s,{isAnimated:false,startTime:null,el:Ext.getDom(m),attributes:q||{},duration:p||1,method:l||h.Easing.easeNone,useSec:true,curFrame:0,totalFrames:t.fps,runAttrs:{},animate:function(){var v=this,w=v.duration;if(v.isAnimated){return false}v.curFrame=0;v.totalFrames=v.useSec?Math.ceil(t.fps*w):w;t.registerElement(v)},stop:function(v){var w=this;if(v){w.curFrame=w.totalFrames;w._onTween.fire()}t.stop(w)}});var u=function(){var w=this,v;w.onStart.fire();w.runAttrs={};for(v in this.attributes){this.setRunAttr(v)}w.isAnimated=true;w.startTime=e();o=0};var r=function(){var w=this;w.onTween.fire({duration:e()-w.startTime,curFrame:w.curFrame});var x=w.runAttrs;for(var v in x){this.setAttr(v,w.doMethod(v,x[v].start,x[v].end),x[v].unit)}++o};var n=function(){var v=this,x=(e()-v.startTime)/1000,w={duration:x,frames:o,fps:o/x};v.isAnimated=false;o=0;v.onComplete.fire(w)};s.onStart=new Ext.util.Event(s);s.onTween=new Ext.util.Event(s);s.onComplete=new Ext.util.Event(s);(s._onStart=new Ext.util.Event(s)).addListener(u);(s._onTween=new Ext.util.Event(s)).addListener(r);(s._onComplete=new Ext.util.Event(s)).addListener(n)}};Ext.lib.AnimMgr=new function(){var p=this,n=null,m=[],l=0;Ext.apply(p,{fps:1000,delay:1,registerElement:function(r){m.push(r);++l;r._onStart.fire();p.start()},unRegister:function(s,r){s._onComplete.fire();r=r||q(s);if(r!=-1){m.splice(r,1)}if(--l<=0){p.stop()}},start:function(){if(n===null){n=setInterval(p.run,p.delay)}},stop:function(t){if(!t){clearInterval(n);for(var s=0,r=m.length;s<r;++s){if(m[0].isAnimated){p.unRegister(m[0],0)}}m=[];n=null;l=0}else{p.unRegister(t)}},run:function(){var u,t,r,s;for(t=0,r=m.length;t<r;t++){s=m[t];if(s&&s.isAnimated){u=s.totalFrames;if(s.curFrame<u||u===null){++s.curFrame;if(s.useSec){o(s)}s._onTween.fire()}else{p.stop(s)}}}}});var q=function(t){var s,r;for(s=0,r=m.length;s<r;s++){if(m[s]===t){return s}}return -1};var o=function(s){var w=s.totalFrames,v=s.curFrame,u=s.duration,t=(v*u*1000/w),r=(e()-s.startTime),x=0;if(r<u*1000){x=Math.round((r/t-1)*v)}else{x=w-(v+1)}if(x>0&&isFinite(x)){if(s.curFrame+x>=w){x=w-(v+1)}s.curFrame+=x}}};h.Bezier=new function(){this.getPosition=function(q,p){var s=q.length,o=[],r=1-p,m,l;for(m=0;m<s;++m){o[m]=[q[m][0],q[m][1]]}for(l=1;l<s;++l){for(m=0;m<s-l;++m){o[m][0]=r*o[m][0]+p*o[parseInt(m+1,10)][0];o[m][1]=r*o[m][1]+p*o[parseInt(m+1,10)][1]}}return[o[0][0],o[0][1]]}};h.Easing={easeNone:function(m,l,o,n){return o*m/n+l},easeIn:function(m,l,o,n){return o*(m/=n)*m+l},easeOut:function(m,l,o,n){return -o*(m/=n)*(m-2)+l}};(function(){h.Motion=function(q,p,r,s){if(q){h.Motion.superclass.constructor.call(this,q,p,r,s)}};Ext.extend(h.Motion,Ext.lib.AnimBase);var o=h.Motion.superclass,n=h.Motion.prototype,m=/^points$/i;Ext.apply(h.Motion.prototype,{setAttr:function(p,t,s){var r=this,q=o.setAttr;if(m.test(p)){s=s||"px";q.call(r,"left",t[0],s);q.call(r,"top",t[1],s)}else{q.call(r,p,t,s)}},getAttr:function(p){var r=this,q=o.getAttr;return m.test(p)?[q.call(r,"left"),q.call(r,"top")]:q.call(r,p)},doMethod:function(p,s,q){var r=this;return m.test(p)?h.Bezier.getPosition(r.runAttrs[p],r.method(r.curFrame,0,100,r.totalFrames)/100):o.doMethod.call(r,p,s,q)},setRunAttr:function(w){if(m.test(w)){var y=this,r=this.el,B=this.attributes.points,u=B.control||[],z=B.from,A=B.to,x=B.by,C=h.Dom,q,t,s,v,p;if(u.length>0&&!Ext.isArray(u[0])){u=[u]}else{}Ext.fly(r,"_anim").position();C.setXY(r,k(z)?z:C.getXY(r));q=y.getAttr("points");if(k(A)){s=l.call(y,A,q);for(t=0,v=u.length;t<v;++t){u[t]=l.call(y,u[t],q)}}else{if(k(x)){s=[q[0]+x[0],q[1]+x[1]];for(t=0,v=u.length;t<v;++t){u[t]=[q[0]+u[t][0],q[1]+u[t][1]]}}}p=this.runAttrs[w]=[q];if(u.length>0){p=p.concat(u)}p[p.length]=s}else{o.setRunAttr.call(this,w)}}});var l=function(p,r){var q=h.Dom.getXY(this.el);return[p[0]-q[0]+r[0],p[1]-q[1]+r[1]]}})()})();(function(){var d=Math.abs,j=Math.PI,i=Math.asin,h=Math.pow,e=Math.sin,g=Ext.lib;Ext.apply(g.Easing,{easeBoth:function(l,k,n,m){return((l/=m/2)<1)?n/2*l*l+k:-n/2*((--l)*(l-2)-1)+k},easeInStrong:function(l,k,n,m){return n*(l/=m)*l*l*l+k},easeOutStrong:function(l,k,n,m){return -n*((l=l/m-1)*l*l*l-1)+k},easeBothStrong:function(l,k,n,m){return((l/=m/2)<1)?n/2*l*l*l*l+k:-n/2*((l-=2)*l*l*l-2)+k},elasticIn:function(m,k,r,q,l,o){if(m==0||(m/=q)==1){return m==0?k:k+r}o=o||(q*0.3);var n;if(l>=d(r)){n=o/(2*j)*i(r/l)}else{l=r;n=o/4}return -(l*h(2,10*(m-=1))*e((m*q-n)*(2*j)/o))+k},elasticOut:function(m,k,r,q,l,o){if(m==0||(m/=q)==1){return m==0?k:k+r}o=o||(q*0.3);var n;if(l>=d(r)){n=o/(2*j)*i(r/l)}else{l=r;n=o/4}return l*h(2,-10*m)*e((m*q-n)*(2*j)/o)+r+k},elasticBoth:function(m,k,r,q,l,o){if(m==0||(m/=q/2)==2){return m==0?k:k+r}o=o||(q*(0.3*1.5));var n;if(l>=d(r)){n=o/(2*j)*i(r/l)}else{l=r;n=o/4}return m<1?-0.5*(l*h(2,10*(m-=1))*e((m*q-n)*(2*j)/o))+k:l*h(2,-10*(m-=1))*e((m*q-n)*(2*j)/o)*0.5+r+k},backIn:function(l,k,o,n,m){m=m||1.70158;return o*(l/=n)*l*((m+1)*l-m)+k},backOut:function(l,k,o,n,m){if(!m){m=1.70158}return o*((l=l/n-1)*l*((m+1)*l+m)+1)+k},backBoth:function(l,k,o,n,m){m=m||1.70158;return((l/=n/2)<1)?o/2*(l*l*(((m*=(1.525))+1)*l-m))+k:o/2*((l-=2)*l*(((m*=(1.525))+1)*l+m)+2)+k},bounceIn:function(l,k,n,m){return n-g.Easing.bounceOut(m-l,0,n,m)+k},bounceOut:function(l,k,n,m){if((l/=m)<(1/2.75)){return n*(7.5625*l*l)+k}else{if(l<(2/2.75)){return n*(7.5625*(l-=(1.5/2.75))*l+0.75)+k}else{if(l<(2.5/2.75)){return n*(7.5625*(l-=(2.25/2.75))*l+0.9375)+k}}}return n*(7.5625*(l-=(2.625/2.75))*l+0.984375)+k},bounceBoth:function(l,k,n,m){return(l<m/2)?g.Easing.bounceIn(l*2,0,n,m)*0.5+k:g.Easing.bounceOut(l*2-m,0,n,m)*0.5+n*0.5+k}})})();(function(){var i=Ext.lib;i.Anim.color=function(q,o,r,s,n,p){return i.Anim.run(q,o,r,s,n,p,i.ColorAnim)};i.ColorAnim=function(o,n,p,q){i.ColorAnim.superclass.constructor.call(this,o,n,p,q)};Ext.extend(i.ColorAnim,i.AnimBase);var k=i.ColorAnim.superclass,j=/color$/i,g=/^transparent|rgba\(0, 0, 0, 0\)$/,m=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,d=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,e=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i,h=function(n){return typeof n!=="undefined"};function l(o){var q=parseInt,p,n=null,r;if(o.length==3){return o}Ext.each([d,m,e],function(t,s){p=(s%2==0)?16:10;r=t.exec(o);if(r&&r.length==4){n=[q(r[1],p),q(r[2],p),q(r[3],p)];return false}});return n}Ext.apply(i.ColorAnim.prototype,{getAttr:function(n){var p=this,o=p.el,q;if(j.test(n)){while(o&&g.test(q=Ext.fly(o).getStyle(n))){o=o.parentNode;q="fff"}}else{q=k.getAttr.call(p,n)}return q},doMethod:function(t,n,p){var u=this,o,r=Math.floor,q,s,w;if(j.test(t)){o=[];for(q=0,s=n.length;q<s;q++){w=n[q];o[q]=k.doMethod.call(u,t,w,p[q])}o="rgb("+r(o[0])+","+r(o[1])+","+r(o[2])+")"}else{o=k.doMethod.call(u,t,n,p)}return o},setRunAttr:function(s){var u=this,v=u.attributes[s],w=v.to,t=v.by,o;k.setRunAttr.call(u,s);o=u.runAttrs[s];if(j.test(s)){var n=l(o.start),p=l(o.end);if(!h(w)&&h(t)){p=l(t);for(var q=0,r=n.length;q<r;q++){p[q]=n[q]+p[q]}}o.start=n;o.end=p}}})})();(function(){var d=Ext.lib;d.Anim.scroll=function(k,i,l,m,h,j){return d.Anim.run(k,i,l,m,h,j,d.Scroll)};d.Scroll=function(i,h,j,k){if(i){d.Scroll.superclass.constructor.call(this,i,h,j,k)}};Ext.extend(d.Scroll,d.ColorAnim);var g=d.Scroll.superclass,e="scroll";Ext.apply(d.Scroll.prototype,{doMethod:function(h,n,i){var l,k=this,m=k.curFrame,j=k.totalFrames;if(h==e){l=[k.method(m,n[0],i[0]-n[0],j),k.method(m,n[1],i[1]-n[1],j)]}else{l=g.doMethod.call(k,h,n,i)}return l},getAttr:function(h){var i=this;if(h==e){return[i.el.scrollLeft,i.el.scrollTop]}else{return g.getAttr.call(i,h)}},setAttr:function(h,k,j){var i=this;if(h==e){i.el.scrollLeft=k[0];i.el.scrollTop=k[1]}else{g.setAttr.call(i,h,k,j)}}})})();if(Ext.isIE){function a(){var d=Function.prototype;delete d.createSequence;delete d.defer;delete d.createDelegate;delete d.createCallback;delete d.createInterceptor;window.detachEvent("onunload",a)}window.attachEvent("onunload",a)}})();(function(){var i=Ext.util,l=Ext.toArray,k=Ext.each,a=Ext.isObject,h=true,j=false;i.Observable=function(){var m=this,n=m.events;if(m.listeners){m.on(m.listeners);delete m.listeners}m.events=n||{}};i.Observable.prototype={filterOptRe:/^(?:scope|delay|buffer|single)$/,fireEvent:function(){var m=l(arguments),o=m[0].toLowerCase(),p=this,n=h,s=p.events[o],r,t;if(p.eventsSuspended===h){if(r=p.eventQueue){r.push(m)}}else{if(a(s)&&s.bubble){if(s.fire.apply(s,m.slice(1))===j){return j}t=p.getBubbleTarget&&p.getBubbleTarget();if(t&&t.enableBubble){if(!t.events[o]||!Ext.isObject(t.events[o])||!t.events[o].bubble){t.enableBubble(o)}return t.fireEvent.apply(t,m)}}else{if(a(s)){m.shift();n=s.fire.apply(s,m)}}}return n},addListener:function(p,s,u,n){var r=this,q,v,t,m;if(a(p)){n=p;for(q in n){v=n[q];if(!r.filterOptRe.test(q)){r.addListener(q,v.fn||v,v.scope||n.scope,v.fn?v:n)}}}else{p=p.toLowerCase();m=r.events[p]||h;if(Ext.isBoolean(m)){r.events[p]=m=new i.Event(r,p)}m.addListener(s,u,a(n)?n:{})}},removeListener:function(m,o,n){var p=this.events[m.toLowerCase()];if(a(p)){p.removeListener(o,n)}},purgeListeners:function(){var o=this.events,m,n;for(n in o){m=o[n];if(a(m)){m.clearListeners()}}},addEvents:function(q){var p=this;p.events=p.events||{};if(Ext.isString(q)){var m=arguments,n=m.length;while(n--){p.events[m[n]]=p.events[m[n]]||h}}else{Ext.applyIf(p.events,q)}},hasListener:function(m){var n=this.events[m];return a(n)&&n.listeners.length>0},suspendEvents:function(m){this.eventsSuspended=h;if(m&&!this.eventQueue){this.eventQueue=[]}},resumeEvents:function(){var m=this,n=m.eventQueue||[];m.eventsSuspended=j;delete m.eventQueue;k(n,function(o){m.fireEvent.apply(m,o)})}};var e=i.Observable.prototype;e.on=e.addListener;e.un=e.removeListener;i.Observable.releaseCapture=function(m){m.fireEvent=e.fireEvent};function g(n,p,m){return function(){if(p.target==arguments[0]){n.apply(m,l(arguments))}}}function c(p,q,m,n){m.task=new i.DelayedTask();return function(){m.task.delay(q.buffer,p,n,l(arguments))}}function d(o,p,n,m){return function(){p.removeListener(n,m);return o.apply(m,arguments)}}function b(p,q,m,n){return function(){var o=new i.DelayedTask();if(!m.tasks){m.tasks=[]}m.tasks.push(o);o.delay(q.delay||10,p,n,l(arguments))}}i.Event=function(n,m){this.name=m;this.obj=n;this.listeners=[]};i.Event.prototype={addListener:function(p,o,n){var q=this,m;o=o||q.obj;if(!q.isListening(p,o)){m=q.createListener(p,o,n);if(q.firing){q.listeners=q.listeners.slice(0)}q.listeners.push(m)}},createListener:function(q,p,r){r=r||{},p=p||this.obj;var m={fn:q,scope:p,options:r},n=q;if(r.target){n=g(n,r,p)}if(r.delay){n=b(n,r,m,p)}if(r.single){n=d(n,this,q,p)}if(r.buffer){n=c(n,r,m,p)}m.fireFn=n;return m},findListener:function(q,p){var r=this.listeners,n=r.length,m,o;while(n--){m=r[n];if(m){o=m.scope;if(m.fn==q&&(o==p||o==this.obj)){return n}}}return -1},isListening:function(n,m){return this.findListener(n,m)!=-1},removeListener:function(r,q){var p,m,n,s=this,o=j;if((p=s.findListener(r,q))!=-1){if(s.firing){s.listeners=s.listeners.slice(0)}m=s.listeners[p];if(m.task){m.task.cancel();delete m.task}n=m.tasks&&m.tasks.length;if(n){while(n--){m.tasks[n].cancel()}delete m.tasks}s.listeners.splice(p,1);o=h}return o},clearListeners:function(){var o=this,m=o.listeners,n=m.length;while(n--){o.removeListener(m[n].fn,m[n].scope)}},fire:function(){var r=this,o=l(arguments),q=r.listeners,m=q.length,p=0,n;if(m>0){r.firing=h;for(;p<m;p++){n=q[p];if(n&&n.fireFn.apply(n.scope||r.obj||window,o)===j){return(r.firing=j)}}}r.firing=j;return h}}})();Ext.DomHelper=function(){var s=null,j=/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i,l=/^table|tbody|tr|td$/i,p,m="afterbegin",n="afterend",c="beforebegin",o="beforeend",a="<table>",h="</table>",b=a+"<tbody>",i="</tbody>"+h,k=b+"<tr>",r="</tr>"+i;function g(w,y,x,z,v,t){var u=p.insertHtml(z,Ext.getDom(w),q(y));return x?Ext.get(u,true):u}function q(z){var v="",u,y,x,t,A;if(Ext.isString(z)){v=z}else{if(Ext.isArray(z)){for(var w=0;w<z.length;w++){if(z[w]){v+=q(z[w])}}}else{v+="<"+(z.tag=z.tag||"div");Ext.iterate(z,function(B,C){if(!/tag|children|cn|html$/i.test(B)){if(Ext.isObject(C)){v+=" "+B+'="';Ext.iterate(C,function(E,D){v+=E+":"+D+";"});v+='"'}else{v+=" "+({cls:"class",htmlFor:"for"}[B]||B)+'="'+C+'"'}}});if(j.test(z.tag)){v+="/>"}else{v+=">";if((A=z.children||z.cn)){v+=q(A)}else{if(z.html){v+=z.html}}v+="</"+z.tag+">"}}}return v}function e(A,x,w,y){s.innerHTML=[x,w,y].join("");var t=-1,v=s,u;while(++t<A){v=v.firstChild}if(u=v.nextSibling){var z=document.createDocumentFragment();while(v){u=v.nextSibling;z.appendChild(v);v=u}v=z}return v}function d(t,u,w,v){var x,y;s=s||document.createElement("div");if(t=="td"&&(u==m||u==o)||!/td|tr|tbody/i.test(t)&&(u==c||u==n)){return}y=u==c?w:u==n?w.nextSibling:u==m?w.firstChild:null;if(u==c||u==n){w=w.parentNode}if(t=="td"||(t=="tr"&&(u==o||u==m))){x=e(4,k,v,r)}else{if((t=="tbody"&&(u==o||u==m))||(t=="tr"&&(u==c||u==n))){x=e(3,b,v,i)}else{x=e(2,a,v,h)}}w.insertBefore(x,y);return x}p={markup:function(t){return q(t)},applyStyles:function(w,x){if(x){var u=0,t,v;w=Ext.fly(w);if(Ext.isFunction(x)){x=x.call()}if(Ext.isString(x)){x=x.trim().split(/\s*(?::|;)\s*/);for(t=x.length;u<t;){w.setStyle(x[u++],x[u++])}}else{if(Ext.isObject(x)){w.setStyle(x)}}}},insertHtml:function(y,t,z){var x={},v,B,A,C,w,u;y=y.toLowerCase();x[c]=["BeforeBegin","previousSibling"];x[n]=["AfterEnd","nextSibling"];if(t.insertAdjacentHTML){if(l.test(t.tagName)&&(u=d(t.tagName.toLowerCase(),y,t,z))){return u}x[m]=["AfterBegin","firstChild"];x[o]=["BeforeEnd","lastChild"];if((v=x[y])){t.insertAdjacentHTML(v[0],z);return t[v[1]]}}else{A=t.ownerDocument.createRange();B="setStart"+(/end/i.test(y)?"After":"Before");if(x[y]){A[B](t);C=A.createContextualFragment(z);t.parentNode.insertBefore(C,y==c?t:t.nextSibling);return t[(y==c?"previous":"next")+"Sibling"]}else{w=(y==m?"first":"last")+"Child";if(t.firstChild){A[B](t[w]);C=A.createContextualFragment(z);if(y==m){t.insertBefore(C,t.firstChild)}else{t.appendChild(C)}}else{t.innerHTML=z}return t[w]}}throw'Illegal insertion point -> "'+y+'"'},insertBefore:function(t,v,u){return g(t,v,u,c)},insertAfter:function(t,v,u){return g(t,v,u,n,"nextSibling")},insertFirst:function(t,v,u){return g(t,v,u,m,"firstChild")},append:function(t,v,u){return g(t,v,u,o,"",true)},overwrite:function(t,v,u){t=Ext.getDom(t);t.innerHTML=q(v);return u?Ext.get(t.firstChild):t.firstChild},createHtml:q};return p}();Ext.Template=function(d){var e=this,b=arguments,c=[];if(Ext.isArray(d)){d=d.join("")}else{if(b.length>1){Ext.each(b,function(a){if(Ext.isObject(a)){Ext.apply(e,a)}else{c.push(a)}});d=c.join("")}}e.html=d;if(e.compiled){e.compile()}};Ext.Template.prototype={re:/\{([\w-]+)\}/g,applyTemplate:function(a){var b=this;return b.compiled?b.compiled(a):b.html.replace(b.re,function(c,d){return a[d]!==undefined?a[d]:""})},set:function(a,c){var b=this;b.html=a;b.compiled=null;return c?b.compile():b},compile:function(){var me=this,sep=Ext.isGecko?"+":",";function fn(m,name){name="values['"+name+"']";return"'"+sep+"("+name+" == undefined ? '' : "+name+")"+sep+"'"}eval("this.compiled = function(values){ return "+(Ext.isGecko?"'":"['")+me.html.replace(/\\/g,"\\\\").replace(/(\r\n|\n)/g,"\\n").replace(/'/g,"\\'").replace(this.re,fn)+(Ext.isGecko?"';};":"'].join('');};"));return me},insertFirst:function(b,a,c){return this.doInsert("afterBegin",b,a,c)},insertBefore:function(b,a,c){return this.doInsert("beforeBegin",b,a,c)},insertAfter:function(b,a,c){return this.doInsert("afterEnd",b,a,c)},append:function(b,a,c){return this.doInsert("beforeEnd",b,a,c)},doInsert:function(c,e,b,a){e=Ext.getDom(e);var d=Ext.DomHelper.insertHtml(c,e,this.applyTemplate(b));return a?Ext.get(d,true):d},overwrite:function(b,a,c){b=Ext.getDom(b);b.innerHTML=this.applyTemplate(a);return c?Ext.get(b.firstChild,true):b.firstChild}};Ext.Template.prototype.apply=Ext.Template.prototype.applyTemplate;Ext.Template.from=function(b,a){b=Ext.getDom(b);return new Ext.Template(b.value||b.innerHTML,a||"")};Ext.DomQuery=function(){var cache={},simpleCache={},valueCache={},nonSpace=/\S/,trimRe=/^\s+|\s+$/g,tplRe=/\{(\d+)\}/g,modeRe=/^(\s?[\/>+~]\s?|\s|$)/,tagTokenRe=/^(#)?([\w-\*]+)/,nthRe=/(\d*)n\+?(\d*)/,nthRe2=/\D/,isIE=window.ActiveXObject?true:false,key=30803;eval("var batch = 30803;");function child(p,index){var i=0,n=p.firstChild;while(n){if(n.nodeType==1){if(++i==index){return n}}n=n.nextSibling}return null}function next(n){while((n=n.nextSibling)&&n.nodeType!=1){}return n}function prev(n){while((n=n.previousSibling)&&n.nodeType!=1){}return n}function children(d){var n=d.firstChild,ni=-1,nx;while(n){nx=n.nextSibling;if(n.nodeType==3&&!nonSpace.test(n.nodeValue)){d.removeChild(n)}else{n.nodeIndex=++ni}n=nx}return this}function byClassName(c,a,v){if(!v){return c}var r=[],ri=-1,cn;for(var i=0,ci;ci=c[i];i++){if((" "+ci.className+" ").indexOf(v)!=-1){r[++ri]=ci}}return r}function attrValue(n,attr){if(!n.tagName&&typeof n.length!="undefined"){n=n[0]}if(!n){return null}if(attr=="for"){return n.htmlFor}if(attr=="class"||attr=="className"){return n.className}return n.getAttribute(attr)||n[attr]}function getNodes(ns,mode,tagName){var result=[],ri=-1,cs;if(!ns){return result}tagName=tagName||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns]}if(!mode){for(var i=0,ni;ni=ns[i];i++){cs=ni.getElementsByTagName(tagName);for(var j=0,ci;ci=cs[j];j++){result[++ri]=ci}}}else{if(mode=="/"||mode==">"){var utag=tagName.toUpperCase();for(var i=0,ni,cn;ni=ns[i];i++){cn=ni.childNodes;for(var j=0,cj;cj=cn[j];j++){if(cj.nodeName==utag||cj.nodeName==tagName||tagName=="*"){result[++ri]=cj}}}}else{if(mode=="+"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(n&&(n.nodeName==utag||n.nodeName==tagName||tagName=="*")){result[++ri]=n}}}else{if(mode=="~"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)){if(n.nodeName==utag||n.nodeName==tagName||tagName=="*"){result[++ri]=n}}}}}}}return result}function concat(a,b){if(b.slice){return a.concat(b)}for(var i=0,l=b.length;i<l;i++){a[a.length]=b[i]}return a}function byTag(cs,tagName){if(cs.tagName||cs==document){cs=[cs]}if(!tagName){return cs}var r=[],ri=-1;tagName=tagName.toLowerCase();for(var i=0,ci;ci=cs[i];i++){if(ci.nodeType==1&&ci.tagName.toLowerCase()==tagName){r[++ri]=ci}}return r}function byId(cs,attr,id){if(cs.tagName||cs==document){cs=[cs]}if(!id){return cs}var r=[],ri=-1;for(var i=0,ci;ci=cs[i];i++){if(ci&&ci.id==id){r[++ri]=ci;return r}}return r}function byAttribute(cs,attr,value,op,custom){var r=[],ri=-1,st=custom=="{",f=Ext.DomQuery.operators[op],a,ih;for(var i=0,ci;ci=cs[i];i++){if(ci.nodeType!=1){continue}ih=ci.innerHTML;if(ih!==null&&ih!==undefined){if(st){a=Ext.DomQuery.getStyle(ci,attr)}else{if(attr=="class"||attr=="className"){a=ci.className}else{if(attr=="for"){a=ci.htmlFor}else{if(attr=="href"){a=ci.getAttribute("href",2)}else{a=ci.getAttribute(attr)}}}}}else{a=ci.getAttribute(attr)}if((f&&f(a,value))||(!f&&a)){r[++ri]=ci}}return r}function byPseudo(cs,name,value){return Ext.DomQuery.pseudos[name](cs,value)}function nodupIEXml(cs){var d=++key,r;cs[0].setAttribute("_nodup",d);r=[cs[0]];for(var i=1,len=cs.length;i<len;i++){var c=cs[i];if(!c.getAttribute("_nodup")!=d){c.setAttribute("_nodup",d);r[r.length]=c}}for(var i=0,len=cs.length;i<len;i++){cs[i].removeAttribute("_nodup")}return r}function nodup(cs){if(!cs){return[]}var len=cs.length,c,i,r=cs,cj,ri=-1;if(!len||typeof cs.nodeType!="undefined"||len==1){return cs}if(isIE&&typeof cs[0].selectSingleNode!="undefined"){return nodupIEXml(cs)}var d=++key;cs[0]._nodup=d;for(i=1;c=cs[i];i++){if(c._nodup!=d){c._nodup=d}else{r=[];for(var j=0;j<i;j++){r[++ri]=cs[j]}for(j=i+1;cj=cs[j];j++){if(cj._nodup!=d){cj._nodup=d;r[++ri]=cj}}return r}}return r}function quickDiffIEXml(c1,c2){var d=++key,r=[];for(var i=0,len=c1.length;i<len;i++){c1[i].setAttribute("_qdiff",d)}for(var i=0,len=c2.length;i<len;i++){if(c2[i].getAttribute("_qdiff")!=d){r[r.length]=c2[i]}}for(var i=0,len=c1.length;i<len;i++){c1[i].removeAttribute("_qdiff")}return r}function quickDiff(c1,c2){var len1=c1.length,d=++key,r=[];if(!len1){return c2}if(isIE&&typeof c1[0].selectSingleNode!="undefined"){return quickDiffIEXml(c1,c2)}for(var i=0;i<len1;i++){c1[i]._qdiff=d}for(var i=0,len=c2.length;i<len;i++){if(c2[i]._qdiff!=d){r[r.length]=c2[i]}}return r}function quickId(ns,mode,root,id){if(ns==root){var d=root.ownerDocument||root;return d.getElementById(id)}ns=getNodes(ns,mode,"*");return byId(ns,null,id)}return{getStyle:function(el,name){return Ext.fly(el).getStyle(name)},compile:function(path,type){type=type||"select";var fn=["var f = function(root){\n var mode; ++batch; var n = root || document;\n"],q=path,mode,lq,tk=Ext.DomQuery.matchers,tklen=tk.length,mm,lmode=q.match(modeRe);if(lmode&&lmode[1]){fn[fn.length]='mode="'+lmode[1].replace(trimRe,"")+'";';q=q.replace(lmode[1],"")}while(path.substr(0,1)=="/"){path=path.substr(1)}while(q&&lq!=q){lq=q;var tm=q.match(tagTokenRe);if(type=="select"){if(tm){if(tm[1]=="#"){fn[fn.length]='n = quickId(n, mode, root, "'+tm[2]+'");'}else{fn[fn.length]='n = getNodes(n, mode, "'+tm[2]+'");'}q=q.replace(tm[0],"")}else{if(q.substr(0,1)!="@"){fn[fn.length]='n = getNodes(n, mode, "*");'}}}else{if(tm){if(tm[1]=="#"){fn[fn.length]='n = byId(n, null, "'+tm[2]+'");'}else{fn[fn.length]='n = byTag(n, "'+tm[2]+'");'}q=q.replace(tm[0],"")}}while(!(mm=q.match(modeRe))){var matched=false;for(var j=0;j<tklen;j++){var t=tk[j];var m=q.match(t.re);if(m){fn[fn.length]=t.select.replace(tplRe,function(x,i){return m[i]});q=q.replace(m[0],"");matched=true;break}}if(!matched){throw'Error parsing selector, parsing failed at "'+q+'"'}}if(mm[1]){fn[fn.length]='mode="'+mm[1].replace(trimRe,"")+'";';q=q.replace(mm[1],"")}}fn[fn.length]="return nodup(n);\n}";eval(fn.join(""));return f},select:function(path,root,type){if(!root||root==document){root=document}if(typeof root=="string"){root=document.getElementById(root)}var paths=path.split(","),results=[];for(var i=0,len=paths.length;i<len;i++){var p=paths[i].replace(trimRe,"");if(!cache[p]){cache[p]=Ext.DomQuery.compile(p);if(!cache[p]){throw p+" is not a valid selector"}}var result=cache[p](root);if(result&&result!=document){results=results.concat(result)}}if(paths.length>1){return nodup(results)}return results},selectNode:function(path,root){return Ext.DomQuery.select(path,root)[0]},selectValue:function(path,root,defaultValue){path=path.replace(trimRe,"");if(!valueCache[path]){valueCache[path]=Ext.DomQuery.compile(path,"select")}var n=valueCache[path](root),v;n=n[0]?n[0]:n;if(typeof n.normalize=="function"){n.normalize()}v=(n&&n.firstChild?n.firstChild.nodeValue:null);return((v===null||v===undefined||v==="")?defaultValue:v)},selectNumber:function(path,root,defaultValue){var v=Ext.DomQuery.selectValue(path,root,defaultValue||0);return parseFloat(v)},is:function(el,ss){if(typeof el=="string"){el=document.getElementById(el)}var isArray=Ext.isArray(el),result=Ext.DomQuery.filter(isArray?el:[el],ss);return isArray?(result.length==el.length):(result.length>0)},filter:function(els,ss,nonMatches){ss=ss.replace(trimRe,"");if(!simpleCache[ss]){simpleCache[ss]=Ext.DomQuery.compile(ss,"simple")}var result=simpleCache[ss](els);return nonMatches?quickDiff(result,els):result},matchers:[{re:/^\.([\w-]+)/,select:'n = byClassName(n, null, " {1} ");'},{re:/^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:'n = byPseudo(n, "{1}", "{2}");'},{re:/^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,select:'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'},{re:/^#([\w-]+)/,select:'n = byId(n, null, "{1}");'},{re:/^@([\w-]+)/,select:'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'}],operators:{"=":function(a,v){return a==v},"!=":function(a,v){return a!=v},"^=":function(a,v){return a&&a.substr(0,v.length)==v},"$=":function(a,v){return a&&a.substr(a.length-v.length)==v},"*=":function(a,v){return a&&a.indexOf(v)!==-1},"%=":function(a,v){return(a%v)==0},"|=":function(a,v){return a&&(a==v||a.substr(0,v.length+1)==v+"-")},"~=":function(a,v){return a&&(" "+a+" ").indexOf(" "+v+" ")!=-1}},pseudos:{"first-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.previousSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"last-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"nth-child":function(c,a){var r=[],ri=-1,m=nthRe.exec(a=="even"&&"2n"||a=="odd"&&"2n+1"||!nthRe2.test(a)&&"n+"+a||a),f=(m[1]||1)-0,l=m[2]-0;for(var i=0,n;n=c[i];i++){var pn=n.parentNode;if(batch!=pn._batch){var j=0;for(var cn=pn.firstChild;cn;cn=cn.nextSibling){if(cn.nodeType==1){cn.nodeIndex=++j}}pn._batch=batch}if(f==1){if(l==0||n.nodeIndex==l){r[++ri]=n}}else{if((n.nodeIndex+l)%f==0){r[++ri]=n}}}return r},"only-child":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(!prev(ci)&&!next(ci)){r[++ri]=ci}}return r},empty:function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var cns=ci.childNodes,j=0,cn,empty=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){empty=false;break}}if(empty){r[++ri]=ci}}return r},contains:function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if((ci.textContent||ci.innerText||"").indexOf(v)!=-1){r[++ri]=ci}}return r},nodeValue:function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[++ri]=ci}}return r},checked:function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.checked==true){r[++ri]=ci}}return r},not:function(c,ss){return Ext.DomQuery.filter(c,ss,true)},any:function(c,selectors){var ss=selectors.split("|"),r=[],ri=-1,s;for(var i=0,ci;ci=c[i];i++){for(var j=0;s=ss[j];j++){if(Ext.DomQuery.is(ci,s)){r[++ri]=ci;break}}}return r},odd:function(c){return this["nth-child"](c,"odd")},even:function(c){return this["nth-child"](c,"even")},nth:function(c,a){return c[a-1]||[]},first:function(c){return c[0]||[]},last:function(c){return c[c.length-1]||[]},has:function(c,ss){var s=Ext.DomQuery.select,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(s(ss,ci).length>0){r[++ri]=ci}}return r},next:function(c,ss){var is=Ext.DomQuery.is,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=next(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r},prev:function(c,ss){var is=Ext.DomQuery.is,r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=prev(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r}}}}();Ext.query=Ext.DomQuery.select;Ext.EventManager=function(){var u,m,i=false,l=Ext.lib.Event,n=Ext.lib.Dom,b=document,v=window,e="ie-deferred-loader",o="DOMContentLoaded",g=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/,q=[];function k(y){var B=false,x=0,w=q.length,B=false,z=false,A;if(y){if(y.getElementById||y.navigator){for(;x<w;++x){A=q[x];if(A.el===y){B=A.id;break}}if(!B){B=Ext.id(y);q.push({id:B,el:y});z=true}}else{B=Ext.id(y)}if(!Ext.elCache[B]){Ext.Element.addToCache(new Ext.Element(y),B);if(z){Ext.elCache[B].skipGC=true}}}return B}function j(y,A,D,z,x,F){y=Ext.getDom(y);var w=k(y),E=Ext.elCache[w].events,B;B=l.on(y,A,x);E[A]=E[A]||[];E[A].push([D,x,F,B,z]);if(A=="mousewheel"&&y.addEventListener){var C=["DOMMouseScroll",x,false];y.addEventListener.apply(y,C);Ext.EventManager.addListener(v,"unload",function(){y.removeEventListener.apply(y,C)})}if(A=="mousedown"&&y==document){Ext.EventManager.stoppedMouseDownEvent.addListener(x)}}function c(){if(!i){Ext.isReady=i=true;if(m){clearInterval(m)}if(Ext.isGecko||Ext.isOpera){b.removeEventListener(o,c,false)}if(Ext.isIE){var w=b.getElementById(e);if(w){w.onreadystatechange=null;w.parentNode.removeChild(w)}}if(u){u.fire();u.listeners=[]}}}function a(){var w="complete";u=new Ext.util.Event();if(Ext.isGecko||Ext.isOpera){b.addEventListener(o,c,false)}else{if(Ext.isIE){b.write("<script id="+e+' defer="defer" src="//:"><\/script>');b.getElementById(e).onreadystatechange=function(){if(this.readyState==w){c()}}}else{if(Ext.isWebKit){m=setInterval(function(){if(b.readyState==w){c()}},10)}}}l.on(v,"load",c)}function s(w,x){return function(){var y=Ext.toArray(arguments);if(x.target==Ext.EventObject.setEvent(y[0]).target){w.apply(this,y)}}}function t(x,y,w){return function(z){w.delay(y.buffer,x,null,[new Ext.EventObjectImpl(z)])}}function p(A,z,w,y,x){return function(B){Ext.EventManager.removeListener(z,w,y,x);A(B)}}function d(x,y,w){return function(A){var z=new Ext.util.DelayedTask(x);if(!w.tasks){w.tasks=[]}w.tasks.push(z);z.delay(y.delay||10,x,null,[new Ext.EventObjectImpl(A)])}}function h(B,A,w,D,E){var x=!Ext.isObject(w)?{}:w,y=Ext.getDom(B),z;D=D||x.fn;E=E||x.scope;if(!y){throw'Error listening for "'+A+'". Element "'+B+"\" doesn't exist."}function C(G){if(!Ext){return}G=Ext.EventObject.setEvent(G);var F;if(x.delegate){if(!(F=G.getTarget(x.delegate,y))){return}}else{F=G.target}if(x.stopEvent){G.stopEvent()}if(x.preventDefault){G.preventDefault()}if(x.stopPropagation){G.stopPropagation()}if(x.normalized){G=G.browserEvent}D.call(E||y,G,F,x)}if(x.target){C=s(C,x)}if(x.delay){C=d(C,x,D)}if(x.single){C=p(C,y,A,D,E)}if(x.buffer){z=new Ext.util.DelayedTask(C);C=t(C,x,z)}j(y,A,D,z,C,E);return C}var r={addListener:function(y,w,A,z,x){if(Ext.isObject(w)){var D=w,B,C;for(B in D){C=D[B];if(!g.test(B)){if(Ext.isFunction(C)){h(y,B,D,C,D.scope)}else{h(y,B,C)}}}}else{h(y,w,x,A,z)}},removeListener:function(z,D,H,I){z=Ext.getDom(z);var w=k(z),F=z&&(Ext.elCache[w].events)[D]||[],x,C,A,B,y,E,G;for(C=0,E=F.length;C<E;C++){if(Ext.isArray(G=F[C])&&G[0]==H&&(!I||G[2]==I)){if(G[4]){G[4].cancel()}B=H.tasks&&H.tasks.length;if(B){while(B--){H.tasks[B].cancel()}delete H.tasks}y=x=G[1];if(l.extAdapter){y=G[3]}l.un(z,D,y);F.splice(C,1);if(F.length===0){delete Ext.elCache[w].events[D]}for(B in Ext.elCache[w].events){return false}Ext.elCache[w].events={};return false}}if(D=="mousewheel"&&z.addEventListener&&x){z.removeEventListener("DOMMouseScroll",x,false)}if(D=="mousedown"&&z==b&&x){Ext.EventManager.stoppedMouseDownEvent.removeListener(x)}},removeAll:function(x){x=Ext.getDom(x);var w=k(x),C=Ext.elCache[w]||{},F=C.events||{},B,A,D,y,E,z;for(y in F){if(F.hasOwnProperty(y)){B=F[y];for(A=0,D=B.length;A<D;A++){E=B[A];if(E[4]){E[4].cancel()}if(E[0].tasks&&(z=E[0].tasks.length)){while(z--){E[0].tasks[z].cancel()}delete E.tasks}l.un(x,y,l.extAdapter?E[3]:E[1])}}}if(Ext.elCache[w]){Ext.elCache[w].events={}}},getListeners:function(z,w){z=Ext.getDom(z);var B=k(z),x=Ext.elCache[B]||{},A=x.events||{},y=[];if(A&&A[w]){return A[w]}else{return null}},purgeElement:function(y,w,A){y=Ext.getDom(y);var x=k(y),D=Ext.elCache[x]||{},E=D.events||{},z,C,B;if(A){if(E&&E.hasOwnProperty(A)){C=E[A];for(z=0,B=C.length;z<B;z++){Ext.EventManager.removeListener(y,A,C[z][0])}}}else{Ext.EventManager.removeAll(y)}if(w&&y&&y.childNodes){for(z=0,B=y.childNodes.length;z<B;z++){Ext.EventManager.purgeElement(y.childNodes[z],w,A)}}},_unload:function(){var w;for(w in Ext.elCache){Ext.EventManager.removeAll(w)}},onDocumentReady:function(y,x,w){if(i){u.addListener(y,x,w);u.fire();u.listeners=[]}else{if(!u){a()}w=w||{};w.delay=w.delay||1;u.addListener(y,x,w)}}};r.on=r.addListener;r.un=r.removeListener;r.stoppedMouseDownEvent=new Ext.util.Event();return r}();Ext.onReady=Ext.EventManager.onDocumentReady;(function(){var a=function(){var c=document.body||document.getElementsByTagName("body")[0];if(!c){return false}var b=[" ",Ext.isIE?"ext-ie "+(Ext.isIE6?"ext-ie6":(Ext.isIE7?"ext-ie7":"ext-ie8")):Ext.isGecko?"ext-gecko "+(Ext.isGecko2?"ext-gecko2":"ext-gecko3"):Ext.isOpera?"ext-opera":Ext.isWebKit?"ext-webkit":""];if(Ext.isSafari){b.push("ext-safari "+(Ext.isSafari2?"ext-safari2":(Ext.isSafari3?"ext-safari3":"ext-safari4")))}else{if(Ext.isChrome){b.push("ext-chrome")}}if(Ext.isMac){b.push("ext-mac")}if(Ext.isLinux){b.push("ext-linux")}if(Ext.isStrict||Ext.isBorderBox){var d=c.parentNode;if(d){d.className+=Ext.isStrict?" ext-strict":" ext-border-box"}}c.className+=b.join(" ");return true};if(!a()){Ext.onReady(a)}})();Ext.EventObject=function(){var b=Ext.lib.Event,a={3:13,63234:37,63235:39,63232:38,63233:40,63276:33,63277:34,63272:46,63273:36,63275:35},c=Ext.isIE?{1:0,4:1,2:2}:(Ext.isWebKit?{1:0,2:1,3:2}:{0:0,1:1,2:2});Ext.EventObjectImpl=function(d){if(d){this.setEvent(d.browserEvent||d)}};Ext.EventObjectImpl.prototype={setEvent:function(g){var d=this;if(g==d||(g&&g.browserEvent)){return g}d.browserEvent=g;if(g){d.button=g.button?c[g.button]:(g.which?g.which-1:-1);if(g.type=="click"&&d.button==-1){d.button=0}d.type=g.type;d.shiftKey=g.shiftKey;d.ctrlKey=g.ctrlKey||g.metaKey||false;d.altKey=g.altKey;d.keyCode=g.keyCode;d.charCode=g.charCode;d.target=b.getTarget(g);d.xy=b.getXY(g)}else{d.button=-1;d.shiftKey=false;d.ctrlKey=false;d.altKey=false;d.keyCode=0;d.charCode=0;d.target=null;d.xy=[0,0]}return d},stopEvent:function(){var d=this;if(d.browserEvent){if(d.browserEvent.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(d)}b.stopEvent(d.browserEvent)}},preventDefault:function(){if(this.browserEvent){b.preventDefault(this.browserEvent)}},stopPropagation:function(){var d=this;if(d.browserEvent){if(d.browserEvent.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(d)}b.stopPropagation(d.browserEvent)}},getCharCode:function(){return this.charCode||this.keyCode},getKey:function(){return this.normalizeKey(this.keyCode||this.charCode)},normalizeKey:function(d){return Ext.isSafari?(a[d]||d):d},getPageX:function(){return this.xy[0]},getPageY:function(){return this.xy[1]},getXY:function(){return this.xy},getTarget:function(e,g,d){return e?Ext.fly(this.target).findParent(e,g,d):(d?Ext.get(this.target):this.target)},getRelatedTarget:function(){return this.browserEvent?b.getRelatedTarget(this.browserEvent):null},getWheelDelta:function(){var d=this.browserEvent;var g=0;if(d.wheelDelta){g=d.wheelDelta/120}else{if(d.detail){g=-d.detail/3}}return g},within:function(g,h,d){if(g){var e=this[h?"getRelatedTarget":"getTarget"]();return e&&((d?(e==Ext.getDom(g)):false)||Ext.fly(g).contains(e))}return false}};return new Ext.EventObjectImpl()}();(function(){var j=document;Ext.Element=function(o,p){var q=typeof o=="string"?j.getElementById(o):o,r;if(!q){return null}r=q.id;if(!p&&r&&Ext.elCache[r]){return Ext.elCache[r].el}this.dom=q;this.id=r||Ext.id(q)};var a=Ext.lib.Dom,g=Ext.DomHelper,m=Ext.lib.Event,e=Ext.lib.Anim,h=Ext.Element,b=Ext.elCache;h.prototype={set:function(t,q){var r=this.dom,p,s,q=(q!==false)&&!!r.setAttribute;for(p in t){if(t.hasOwnProperty(p)){s=t[p];if(p=="style"){g.applyStyles(r,s)}else{if(p=="cls"){r.className=s}else{if(q){r.setAttribute(p,s)}else{r[p]=s}}}}}return this},defaultUnit:"px",is:function(o){return Ext.DomQuery.is(this.dom,o)},focus:function(r,q){var o=this,q=q||o.dom;try{if(Number(r)){o.focus.defer(r,null,[null,q])}else{q.focus()}}catch(p){}return o},blur:function(){try{this.dom.blur()}catch(o){}return this},getValue:function(o){var p=this.dom.value;return o?parseInt(p,10):p},addListener:function(o,r,q,p){Ext.EventManager.on(this.dom,o,r,q||this,p);return this},removeListener:function(o,q,p){Ext.EventManager.removeListener(this.dom,o,q,p||this);return this},removeAllListeners:function(){Ext.EventManager.removeAll(this.dom);return this},purgeAllListeners:function(){Ext.EventManager.purgeElement(this,true);return this},addUnits:function(o){if(o===""||o=="auto"||o===undefined){o=o||""}else{if(!isNaN(o)||!k.test(o)){o=o+(this.defaultUnit||"px")}}return o},load:function(p,q,o){Ext.Ajax.request(Ext.apply({params:q,url:p.url||p,callback:o,el:this.dom,indicatorText:p.indicatorText||""},Ext.isObject(p)?p:{}));return this},isBorderBox:function(){return i[(this.dom.tagName||"").toLowerCase()]||Ext.isBorderBox},remove:function(){var o=this,p=o.dom;if(p){delete o.dom;Ext.removeNode(p)}},hover:function(p,o,r,q){var s=this;s.on("mouseenter",p,r||s.dom,q);s.on("mouseleave",o,r||s.dom,q);return s},contains:function(o){return !o?false:Ext.lib.Dom.isAncestor(this.dom,o.dom?o.dom:o)},getAttributeNS:function(p,o){return this.getAttribute(o,p)},getAttribute:Ext.isIE?function(o,q){var r=this.dom,p=typeof r[q+":"+o];if(["undefined","unknown"].indexOf(p)==-1){return r[q+":"+o]}return r[o]}:function(o,p){var q=this.dom;return q.getAttributeNS(p,o)||q.getAttribute(p+":"+o)||q.getAttribute(o)||q[o]},update:function(o){if(this.dom){this.dom.innerHTML=o}return this}};var n=h.prototype;h.addMethods=function(p){Ext.apply(n,p)};n.on=n.addListener;n.un=n.removeListener;n.autoBoxAdjust=true;var k=/\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i,d;h.get=function(p){var o,s,r;if(!p){return null}if(typeof p=="string"){if(!(s=j.getElementById(p))){return null}if(b[p]&&b[p].el){o=b[p].el;o.dom=s}else{o=h.addToCache(new h(s))}return o}else{if(p.tagName){if(!(r=p.id)){r=Ext.id(p)}if(b[r]&&b[r].el){o=b[r].el;o.dom=p}else{o=h.addToCache(new h(p))}return o}else{if(p instanceof h){if(p!=d){p.dom=j.getElementById(p.id)||p.dom}return p}else{if(p.isComposite){return p}else{if(Ext.isArray(p)){return h.select(p)}else{if(p==j){if(!d){var q=function(){};q.prototype=h.prototype;d=new q();d.dom=j}return d}}}}}}return null};h.addToCache=function(o,p){p=p||o.id;b[p]={el:o,data:{},events:{}};return o};h.data=function(p,o,q){p=h.get(p);if(!p){return null}var r=b[p.id].data;if(arguments.length==2){return r[o]}else{return(r[o]=q)}};function l(){if(!Ext.enableGarbageCollector){clearInterval(h.collectorThreadId)}else{var p,r,u,s;for(p in b){s=b[p];if(s.skipGC){continue}r=s.el;u=r.dom;if(!u||!u.parentNode||(!u.offsetParent&&!j.getElementById(p))){if(Ext.enableListenerCollection){Ext.EventManager.removeAll(u)}delete b[p]}}if(Ext.isIE){var q={};for(p in b){q[p]=b[p]}b=Ext.elCache=q}}}h.collectorThreadId=setInterval(l,30000);var c=function(){};c.prototype=h.prototype;h.Flyweight=function(o){this.dom=o};h.Flyweight.prototype=new c();h.Flyweight.prototype.isFlyweight=true;h._flyweights={};h.fly=function(q,o){var p=null;o=o||"_global";if(q=Ext.getDom(q)){(h._flyweights[o]=h._flyweights[o]||new h.Flyweight()).dom=q;p=h._flyweights[o]}return p};Ext.get=h.get;Ext.fly=h.fly;var i=Ext.isStrict?{select:1}:{input:1,select:1,textarea:1};if(Ext.isIE||Ext.isGecko){i.button=1}Ext.EventManager.on(window,"unload",function(){delete b;delete h._flyweights})})();Ext.Element.addMethods(function(){var d="parentNode",b="nextSibling",c="previousSibling",e=Ext.DomQuery,a=Ext.get;return{findParent:function(m,l,h){var j=this.dom,g=document.body,k=0,i;if(Ext.isGecko&&Object.prototype.toString.call(j)=="[object XULElement]"){return null}l=l||50;if(isNaN(l)){i=Ext.getDom(l);l=Number.MAX_VALUE}while(j&&j.nodeType==1&&k<l&&j!=g&&j!=i){if(e.is(j,m)){return h?a(j):j}k++;j=j.parentNode}return null},findParentNode:function(j,i,g){var h=Ext.fly(this.dom.parentNode,"_internal");return h?h.findParent(j,i,g):null},up:function(h,g){return this.findParentNode(h,g,true)},select:function(g){return Ext.Element.select(g,this.dom)},query:function(g){return e.select(g,this.dom)},child:function(g,h){var i=e.selectNode(g,this.dom);return h?i:a(i)},down:function(g,h){var i=e.selectNode(" > "+g,this.dom);return h?i:a(i)},parent:function(g,h){return this.matchNode(d,d,g,h)},next:function(g,h){return this.matchNode(b,b,g,h)},prev:function(g,h){return this.matchNode(c,c,g,h)},first:function(g,h){return this.matchNode(b,"firstChild",g,h)},last:function(g,h){return this.matchNode(c,"lastChild",g,h)},matchNode:function(h,k,g,i){var j=this.dom[k];while(j){if(j.nodeType==1&&(!g||e.is(j,g))){return !i?a(j):j}j=j[h]}return null}}}());Ext.Element.addMethods(function(){var c=Ext.getDom,a=Ext.get,b=Ext.DomHelper;return{appendChild:function(d){return a(d).appendTo(this)},appendTo:function(d){c(d).appendChild(this.dom);return this},insertBefore:function(d){(d=c(d)).parentNode.insertBefore(this.dom,d);return this},insertAfter:function(d){(d=c(d)).parentNode.insertBefore(this.dom,d.nextSibling);return this},insertFirst:function(e,d){e=e||{};if(e.nodeType||e.dom||typeof e=="string"){e=c(e);this.dom.insertBefore(e,this.dom.firstChild);return !d?a(e):e}else{return this.createChild(e,this.dom.firstChild,d)}},replace:function(d){d=a(d);this.insertBefore(d);d.remove();return this},replaceWith:function(d){var e=this;if(d.nodeType||d.dom||typeof d=="string"){d=c(d);e.dom.parentNode.insertBefore(d,e.dom)}else{d=b.insertBefore(e.dom,d)}delete Ext.elCache[e.id];Ext.removeNode(e.dom);e.id=Ext.id(e.dom=d);Ext.Element.addToCache(e.isFlyweight?new Ext.Element(e.dom):e);return e},createChild:function(e,d,g){e=e||{tag:"div"};return d?b.insertBefore(d,e,g!==true):b[!this.dom.firstChild?"overwrite":"append"](this.dom,e,g!==true)},wrap:function(d,e){var g=b.insertBefore(this.dom,d||{tag:"div"},!e);g.dom?g.dom.appendChild(this.dom):g.appendChild(this.dom);return g},insertHtml:function(e,g,d){var h=b.insertHtml(e,this.dom,g);return d?Ext.get(h):h}}}());Ext.Element.addMethods(function(){var h={},x=/(-[a-z])/gi,b={},s=document.defaultView,u=Ext.isIE?"styleFloat":"cssFloat",C=/alpha\(opacity=(.*)\)/i,l=/^\s+|\s+$/g,A=Ext.Element,d="padding",c="margin",y="border",t="-left",q="-right",w="-top",o="-bottom",j="-width",r=Math,z="hidden",e="isClipped",k="overflow",n="overflow-x",m="overflow-y",B="originalClip",i={l:y+t+j,r:y+q+j,t:y+w+j,b:y+o+j},g={l:d+t,r:d+q,t:d+w,b:d+o},a={l:c+t,r:c+q,t:c+w,b:c+o},D=Ext.Element.data;function p(E,F){return F.charAt(1).toUpperCase()}function v(E){return h[E]||(h[E]=E=="float"?u:E.replace(x,p))}return{adjustWidth:function(E){var F=this;var G=Ext.isNumber(E);if(G&&F.autoBoxAdjust&&!F.isBorderBox()){E-=(F.getBorderWidth("lr")+F.getPadding("lr"))}return(G&&E<0)?0:E},adjustHeight:function(E){var F=this;var G=Ext.isNumber(E);if(G&&F.autoBoxAdjust&&!F.isBorderBox()){E-=(F.getBorderWidth("tb")+F.getPadding("tb"))}return(G&&E<0)?0:E},addClass:function(H){var I=this,G,E,F;H=Ext.isArray(H)?H:[H];for(G=0,E=H.length;G<E;G++){F=H[G];if(F){I.dom.className+=(!I.hasClass(F)&&F?" "+F:"")}}return I},radioClass:function(H){var I=this.dom.parentNode.childNodes,F;H=Ext.isArray(H)?H:[H];for(var G=0,E=I.length;G<E;G++){F=I[G];if(F&&F.nodeType==1){Ext.fly(F,"_internal").removeClass(H)}}return this.addClass(H)},removeClass:function(H){var I=this,F;H=Ext.isArray(H)?H:[H];if(I.dom&&I.dom.className){for(var G=0,E=H.length;G<E;G++){F=H[G];if(F){I.dom.className=I.dom.className.replace(b[F]=b[F]||new RegExp("(?:^|\\s+)"+F+"(?:\\s+|$)","g")," ")}}}return I},toggleClass:function(E){return this.hasClass(E)?this.removeClass(E):this.addClass(E)},hasClass:function(E){return E&&(" "+this.dom.className+" ").indexOf(" "+E+" ")!=-1},replaceClass:function(F,E){return this.removeClass(F).addClass(E)},isStyle:function(E,F){return this.getStyle(E)==F},getStyle:function(){return s&&s.getComputedStyle?function(K){var H=this.dom,E,G,F,I,J=Ext.isWebKit,I;if(H==document){return null}K=v(K);if(J&&/marginRight/.test(K)){I=this.getStyle("display");H.style.display="inline-block"}F=(E=H.style[K])?E:(G=s.getComputedStyle(H,""))?G[K]:null;if(J){if(F=="rgba(0, 0, 0, 0)"){F="transparent"}else{if(I){H.style.display=I}}}return F}:function(I){var G=this.dom,E,F;if(G==document){return null}if(I=="opacity"){if(G.style.filter.match){if(E=G.style.filter.match(C)){var H=parseFloat(E[1]);if(!isNaN(H)){return H?H/100:0}}}return 1}I=v(I);return G.style[I]||((F=G.currentStyle)?F[I]:null)}}(),getColor:function(E,F,J){var H=this.getStyle(E),G=Ext.isDefined(J)?J:"#",I;if(!H||/transparent|inherit/.test(H)){return F}if(/^r/.test(H)){Ext.each(H.slice(4,H.length-1).split(","),function(K){I=parseInt(K,10);G+=(I<16?"0":"")+I.toString(16)})}else{H=H.replace("#","");G+=H.length==3?H.replace(/^(\w)(\w)(\w)$/,"$1$1$2$2$3$3"):H}return(G.length>5?G.toLowerCase():F)},setStyle:function(I,H){var F,G,E;if(!Ext.isObject(I)){F={};F[I]=H;I=F}for(G in I){H=I[G];G=="opacity"?this.setOpacity(H):this.dom.style[v(G)]=H}return this},setOpacity:function(F,E){var I=this,G=I.dom.style;if(!E||!I.anim){if(Ext.isIE){var H=F<1?"alpha(opacity="+F*100+")":"",J=G.filter.replace(C,"").replace(l,"");G.zoom=1;G.filter=J+(J.length>0?" ":"")+H}else{G.opacity=F}}else{I.anim({opacity:{to:F}},I.preanim(arguments,1),null,0.35,"easeIn")}return I},clearOpacity:function(){var E=this.dom.style;if(Ext.isIE){if(!Ext.isEmpty(E.filter)){E.filter=E.filter.replace(C,"").replace(l,"")}}else{E.opacity=E["-moz-opacity"]=E["-khtml-opacity"]=""}return this},getHeight:function(G){var F=this,I=F.dom,H=Ext.isIE&&F.isStyle("display","none"),E=r.max(I.offsetHeight,H?0:I.clientHeight)||0;E=!G?E:E-F.getBorderWidth("tb")-F.getPadding("tb");return E<0?0:E},getWidth:function(F){var G=this,I=G.dom,H=Ext.isIE&&G.isStyle("display","none"),E=r.max(I.offsetWidth,H?0:I.clientWidth)||0;E=!F?E:E-G.getBorderWidth("lr")-G.getPadding("lr");return E<0?0:E},setWidth:function(F,E){var G=this;F=G.adjustWidth(F);!E||!G.anim?G.dom.style.width=G.addUnits(F):G.anim({width:{to:F}},G.preanim(arguments,1));return G},setHeight:function(E,F){var G=this;E=G.adjustHeight(E);!F||!G.anim?G.dom.style.height=G.addUnits(E):G.anim({height:{to:E}},G.preanim(arguments,1));return G},getBorderWidth:function(E){return this.addStyles(E,i)},getPadding:function(E){return this.addStyles(E,g)},clip:function(){var E=this,F=E.dom;if(!D(F,e)){D(F,e,true);D(F,B,{o:E.getStyle(k),x:E.getStyle(n),y:E.getStyle(m)});E.setStyle(k,z);E.setStyle(n,z);E.setStyle(m,z)}return E},unclip:function(){var E=this,G=E.dom;if(D(G,e)){D(G,e,false);var F=D(G,B);if(F.o){E.setStyle(k,F.o)}if(F.x){E.setStyle(n,F.x)}if(F.y){E.setStyle(m,F.y)}}return E},addStyles:function(J,I){var K=0,F=J.match(/\w/g),H;for(var G=0,E=F.length;G<E;G++){H=F[G]&&parseInt(this.getStyle(I[F[G]]),10);if(H){K+=r.abs(H)}}return K},margins:a}}());(function(){var a=Ext.lib.Dom,b="left",g="right",d="top",i="bottom",h="position",c="static",e="relative",j="auto",k="z-index";Ext.Element.addMethods({getX:function(){return a.getX(this.dom)},getY:function(){return a.getY(this.dom)},getXY:function(){return a.getXY(this.dom)},getOffsetsTo:function(l){var n=this.getXY(),m=Ext.fly(l,"_internal").getXY();return[n[0]-m[0],n[1]-m[1]]},setX:function(l,m){return this.setXY([l,this.getY()],this.animTest(arguments,m,1))},setY:function(m,l){return this.setXY([this.getX(),m],this.animTest(arguments,l,1))},setLeft:function(l){this.setStyle(b,this.addUnits(l));return this},setTop:function(l){this.setStyle(d,this.addUnits(l));return this},setRight:function(l){this.setStyle(g,this.addUnits(l));return this},setBottom:function(l){this.setStyle(i,this.addUnits(l));return this},setXY:function(n,l){var m=this;if(!l||!m.anim){a.setXY(m.dom,n)}else{m.anim({points:{to:n}},m.preanim(arguments,1),"motion")}return m},setLocation:function(l,n,m){return this.setXY([l,n],this.animTest(arguments,m,2))},moveTo:function(l,n,m){return this.setXY([l,n],this.animTest(arguments,m,2))},getLeft:function(l){return !l?this.getX():parseInt(this.getStyle(b),10)||0},getRight:function(l){var m=this;return !l?m.getX()+m.getWidth():(m.getLeft(true)+m.getWidth())||0},getTop:function(l){return !l?this.getY():parseInt(this.getStyle(d),10)||0},getBottom:function(l){var m=this;return !l?m.getY()+m.getHeight():(m.getTop(true)+m.getHeight())||0},position:function(p,o,l,n){var m=this;if(!p&&m.isStyle(h,c)){m.setStyle(h,e)}else{if(p){m.setStyle(h,p)}}if(o){m.setStyle(k,o)}if(l||n){m.setXY([l||false,n||false])}},clearPositioning:function(l){l=l||"";this.setStyle({left:l,right:l,top:l,bottom:l,"z-index":"",position:c});return this},getPositioning:function(){var m=this.getStyle(b);var n=this.getStyle(d);return{position:this.getStyle(h),left:m,right:m?"":this.getStyle(g),top:n,bottom:n?"":this.getStyle(i),"z-index":this.getStyle(k)}},setPositioning:function(l){var n=this,m=n.dom.style;n.setStyle(l);if(l.right==j){m.right=""}if(l.bottom==j){m.bottom=""}return n},translatePoints:function(m,u){u=isNaN(m[1])?u:m[1];m=isNaN(m[0])?m:m[0];var q=this,r=q.isStyle(h,e),s=q.getXY(),n=parseInt(q.getStyle(b),10),p=parseInt(q.getStyle(d),10);n=!isNaN(n)?n:(r?0:q.dom.offsetLeft);p=!isNaN(p)?p:(r?0:q.dom.offsetTop);return{left:(m-s[0]+n),top:(u-s[1]+p)}},animTest:function(m,l,n){return !!l&&this.preanim?this.preanim(m,n):false}})})();Ext.Element.addMethods({isScrollable:function(){var a=this.dom;return a.scrollHeight>a.clientHeight||a.scrollWidth>a.clientWidth},scrollTo:function(a,b){this.dom["scroll"+(/top/i.test(a)?"Top":"Left")]=b;return this},getScroll:function(){var i=this.dom,h=document,a=h.body,c=h.documentElement,b,g,e;if(i==h||i==a){if(Ext.isIE&&Ext.isStrict){b=c.scrollLeft;g=c.scrollTop}else{b=window.pageXOffset;g=window.pageYOffset}e={left:b||(a?a.scrollLeft:0),top:g||(a?a.scrollTop:0)}}else{e={left:i.scrollLeft,top:i.scrollTop}}return e}});Ext.Element.VISIBILITY=1;Ext.Element.DISPLAY=2;Ext.Element.addMethods(function(){var h="visibility",d="display",b="hidden",j="none",a="originalDisplay",c="visibilityMode",e=Ext.Element.DISPLAY,g=Ext.Element.data,i=function(m){var l=g(m,a);if(l===undefined){g(m,a,l="")}return l},k=function(n){var l=g(n,c);if(l===undefined){g(n,c,l=1)}return l};return{originalDisplay:"",visibilityMode:1,setVisibilityMode:function(l){g(this.dom,c,l);return this},animate:function(m,o,n,p,l){this.anim(m,{duration:o,callback:n,easing:p},l);return this},anim:function(o,p,m,r,n,l){m=m||"run";p=p||{};var q=this,s=Ext.lib.Anim[m](q.dom,o,(p.duration||r)||0.35,(p.easing||n)||"easeOut",function(){if(l){l.call(q)}if(p.callback){p.callback.call(p.scope||q,q,p)}},q);p.anim=s;return s},preanim:function(l,m){return !l[m]?false:(Ext.isObject(l[m])?l[m]:{duration:l[m+1],callback:l[m+2],easing:l[m+3]})},isVisible:function(){return !this.isStyle(h,b)&&!this.isStyle(d,j)},setVisible:function(p,m){var n=this,o=n.dom,l=k(this.dom)==e;if(!m||!n.anim){if(l){n.setDisplayed(p)}else{n.fixDisplay();o.style.visibility=p?"visible":b}}else{if(p){n.setOpacity(0.01);n.setVisible(true)}n.anim({opacity:{to:(p?1:0)}},n.preanim(arguments,1),null,0.35,"easeIn",function(){if(!p){o.style[l?d:h]=(l)?j:b;Ext.fly(o).setOpacity(1)}})}return n},toggle:function(l){var m=this;m.setVisible(!m.isVisible(),m.preanim(arguments,0));return m},setDisplayed:function(l){if(typeof l=="boolean"){l=l?i(this.dom):j}this.setStyle(d,l);return this},fixDisplay:function(){var l=this;if(l.isStyle(d,j)){l.setStyle(h,b);l.setStyle(d,i(this.dom));if(l.isStyle(d,j)){l.setStyle(d,"block")}}},hide:function(l){this.setVisible(false,this.preanim(arguments,0));return this},show:function(l){this.setVisible(true,this.preanim(arguments,0));return this}}}());(function(){var y=null,A=undefined,k=true,t=false,j="setX",h="setY",a="setXY",n="left",l="bottom",s="top",m="right",q="height",g="width",i="points",w="hidden",z="absolute",u="visible",e="motion",o="position",r="easeOut",d=new Ext.Element.Flyweight(),v={},x=function(B){return B||{}},p=function(B){d.dom=B;d.id=Ext.id(B);return d},c=function(B){if(!v[B]){v[B]=[]}return v[B]},b=function(C,B){v[C]=B};Ext.enableFx=k;Ext.Fx={switchStatements:function(C,D,B){return D.apply(this,B[C])},slideIn:function(H,E){E=x(E);var J=this,G=J.dom,M=G.style,O,B,L,D,C,M,I,N,K,F;H=H||"t";J.queueFx(E,function(){O=p(G).getXY();p(G).fixDisplay();B=p(G).getFxRestore();L={x:O[0],y:O[1],0:O[0],1:O[1],width:G.offsetWidth,height:G.offsetHeight};L.right=L.x+L.width;L.bottom=L.y+L.height;p(G).setWidth(L.width).setHeight(L.height);D=p(G).fxWrap(B.pos,E,w);M.visibility=u;M.position=z;function P(){p(G).fxUnwrap(D,B.pos,E);M.width=B.width;M.height=B.height;p(G).afterFx(E)}N={to:[L.x,L.y]};K={to:L.width};F={to:L.height};function Q(U,R,V,S,X,Z,ac,ab,aa,W,T){var Y={};p(U).setWidth(V).setHeight(S);if(p(U)[X]){p(U)[X](Z)}R[ac]=R[ab]="0";if(aa){Y.width=aa}if(W){Y.height=W}if(T){Y.points=T}return Y}I=p(G).switchStatements(H.toLowerCase(),Q,{t:[D,M,L.width,0,y,y,n,l,y,F,y],l:[D,M,0,L.height,y,y,m,s,K,y,y],r:[D,M,L.width,L.height,j,L.right,n,s,y,y,N],b:[D,M,L.width,L.height,h,L.bottom,n,s,y,F,N],tl:[D,M,0,0,y,y,m,l,K,F,N],bl:[D,M,0,0,h,L.y+L.height,m,s,K,F,N],br:[D,M,0,0,a,[L.right,L.bottom],n,s,K,F,N],tr:[D,M,0,0,j,L.x+L.width,n,l,K,F,N]});M.visibility=u;p(D).show();arguments.callee.anim=p(D).fxanim(I,E,e,0.5,r,P)});return J},slideOut:function(F,D){D=x(D);var H=this,E=H.dom,K=E.style,L=H.getXY(),C,B,I,J,G={to:0};F=F||"t";H.queueFx(D,function(){B=p(E).getFxRestore();I={x:L[0],y:L[1],0:L[0],1:L[1],width:E.offsetWidth,height:E.offsetHeight};I.right=I.x+I.width;I.bottom=I.y+I.height;p(E).setWidth(I.width).setHeight(I.height);C=p(E).fxWrap(B.pos,D,u);K.visibility=u;K.position=z;p(C).setWidth(I.width).setHeight(I.height);function M(){D.useDisplay?p(E).setDisplayed(t):p(E).hide();p(E).fxUnwrap(C,B.pos,D);K.width=B.width;K.height=B.height;p(E).afterFx(D)}function N(O,W,U,X,S,V,R,T,Q){var P={};O[W]=O[U]="0";P[X]=S;if(V){P[V]=R}if(T){P[T]=Q}return P}J=p(E).switchStatements(F.toLowerCase(),N,{t:[K,n,l,q,G],l:[K,m,s,g,G],r:[K,n,s,g,G,i,{to:[I.right,I.y]}],b:[K,n,s,q,G,i,{to:[I.x,I.bottom]}],tl:[K,m,l,g,G,q,G],bl:[K,m,s,g,G,q,G,i,{to:[I.x,I.bottom]}],br:[K,n,s,g,G,q,G,i,{to:[I.x+I.width,I.bottom]}],tr:[K,n,l,g,G,q,G,i,{to:[I.right,I.y]}]});arguments.callee.anim=p(C).fxanim(J,D,e,0.5,r,M)});return H},puff:function(H){H=x(H);var F=this,G=F.dom,C=G.style,D,B,E;F.queueFx(H,function(){D=p(G).getWidth();B=p(G).getHeight();p(G).clearOpacity();p(G).show();E=p(G).getFxRestore();function I(){H.useDisplay?p(G).setDisplayed(t):p(G).hide();p(G).clearOpacity();p(G).setPositioning(E.pos);C.width=E.width;C.height=E.height;C.fontSize="";p(G).afterFx(H)}arguments.callee.anim=p(G).fxanim({width:{to:p(G).adjustWidth(D*2)},height:{to:p(G).adjustHeight(B*2)},points:{by:[-D*0.5,-B*0.5]},opacity:{to:0},fontSize:{to:200,unit:"%"}},H,e,0.5,r,I)});return F},switchOff:function(F){F=x(F);var D=this,E=D.dom,B=E.style,C;D.queueFx(F,function(){p(E).clearOpacity();p(E).clip();C=p(E).getFxRestore();function G(){F.useDisplay?p(E).setDisplayed(t):p(E).hide();p(E).clearOpacity();p(E).setPositioning(C.pos);B.width=C.width;B.height=C.height;p(E).afterFx(F)}p(E).fxanim({opacity:{to:0.3}},y,y,0.1,y,function(){p(E).clearOpacity();(function(){p(E).fxanim({height:{to:1},points:{by:[0,p(E).getHeight()*0.5]}},F,e,0.3,"easeIn",G)}).defer(100)})});return D},highlight:function(D,H){H=x(H);var F=this,G=F.dom,B=H.attr||"backgroundColor",C={},E;F.queueFx(H,function(){p(G).clearOpacity();p(G).show();function I(){G.style[B]=E;p(G).afterFx(H)}E=G.style[B];C[B]={from:D||"ffff9c",to:H.endColor||p(G).getColor(B)||"ffffff"};arguments.callee.anim=p(G).fxanim(C,H,"color",1,"easeIn",I)});return F},frame:function(B,E,H){H=x(H);var D=this,G=D.dom,C,F;D.queueFx(H,function(){B=B||"#C3DAF9";if(B.length==6){B="#"+B}E=E||1;p(G).show();var L=p(G).getXY(),J={x:L[0],y:L[1],0:L[0],1:L[1],width:G.offsetWidth,height:G.offsetHeight},I=function(){C=p(document.body||document.documentElement).createChild({style:{position:z,"z-index":35000,border:"0px solid "+B}});return C.queueFx({},K)};arguments.callee.anim={isAnimated:true,stop:function(){E=0;C.stopFx()}};function K(){var M=Ext.isBorderBox?2:1;F=C.anim({top:{from:J.y,to:J.y-20},left:{from:J.x,to:J.x-20},borderWidth:{from:0,to:10},opacity:{from:1,to:0},height:{from:J.height,to:J.height+20*M},width:{from:J.width,to:J.width+20*M}},{duration:H.duration||1,callback:function(){C.remove();--E>0?I():p(G).afterFx(H)}});arguments.callee.anim={isAnimated:true,stop:function(){F.stop()}}}I()});return D},pause:function(D){var C=this.dom,B;this.queueFx({},function(){B=setTimeout(function(){p(C).afterFx({})},D*1000);arguments.callee.anim={isAnimated:true,stop:function(){clearTimeout(B);p(C).afterFx({})}}});return this},fadeIn:function(D){D=x(D);var B=this,C=B.dom,E=D.endOpacity||1;B.queueFx(D,function(){p(C).setOpacity(0);p(C).fixDisplay();C.style.visibility=u;arguments.callee.anim=p(C).fxanim({opacity:{to:E}},D,y,0.5,r,function(){if(E==1){p(C).clearOpacity()}p(C).afterFx(D)})});return B},fadeOut:function(E){E=x(E);var C=this,D=C.dom,B=D.style,F=E.endOpacity||0;C.queueFx(E,function(){arguments.callee.anim=p(D).fxanim({opacity:{to:F}},E,y,0.5,r,function(){if(F==0){Ext.Element.data(D,"visibilityMode")==Ext.Element.DISPLAY||E.useDisplay?B.display="none":B.visibility=w;p(D).clearOpacity()}p(D).afterFx(E)})});return C},scale:function(B,C,D){this.shift(Ext.apply({},D,{width:B,height:C}));return this},shift:function(D){D=x(D);var C=this.dom,B={};this.queueFx(D,function(){for(var E in D){if(D[E]!=A){B[E]={to:D[E]}}}B.width?B.width.to=p(C).adjustWidth(D.width):B;B.height?B.height.to=p(C).adjustWidth(D.height):B;if(B.x||B.y||B.xy){B.points=B.xy||{to:[B.x?B.x.to:p(C).getX(),B.y?B.y.to:p(C).getY()]}}arguments.callee.anim=p(C).fxanim(B,D,e,0.35,r,function(){p(C).afterFx(D)})});return this},ghost:function(E,C){C=x(C);var G=this,D=G.dom,J=D.style,H={opacity:{to:0},points:{}},K=H.points,B,I,F;E=E||"b";G.queueFx(C,function(){B=p(D).getFxRestore();I=p(D).getWidth();F=p(D).getHeight();function L(){C.useDisplay?p(D).setDisplayed(t):p(D).hide();p(D).clearOpacity();p(D).setPositioning(B.pos);J.width=B.width;J.height=B.height;p(D).afterFx(C)}K.by=p(D).switchStatements(E.toLowerCase(),function(N,M){return[N,M]},{t:[0,-F],l:[-I,0],r:[I,0],b:[0,F],tl:[-I,-F],bl:[-I,F],br:[I,F],tr:[I,-F]});arguments.callee.anim=p(D).fxanim(H,C,e,0.5,r,L)});return G},syncFx:function(){var B=this;B.fxDefaults=Ext.apply(B.fxDefaults||{},{block:t,concurrent:k,stopFx:t});return B},sequenceFx:function(){var B=this;B.fxDefaults=Ext.apply(B.fxDefaults||{},{block:t,concurrent:t,stopFx:t});return B},nextFx:function(){var B=c(this.dom.id)[0];if(B){B.call(this)}},hasActiveFx:function(){return c(this.dom.id)[0]},stopFx:function(B){var C=this,E=C.dom.id;if(C.hasActiveFx()){var D=c(E)[0];if(D&&D.anim){if(D.anim.isAnimated){b(E,[D]);D.anim.stop(B!==undefined?B:k)}else{b(E,[])}}}return C},beforeFx:function(B){if(this.hasActiveFx()&&!B.concurrent){if(B.stopFx){this.stopFx();return k}return t}return k},hasFxBlock:function(){var B=c(this.dom.id);return B&&B[0]&&B[0].block},queueFx:function(E,B){var C=p(this.dom);if(!C.hasFxBlock()){Ext.applyIf(E,C.fxDefaults);if(!E.concurrent){var D=C.beforeFx(E);B.block=E.block;c(C.dom.id).push(B);if(D){C.nextFx()}}else{B.call(C)}}return C},fxWrap:function(H,F,D){var E=this.dom,C,B;if(!F.wrap||!(C=Ext.getDom(F.wrap))){if(F.fixPosition){B=p(E).getXY()}var G=document.createElement("div");G.style.visibility=D;C=E.parentNode.insertBefore(G,E);p(C).setPositioning(H);if(p(C).isStyle(o,"static")){p(C).position("relative")}p(E).clearPositioning("auto");p(C).clip();C.appendChild(E);if(B){p(C).setXY(B)}}return C},fxUnwrap:function(C,F,E){var D=this.dom;p(D).clearPositioning();p(D).setPositioning(F);if(!E.wrap){var B=p(C).dom.parentNode;B.insertBefore(D,C);p(C).remove()}},getFxRestore:function(){var B=this.dom.style;return{pos:this.getPositioning(),width:B.width,height:B.height}},afterFx:function(C){var B=this.dom,D=B.id;if(C.afterStyle){p(B).setStyle(C.afterStyle)}if(C.afterCls){p(B).addClass(C.afterCls)}if(C.remove==k){p(B).remove()}if(C.callback){C.callback.call(C.scope,p(B))}if(!C.concurrent){c(D).shift();p(B).nextFx()}},fxanim:function(E,F,C,G,D,B){C=C||"run";F=F||{};var H=Ext.lib.Anim[C](this.dom,E,(F.duration||G)||0.35,(F.easing||D)||r,B,this);F.anim=H;return H}};Ext.Fx.resize=Ext.Fx.scale;Ext.Element.addMethods(Ext.Fx)})();Ext.CompositeElementLite=function(b,a){this.elements=[];this.add(b,a);this.el=new Ext.Element.Flyweight()};Ext.CompositeElementLite.prototype={isComposite:true,getElement:function(a){var b=this.el;b.dom=a;b.id=a.id;return b},transformElement:function(a){return Ext.getDom(a)},getCount:function(){return this.elements.length},add:function(d,b){var e=this,g=e.elements;if(!d){return this}if(Ext.isString(d)){d=Ext.Element.selectorFunction(d,b)}else{if(d.isComposite){d=d.elements}else{if(!Ext.isIterable(d)){d=[d]}}}for(var c=0,a=d.length;c<a;++c){g.push(e.transformElement(d[c]))}return e},invoke:function(g,b){var h=this,d=h.elements,a=d.length,j,c;for(c=0;c<a;c++){j=d[c];if(j){Ext.Element.prototype[g].apply(h.getElement(j),b)}}return h},item:function(b){var d=this,c=d.elements[b],a=null;if(c){a=d.getElement(c)}return a},addListener:function(b,j,h,g){var d=this.elements,a=d.length,c,k;for(c=0;c<a;c++){k=d[c];if(k){Ext.EventManager.on(k,b,j,h||k,g)}}return this},each:function(g,d){var h=this,c=h.elements,a=c.length,b,j;for(b=0;b<a;b++){j=c[b];if(j){j=this.getElement(j);if(g.call(d||j,j,h,b)){break}}}return h},fill:function(a){var b=this;b.elements=[];b.add(a);return b},filter:function(a){var b=[],d=this,e=d.elements,c=Ext.isFunction(a)?a:function(g){return g.is(a)};d.each(function(j,g,h){if(c(j,h)!==false){b[b.length]=d.transformElement(j)}});d.elements=b;return d},indexOf:function(a){return this.elements.indexOf(this.transformElement(a))},replaceElement:function(e,c,a){var b=!isNaN(e)?e:this.indexOf(e),g;if(b>-1){c=Ext.getDom(c);if(a){g=this.elements[b];g.parentNode.insertBefore(c,g);Ext.removeNode(g)}this.elements.splice(b,1,c)}return this},clear:function(){this.elements=[]}};Ext.CompositeElementLite.prototype.on=Ext.CompositeElementLite.prototype.addListener;(function(){var c,b=Ext.Element.prototype,a=Ext.CompositeElementLite.prototype;for(c in b){if(Ext.isFunction(b[c])){(function(d){a[d]=a[d]||function(){return this.invoke(d,arguments)}}).call(a,c)}}})();if(Ext.DomQuery){Ext.Element.selectorFunction=Ext.DomQuery.select}Ext.Element.select=function(a,b){var c;if(typeof a=="string"){c=Ext.Element.selectorFunction(a,b)}else{if(a.length!==undefined){c=a}else{throw"Invalid selector"}}return new Ext.CompositeElementLite(c)};Ext.select=Ext.Element.select;(function(){var b="beforerequest",e="requestcomplete",d="requestexception",h=undefined,c="load",i="POST",a="GET",g=window;Ext.data.Connection=function(j){Ext.apply(this,j);this.addEvents(b,e,d);Ext.data.Connection.superclass.constructor.call(this)};Ext.extend(Ext.data.Connection,Ext.util.Observable,{timeout:30000,autoAbort:false,disableCaching:true,disableCachingParam:"_dc",request:function(n){var s=this;if(s.fireEvent(b,s,n)){if(n.el){if(!Ext.isEmpty(n.indicatorText)){s.indicatorText='<div class="loading-indicator">'+n.indicatorText+"</div>"}if(s.indicatorText){Ext.getDom(n.el).innerHTML=s.indicatorText}n.success=(Ext.isFunction(n.success)?n.success:function(){}).createInterceptor(function(o){Ext.getDom(n.el).innerHTML=o.responseText})}var l=n.params,k=n.url||s.url,j,q={success:s.handleResponse,failure:s.handleFailure,scope:s,argument:{options:n},timeout:n.timeout||s.timeout},m,t;if(Ext.isFunction(l)){l=l.call(n.scope||g,n)}l=Ext.urlEncode(s.extraParams,Ext.isObject(l)?Ext.urlEncode(l):l);if(Ext.isFunction(k)){k=k.call(n.scope||g,n)}if((m=Ext.getDom(n.form))){k=k||m.action;if(n.isUpload||/multipart\/form-data/i.test(m.getAttribute("enctype"))){return s.doFormUpload.call(s,n,l,k)}t=Ext.lib.Ajax.serializeForm(m);l=l?(l+"&"+t):t}j=n.method||s.method||((l||n.xmlData||n.jsonData)?i:a);if(j===a&&(s.disableCaching&&n.disableCaching!==false)||n.disableCaching===true){var r=n.disableCachingParam||s.disableCachingParam;k=Ext.urlAppend(k,r+"="+(new Date().getTime()))}n.headers=Ext.apply(n.headers||{},s.defaultHeaders||{});if(n.autoAbort===true||s.autoAbort){s.abort()}if((j==a||n.xmlData||n.jsonData)&&l){k=Ext.urlAppend(k,l);l=""}return(s.transId=Ext.lib.Ajax.request(j,k,q,l,n))}else{return n.callback?n.callback.apply(n.scope,[n,h,h]):null}},isLoading:function(j){return j?Ext.lib.Ajax.isCallInProgress(j):!!this.transId},abort:function(j){if(j||this.isLoading()){Ext.lib.Ajax.abort(j||this.transId)}},handleResponse:function(j){this.transId=false;var k=j.argument.options;j.argument=k?k.argument:null;this.fireEvent(e,this,j,k);if(k.success){k.success.call(k.scope,j,k)}if(k.callback){k.callback.call(k.scope,k,true,j)}},handleFailure:function(j,l){this.transId=false;var k=j.argument.options;j.argument=k?k.argument:null;this.fireEvent(d,this,j,k,l);if(k.failure){k.failure.call(k.scope,j,k)}if(k.callback){k.callback.call(k.scope,k,false,j)}},doFormUpload:function(q,j,k){var l=Ext.id(),v=document,r=v.createElement("iframe"),m=Ext.getDom(q.form),u=[],t,p="multipart/form-data",n={target:m.target,method:m.method,encoding:m.encoding,enctype:m.enctype,action:m.action};Ext.fly(r).set({id:l,name:l,cls:"x-hidden"});v.body.appendChild(r);Ext.fly(r).set({src:Ext.SSL_SECURE_URL});if(Ext.isIE){document.frames[l].name=l}Ext.fly(m).set({target:l,method:i,enctype:p,encoding:p,action:k||n.action});Ext.iterate(Ext.urlDecode(j,false),function(w,o){t=v.createElement("input");Ext.fly(t).set({type:"hidden",value:o,name:w});m.appendChild(t);u.push(t)});function s(){var x=this,w={responseText:"",responseXML:null,argument:q.argument},A,z;try{A=r.contentWindow.document||r.contentDocument||g.frames[l].document;if(A){if(A.body){if(/textarea/i.test((z=A.body.firstChild||{}).tagName)){w.responseText=z.value}else{w.responseText=A.body.innerHTML}}w.responseXML=A.XMLDocument||A}}catch(y){}Ext.EventManager.removeListener(r,c,s,x);x.fireEvent(e,x,w,q);function o(D,C,B){if(Ext.isFunction(D)){D.apply(C,B)}}o(q.success,q.scope,[w,q]);o(q.callback,q.scope,[q,true,w]);if(!x.debugUploads){setTimeout(function(){Ext.removeNode(r)},100)}}Ext.EventManager.on(r,c,s,this);m.submit();Ext.fly(m).set(n);Ext.each(u,function(o){Ext.removeNode(o)})}})})();Ext.Ajax=new Ext.data.Connection({autoAbort:false,serializeForm:function(a){return Ext.lib.Ajax.serializeForm(a)}});Ext.util.JSON=new (function(){var useHasOwn=!!{}.hasOwnProperty,isNative=function(){var useNative=null;return function(){if(useNative===null){useNative=Ext.USE_NATIVE_JSON&&window.JSON&&JSON.toString()=="[object JSON]"}return useNative}}(),pad=function(n){return n<10?"0"+n:n},doDecode=function(json){return eval("("+json+")")},doEncode=function(o){if(!Ext.isDefined(o)||o===null){return"null"}else{if(Ext.isArray(o)){return encodeArray(o)}else{if(Ext.isDate(o)){return Ext.util.JSON.encodeDate(o)}else{if(Ext.isString(o)){return encodeString(o)}else{if(typeof o=="number"){return isFinite(o)?String(o):"null"}else{if(Ext.isBoolean(o)){return String(o)}else{var a=["{"],b,i,v;for(i in o){if(!o.getElementsByTagName){if(!useHasOwn||o.hasOwnProperty(i)){v=o[i];switch(typeof v){case"undefined":case"function":case"unknown":break;default:if(b){a.push(",")}a.push(doEncode(i),":",v===null?"null":doEncode(v));b=true}}}}a.push("}");return a.join("")}}}}}}},m={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},encodeString=function(s){if(/["\\\x00-\x1f]/.test(s)){return'"'+s.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c}c=b.charCodeAt();return"\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16)})+'"'}return'"'+s+'"'},encodeArray=function(o){var a=["["],b,i,l=o.length,v;for(i=0;i<l;i+=1){v=o[i];switch(typeof v){case"undefined":case"function":case"unknown":break;default:if(b){a.push(",")}a.push(v===null?"null":Ext.util.JSON.encode(v));b=true}}a.push("]");return a.join("")};this.encodeDate=function(o){return'"'+o.getFullYear()+"-"+pad(o.getMonth()+1)+"-"+pad(o.getDate())+"T"+pad(o.getHours())+":"+pad(o.getMinutes())+":"+pad(o.getSeconds())+'"'};this.encode=function(){var ec;return function(o){if(!ec){ec=isNative()?JSON.stringify:doEncode}return ec(o)}}();this.decode=function(){var dc;return function(json){if(!dc){dc=isNative()?JSON.parse:doDecode}return dc(json)}}()})();Ext.encode=Ext.util.JSON.encode;Ext.decode=Ext.util.JSON.decode; \ No newline at end of file diff --git a/tests/javascript/frameworks/jquery/jquery-1.0.4.js b/tests/javascript/frameworks/jquery/jquery-1.0.4.js index 9f056ed6aef7406b53c390ebe6eb392d2b1d399a..4eaf428449923e441e9a2e186f5a440b3efc9502 100644 --- a/tests/javascript/frameworks/jquery/jquery-1.0.4.js +++ b/tests/javascript/frameworks/jquery/jquery-1.0.4.js @@ -62,7 +62,7 @@ var jQuery = function(a,c) { // Map over the $ in case of overwrite if ( typeof $ != "undefined" ) jQuery._$ = $; - + // Map the jQuery namespace to the '$' one var $ = jQuery; @@ -284,7 +284,7 @@ jQuery.fn = jQuery.prototype = { pushStack: function(a,args) { var fn = args && args[args.length-1]; var fn2 = args && args[args.length-2]; - + if ( fn && fn.constructor != Function ) fn = null; if ( fn2 && fn2.constructor != Function ) fn2 = null; @@ -470,10 +470,10 @@ jQuery.extend({ curCSS: function(elem, prop, force) { var ret; - + if (prop == 'opacity' && jQuery.browser.msie) return jQuery.attr(elem.style, 'opacity'); - + if (prop == "float" || prop == "cssFloat") prop = jQuery.browser.msie ? "styleFloat" : "cssFloat"; @@ -503,12 +503,12 @@ jQuery.extend({ var newProp = prop.replace(/\-(\w)/g,function(m,c){return c.toUpperCase();}); ret = elem.currentStyle[prop] || elem.currentStyle[newProp]; - + } return ret; }, - + clean: function(a) { var r = []; for ( var i = 0; i < a.length; i++ ) { @@ -530,9 +530,9 @@ jQuery.extend({ div.innerHTML = wrap[1] + s + wrap[2]; while ( wrap[0]-- ) div = div.firstChild; arg = div.childNodes; - } - - + } + + if ( arg.length != undefined && ( (jQuery.browser.safari && typeof arg == 'function') || !arg.nodeType ) ) // Safari reports typeof on a DOM NodeList to be a function for ( var n = 0; n < arg.length; n++ ) // Handles Array, jQuery, DOM NodeList collections r.push(arg[n]); @@ -726,12 +726,12 @@ jQuery.extend({ checked: "checked", readonly: "readOnly" }; - + // IE actually uses filters for opacity ... elem is actually elem.style if (name == "opacity" && jQuery.browser.msie && value != undefined) { // IE has trouble with opacity if it does not have layout // Would prefer to check element.hasLayout first but don't have access to the element here - elem['zoom'] = 1; + elem['zoom'] = 1; if (value == 1) // Remove filter to avoid more IE weirdness return elem["filter"] = elem["filter"].replace(/alpha\([^\)]*\)/gi,""); else @@ -739,7 +739,7 @@ jQuery.extend({ } else if (name == "opacity" && jQuery.browser.msie) { return elem["filter"] ? parseFloat( elem["filter"].match(/alpha\(opacity=(.*)\)/)[1] )/100 : 1; } - + // Mozilla doesn't play well with opacity 1 if (name == "opacity" && jQuery.browser.mozilla && value == 1) value = 0.9999; @@ -783,7 +783,7 @@ jQuery.extend({ var p = jQuery.parse; for ( var i = 0; i < p.length; i++ ) { - + // Look for, and replace, string-like sequences // and finally build a regexp out of it var re = new RegExp( @@ -845,12 +845,12 @@ jQuery.extend({ sibling: function(elem, pos, not) { var elems = []; - + if(elem) { var siblings = elem.parentNode.childNodes; for ( var i = 0; i < siblings.length; i++ ) { if ( not === true && siblings[i] == elem ) continue; - + if ( siblings[i].nodeType == 1 ) elems.push( siblings[i] ); if ( siblings[i] == elem ) @@ -1052,12 +1052,12 @@ jQuery.extend({ // check prevents overwriting of fake target coming from trigger if(event.srcElement) event.target = event.srcElement; - + // calculate pageX/Y var e = document.documentElement, b = document.body; event.pageX = event.clientX + (e.scrollLeft || b.scrollLeft); event.pageY = event.clientY + (e.scrollTop || b.scrollTop); - + // check safari and if target is a textnode } else if(jQuery.browser.safari && event.target.nodeType == 3) { // target is readonly, clone the event object @@ -1065,24 +1065,24 @@ jQuery.extend({ // get parentnode from textnode event.target = event.target.parentNode; } - + // fix preventDefault and stopPropagation if (!event.preventDefault) event.preventDefault = function() { this.returnValue = false; }; - + if (!event.stopPropagation) event.stopPropagation = function() { this.cancelBubble = true; }; - + return event; } } }); - + /* * Wheather the W3C compliant box model is being used. * @@ -1251,34 +1251,34 @@ jQuery.fn.extend({ return a && b && a.constructor == Function && b.constructor == Function ? this.click(function(e){ // Figure out which function to execute this.last = this.last == a ? b : a; - + // Make sure that clicks stop e.preventDefault(); - + // and execute the function return this.last.apply( this, [e] ) || false; }) : - + // Otherwise, execute the old toggle function this._toggle.apply( this, arguments ); }, hover: function(f,g) { - + // A private function for haandling mouse 'hovering' function handleHover(e) { // Check if mouse(over|out) are still within the same parent element var p = (e.type == "mouseover" ? e.fromElement : e.toElement) || e.relatedTarget; - + // Traverse up the tree while ( p && p != this ) try { p = p.parentNode } catch(e) { p = this; }; - + // If we actually just moused on to a sub-element, ignore it if ( p == this ) return false; - + // Execute the right function return (e.type == "mouseover" ? f : g).apply(this, [e]); } - + // Bind the function to the two event listeners return this.mouseover(handleHover).mouseout(handleHover); }, @@ -1287,13 +1287,13 @@ jQuery.fn.extend({ if ( jQuery.isReady ) // Execute the function immediately f.apply( document ); - + // Otherwise, remember the function for later else { // Add the function to the wait list jQuery.readyList.push( f ); } - + return this; } }); @@ -1304,20 +1304,20 @@ jQuery.extend({ */ isReady: false, readyList: [], - + // Handle when the DOM is ready ready: function() { // Make sure that the DOM is not already loaded if ( !jQuery.isReady ) { // Remember that the DOM is ready jQuery.isReady = true; - + // If there are functions bound, to execute if ( jQuery.readyList ) { // Execute all of them for ( var i = 0; i < jQuery.readyList.length; i++ ) jQuery.readyList[i].apply( document ); - + // Reset the list of functions jQuery.readyList = null; } @@ -1331,23 +1331,23 @@ jQuery.extend({ new function(){ var e = ("blur,focus,load,resize,scroll,unload,click,dblclick," + - "mousedown,mouseup,mousemove,mouseover,mouseout,change,reset,select," + + "mousedown,mouseup,mousemove,mouseover,mouseout,change,reset,select," + "submit,keydown,keypress,keyup,error").split(","); // Go through all the event names, but make sure that // it is enclosed properly for ( var i = 0; i < e.length; i++ ) new function(){ - + var o = e[i]; - + // Handle event binding jQuery.fn[o] = function(f){ return f ? this.bind(o, f) : this.trigger(o); }; - + // Handle event unbinding jQuery.fn["un"+o] = function(f){ return this.unbind(o, f); }; - + // Finally, handle events that only fire once jQuery.fn["one"+o] = function(f){ // save cloned reference to this @@ -1361,22 +1361,22 @@ new function(){ }; return this.bind(o, handler); }; - + }; - + // If Mozilla is used if ( jQuery.browser.mozilla || jQuery.browser.opera ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", jQuery.ready, false ); - + // If IE is used, use the excellent hack by Matthias Miller // http://www.outofhanwell.com/blog/index.php?title=the_window_onload_problem_revisited } else if ( jQuery.browser.msie ) { - + // Only works if you document.write() it - document.write("<scr" + "ipt id=__ie_init defer=true " + + document.write("<scr" + "ipt id=__ie_init defer=true " + "src=//:><\/script>"); - + // Use the defer script hack var script = document.getElementById("__ie_init"); if (script) // script does not exist if jQuery is loaded dynamically @@ -1385,31 +1385,31 @@ new function(){ this.parentNode.removeChild( this ); jQuery.ready(); }; - + // Clear from memory script = null; - + // If Safari is used } else if ( jQuery.browser.safari ) { // Continually check to see if the document.readyState is valid jQuery.safariTimer = setInterval(function(){ // loaded and complete are both valid states - if ( document.readyState == "loaded" || + if ( document.readyState == "loaded" || document.readyState == "complete" ) { - + // If either one are found, remove the timer clearInterval( jQuery.safariTimer ); jQuery.safariTimer = null; - + // and execute any waiting functions jQuery.ready(); } }, 10); - } + } // A fallback to window.onload, that will always work jQuery.event.add( window, "load", jQuery.ready ); - + }; // Clean up after IE to avoid memory leaks @@ -1430,7 +1430,7 @@ jQuery.fn.extend({ height: "show", width: "show", opacity: "show" }, speed, callback) : this._show(); }, - + // Overwrite the old hide method _hide: jQuery.fn.hide, @@ -1468,9 +1468,9 @@ jQuery.fn.extend({ }, animate: function(prop,speed,callback) { return this.queue(function(){ - + this.curAnim = jQuery.extend({}, prop); - + for ( var p in prop ) { var e = new jQuery.fx( this, jQuery.speed(speed,callback), p ); if ( prop[p].constructor == Number ) @@ -1478,7 +1478,7 @@ jQuery.fn.extend({ else e[ prop[p] ]( prop ); } - + }); }, queue: function(type,fn){ @@ -1486,16 +1486,16 @@ jQuery.fn.extend({ fn = type; type = "fx"; } - + return this.each(function(){ if ( !this.queue ) this.queue = {}; - + if ( !this.queue[type] ) this.queue[type] = []; - + this.queue[type].push( fn ); - + if ( this.queue[type].length == 1 ) fn.apply(this); }); @@ -1504,16 +1504,16 @@ jQuery.fn.extend({ }); jQuery.extend({ - + speed: function(s,o) { o = o || {}; - + if ( o.constructor == Function ) o = { complete: o }; - + var ss = { slow: 600, fast: 200 }; o.duration = (s && s.constructor == Number ? s : ss[s]) || 400; - + // Queueing o.oldComplete = o.complete; o.complete = function(){ @@ -1521,22 +1521,22 @@ jQuery.extend({ if ( o.oldComplete && o.oldComplete.constructor == Function ) o.oldComplete.apply( this ); }; - + return o; }, - + queue: {}, - + dequeue: function(elem,type){ type = type || "fx"; - + if ( elem.queue && elem.queue[type] ) { // Remove self elem.queue[type].shift(); - + // Get next function var f = elem.queue[type][0]; - + if ( f ) f.apply( elem ); } }, @@ -1546,7 +1546,7 @@ jQuery.extend({ * of making it small in size the code became illegible to sane * people. You've been warned. */ - + fx: function( elem, options, prop ){ var z = this; @@ -1563,7 +1563,7 @@ jQuery.extend({ // The styles var y = z.el.style; - + // Store display property var oldDisplay = jQuery.css(z.el, 'display'); // Set display property to block for animation @@ -1633,7 +1633,7 @@ jQuery.extend({ // Begin the animation z.custom(z.el.orig[prop], 0); }; - + //Simple 'toggle' function z.toggle = function() { if ( !z.el.orig ) z.el.orig = {}; @@ -1643,19 +1643,19 @@ jQuery.extend({ if(oldDisplay == 'none') { z.o.show = true; - + // Stupid IE, look what you made me do if ( prop != "opacity" ) y[prop] = "1px"; // Begin the animation - z.custom(0, z.el.orig[prop]); + z.custom(0, z.el.orig[prop]); } else { z.o.hide = true; // Begin the animation z.custom(z.el.orig[prop], 0); - } + } }; // Each step of an animation @@ -1680,14 +1680,14 @@ jQuery.extend({ if ( done ) { // Reset the overflow y.overflow = ''; - + // Reset the display y.display = oldDisplay; if (jQuery.css(z.el, 'display') == 'none') y.display = 'block'; // Hide the element if the "hide" operation was done - if ( z.o.hide ) + if ( z.o.hide ) y.display = 'none'; // Reset the properties, if the item has been hidden or shown @@ -1712,7 +1712,7 @@ jQuery.extend({ z.a(); } }; - + } }); @@ -1907,7 +1907,7 @@ jQuery.extend({ // Make sure the browser sends the right content length if ( xml.overrideMimeType ) xml.setRequestHeader("Connection", "close"); - + // Allow custom headers/mimetypes if( s.beforeSend ) s.beforeSend(xml); @@ -1991,7 +1991,7 @@ jQuery.extend({ // Send the data xml.send(s.data); - + // return XMLHttpRequest to allow aborting the request etc. return xml; }, @@ -2078,7 +2078,7 @@ jQuery.extend({ // Return the resulting serialization return s.join("&"); }, - + // evalulates a script in global context // not reliable for safari globalEval: function(data) { diff --git a/tests/javascript/frameworks/jquery/jquery-1.1.4.js b/tests/javascript/frameworks/jquery/jquery-1.1.4.js index a0702cf6eef293e41be08a411637d6bd6344430c..da07368fb89f6449ea68b3a1101bd77b21fb9e1e 100644 --- a/tests/javascript/frameworks/jquery/jquery-1.1.4.js +++ b/tests/javascript/frameworks/jquery/jquery-1.1.4.js @@ -17,14 +17,14 @@ var jQuery = window.jQuery = function(a,c) { // If the context is global, return a new object if ( window == this || !this.init ) return new jQuery(a,c); - + return this.init(a,c); }; // Map over the $ in case of overwrite if ( typeof $ != "undefined" ) var _$ = $; - + // Map the jQuery namespace to the '$' one window.$ = jQuery; @@ -85,7 +85,7 @@ jQuery.fn = jQuery.prototype = { size: function() { return this.length; }, - + length: 0, get: function( num ) { @@ -120,7 +120,7 @@ jQuery.fn = jQuery.prototype = { attr: function( key, value, type ) { var obj = key; - + // Look for the case where we're accessing a style value if ( key.constructor == String ) if ( value == undefined ) @@ -129,7 +129,7 @@ jQuery.fn = jQuery.prototype = { obj = {}; obj[ key ] = value; } - + // Check to see if we're setting style values return this.each(function(index){ // Set all the styles @@ -306,7 +306,7 @@ jQuery.fn = jQuery.prototype = { return this.pushStack( Array.prototype.slice.apply( this, arguments ) ); }, domManip: function(args, table, dir, fn){ - var clone = this.length > 1, a; + var clone = this.length > 1, a; return this.each(function(){ if ( !a ) { @@ -384,10 +384,10 @@ jQuery.extend({ // This may seem like some crazy code, but trust me when I say that this // is the only cross-browser way to do this. --John isFunction: function( fn ) { - return !!fn && typeof fn != "string" && !fn.nodeName && + return !!fn && typeof fn != "string" && !fn.nodeName && fn.constructor != Array && /function/i.test( fn + "" ); }, - + // check if an element is in a XML document isXMLDoc: function(elem) { return elem.documentElement && !elem.body || @@ -428,18 +428,18 @@ jQuery.extend({ for ( var i in obj ) fn.call( obj[i], i, obj[i] ); else - for ( var i = 0, ol = obj.length, val = obj[0]; + for ( var i = 0, ol = obj.length, val = obj[0]; i < ol && fn.call(val,i,val) !== false; val = obj[++i] ){} } return obj; }, - + prop: function(elem, value, type, index, prop){ // Handle executable functions if ( jQuery.isFunction( value ) ) value = value.call( elem, [index] ); - + // exclude the following css properties to add px var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i; @@ -462,7 +462,7 @@ jQuery.extend({ remove: function( elem, c ){ elem.className = c != undefined ? jQuery.grep( elem.className.split(/\s+/), function(cur){ - return !jQuery.className.has( c, cur ); + return !jQuery.className.has( c, cur ); }).join(" ") : ""; }, @@ -537,7 +537,7 @@ jQuery.extend({ ret = jQuery.attr(elem.style, "opacity"); return ret == "" ? "1" : ret; } - + if (prop.match(/float/i)) prop = styleFloat; @@ -592,7 +592,7 @@ jQuery.extend({ return ret; }, - + clean: function(a, doc) { var r = []; doc = doc || document; @@ -602,7 +602,7 @@ jQuery.extend({ if ( arg.constructor == Number ) arg = arg.toString(); - + // Convert html string into DOM nodes if ( typeof arg == "string" ) { // Trim whitespace, otherwise indexOf won't work as expected @@ -612,43 +612,43 @@ jQuery.extend({ // option or optgroup !s.indexOf("<opt") && [1, "<select>", "</select>"] || - + !s.indexOf("<leg") && [1, "<fieldset>", "</fieldset>"] || - + s.match(/^<(thead|tbody|tfoot|colg|cap)/) && [1, "<table>", "</table>"] || - + !s.indexOf("<tr") && [2, "<table><tbody>", "</tbody></table>"] || - + // <thead> matched above (!s.indexOf("<td") || !s.indexOf("<th")) && [3, "<table><tbody><tr>", "</tr></tbody></table>"] || - + !s.indexOf("<col") && [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"] || // IE can't serialize <link> and <script> tags normally jQuery.browser.msie && [1, "div<div>", "</div>"] || - + [0,"",""]; // Go to html and back, then peel off extra wrappers div.innerHTML = wrap[1] + arg + wrap[2]; - + // Move to the right depth while ( wrap[0]-- ) div = div.lastChild; - + // Remove IE's autoinserted <tbody> from table fragments if ( jQuery.browser.msie ) { - + // String was a <table>, *may* have spurious <tbody> - if ( !s.indexOf("<table") && s.indexOf("<tbody") < 0 ) + if ( !s.indexOf("<table") && s.indexOf("<tbody") < 0 ) tb = div.firstChild && div.firstChild.childNodes; - + // String was a bare <thead> or <tfoot> else if ( wrap[1] == "<table>" && s.indexOf("<tbody") < 0 ) tb = div.childNodes; @@ -656,13 +656,13 @@ jQuery.extend({ for ( var n = tb.length-1; n >= 0 ; --n ) if ( jQuery.nodeName(tb[n], "tbody") && !tb[n].childNodes.length ) tb[n].parentNode.removeChild(tb[n]); - - // IE completely kills leading whitespace when innerHTML is used - if ( /^\s/.test(arg) ) + + // IE completely kills leading whitespace when innerHTML is used + if ( /^\s/.test(arg) ) div.insertBefore( doc.createTextNode( arg.match(/^\s*/)[0] ), div.firstChild ); } - + arg = jQuery.makeArray( div.childNodes ); } @@ -678,7 +678,7 @@ jQuery.extend({ return r; }, - + attr: function(elem, name, value){ var fix = jQuery.isXMLDoc(elem) ? {} : jQuery.props; @@ -686,7 +686,7 @@ jQuery.extend({ // Accessing the parent's selectedIndex property fixes it if ( name == "selected" && jQuery.browser.safari ) elem.parentNode.selectedIndex; - + // Certain attributes only work when accessed via the old DOM 0 way if ( fix[name] ) { if ( value != undefined ) elem[fix[name]] = value; @@ -701,7 +701,7 @@ jQuery.extend({ else if ( elem.tagName ) { if ( value != undefined ) elem.setAttribute( name, value ); - if ( jQuery.browser.msie && /href|src/.test(name) && !jQuery.isXMLDoc(elem) ) + if ( jQuery.browser.msie && /href|src/.test(name) && !jQuery.isXMLDoc(elem) ) return elem.getAttribute( name, 2 ); return elem.getAttribute( name ); @@ -712,14 +712,14 @@ jQuery.extend({ if ( value != undefined ) { // IE has trouble with opacity if it does not have layout // Force it by setting the zoom level - elem.zoom = 1; - + elem.zoom = 1; + // Set the alpha filter to set the opacity elem.filter = (elem.filter || "").replace(/alpha\([^)]*\)/,"") + (parseFloat(value).toString() == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")"); } - - return elem.filter ? + + return elem.filter ? (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100).toString() : ""; } name = name.replace(/-([a-z])/ig,function(z,b){return b.toUpperCase();}); @@ -821,7 +821,7 @@ jQuery.extend({ return result; } }); - + /* * Whether the W3C compliant box model is being used. * @@ -842,13 +842,13 @@ jQuery.browser = { }; var styleFloat = jQuery.browser.msie ? "styleFloat" : "cssFloat"; - + jQuery.extend({ // Check to see if the W3C box model is being used boxModel: !jQuery.browser.msie || document.compatMode == "CSS1Compat", - + styleFloat: jQuery.browser.msie ? "styleFloat" : "cssFloat", - + props: { "for": "htmlFor", "class": "className", @@ -1002,7 +1002,7 @@ jQuery.extend({ // DEPRECATED "[": "jQuery.find(m[2],a).length" }, - + // The regular expressions that power the parsing engine parse: [ // Match: [@value='test'], [@foo] @@ -1106,12 +1106,12 @@ jQuery.extend({ for ( ; n; n = n.nextSibling ) if ( n.nodeType == 1 ) { if ( m == "~" && n.mergeNum == mergeNum ) break; - + if (!nodeName || n.nodeName.toUpperCase() == nodeName.toUpperCase() ) { if ( m == "~" ) n.mergeNum = mergeNum; r.push( n ); } - + if ( m == "+" ) break; } // DEPRECATED @@ -1147,7 +1147,7 @@ jQuery.extend({ // Optimize for the case nodeName#idName var re2 = quickID; var m = re2.exec(t); - + // Re-organize the results, so that they're consistent if ( m ) { m = [ 0, m[2], m[3], m[1] ]; @@ -1167,7 +1167,7 @@ jQuery.extend({ if ( m[1] == "#" && elem && elem.getElementById && !jQuery.isXMLDoc(elem) ) { // Optimization for HTML document case var oid = elem.getElementById(m[2]); - + // Do a quick check for the existence of the actual ID attribute // to avoid selecting by the name attribute in IE // also check to insure id is a string to avoid selecting an element with the name of 'id' inside a form @@ -1286,10 +1286,10 @@ jQuery.extend({ else if ( m[1] == "@" ) { var tmp = [], type = m[3]; - + for ( var i = 0, rl = r.length; i < rl; i++ ) { var a = r[i], z = a[ jQuery.props[m[2]] || m[2] ]; - + if ( z == null || /href|src|selected/.test(m[2]) ) z = jQuery.attr(a,m[2]) || ''; @@ -1301,7 +1301,7 @@ jQuery.extend({ (type == "*=" || type == "~=") && z.indexOf(m[5]) >= 0) ^ not ) tmp.push( a ); } - + r = tmp; // We can get a speed boost by handling nth-child here @@ -1389,7 +1389,7 @@ jQuery.extend({ }); /* * A number of helper functions used for managing events. - * Many of the ideas behind this code orignated from + * Many of the ideas behind this code orignated from * Dean Edwards' addEvent library. */ jQuery.event = { @@ -1401,33 +1401,33 @@ jQuery.event = { // around, causing it to be cloned in the process if ( jQuery.browser.msie && element.setInterval != undefined ) element = window; - + // Make sure that the function being executed has a unique ID if ( !handler.guid ) handler.guid = this.guid++; - - // if data is passed, bind to handler - if( data != undefined ) { - // Create temporary function pointer to original handler - var fn = handler; - - // Create unique handler function, wrapped around original handler - handler = function() { - // Pass arguments and context to original handler - return fn.apply(this, arguments); + + // if data is passed, bind to handler + if( data != undefined ) { + // Create temporary function pointer to original handler + var fn = handler; + + // Create unique handler function, wrapped around original handler + handler = function() { + // Pass arguments and context to original handler + return fn.apply(this, arguments); }; - // Store data in unique handler + // Store data in unique handler handler.data = data; - // Set the guid of unique handler to the same of original handler, so it can be removed + // Set the guid of unique handler to the same of original handler, so it can be removed handler.guid = fn.guid; } // Init the element's event structure if (!element.$events) element.$events = {}; - + if (!element.$handle) element.$handle = function() { // returned undefined or false @@ -1437,9 +1437,9 @@ jQuery.event = { // an event is called after a page has unloaded if ( typeof jQuery == "undefined" || jQuery.event.triggered ) return val; - + val = jQuery.event.handle.apply(element, arguments); - + return val; }; @@ -1448,8 +1448,8 @@ jQuery.event = { // Init the event handler queue if (!handlers) { - handlers = element.$events[type] = {}; - + handlers = element.$events[type] = {}; + // And bind the global event handler to the element if (element.addEventListener) element.addEventListener(type, element.$handle, false); @@ -1477,7 +1477,7 @@ jQuery.event = { handler = type.handler; type = type.type; } - + if ( !type ) { for ( type in events ) this.remove( element, type ); @@ -1486,7 +1486,7 @@ jQuery.event = { // remove the given handler for the given type if ( handler ) delete events[type][handler.guid]; - + // remove all handlers for the given type else for ( handler in element.$events[type] ) @@ -1524,7 +1524,7 @@ jQuery.event = { // Handle triggering a single element } else { var val, ret, fn = jQuery.isFunction( element[ type ] || null ); - + // Pass along a fake event data.unshift( this.fix({ type: type, target: element }) ); @@ -1548,7 +1548,7 @@ jQuery.event = { var val; // Empty object is for triggered events with no data - event = jQuery.event.fix( event || window.event || {} ); + event = jQuery.event.fix( event || window.event || {} ); var c = this.$events && this.$events[event.type], args = Array.prototype.slice.call( arguments, 1 ); args.unshift( event ); @@ -1575,12 +1575,12 @@ jQuery.event = { }, fix: function(event) { - // store a copy of the original event object + // store a copy of the original event object // and clone to set read-only properties var originalEvent = event; event = jQuery.extend({}, originalEvent); - - // add preventDefault and stopPropagation since + + // add preventDefault and stopPropagation since // they will not work on the clone event.preventDefault = function() { // if preventDefault exists run it on the original event @@ -1596,11 +1596,11 @@ jQuery.event = { // otherwise set the cancelBubble property of the original event to true (IE) originalEvent.cancelBubble = true; }; - + // Fix target property, if necessary if ( !event.target && event.srcElement ) event.target = event.srcElement; - + // check if target is a textnode (safari) if (jQuery.browser.safari && event.target.nodeType == 3) event.target = originalEvent.target.parentNode; @@ -1615,11 +1615,11 @@ jQuery.event = { event.pageX = event.clientX + (e && e.scrollLeft || b.scrollLeft || 0); event.pageY = event.clientY + (e && e.scrollTop || b.scrollTop || 0); } - + // Add which for key events if ( !event.which && (event.charCode || event.keyCode) ) event.which = event.charCode || event.keyCode; - + // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) if ( !event.metaKey && event.ctrlKey ) event.metaKey = event.ctrlKey; @@ -1628,7 +1628,7 @@ jQuery.event = { // Note: button is not normalized, so don't use it if ( !event.which && event.button ) event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); - + return event; } }; @@ -1664,31 +1664,31 @@ jQuery.fn.extend({ return this.click(function(e) { // Figure out which function to execute this.lastToggle = 0 == this.lastToggle ? 1 : 0; - + // Make sure that clicks stop e.preventDefault(); - + // and execute the function return a[this.lastToggle].apply( this, [e] ) || false; }); }, hover: function(f,g) { - + // A private function for handling mouse 'hovering' function handleHover(e) { // Check if mouse(over|out) are still within the same parent element var p = e.relatedTarget; - + // Traverse up the tree while ( p && p != this ) try { p = p.parentNode; } catch(e) { p = this; }; - + // If we actually just moused on to a sub-element, ignore it if ( p == this ) return false; - + // Execute the right function return (e.type == "mouseover" ? f : g).apply(this, [e]); } - + // Bind the function to the two event listeners return this.mouseover(handleHover).mouseout(handleHover); }, @@ -1700,12 +1700,12 @@ jQuery.fn.extend({ if ( jQuery.isReady ) // Execute the function immediately f.apply( document, [jQuery] ); - + // Otherwise, remember the function for later else // Add the function to the wait list jQuery.readyList.push( function() { return f.apply(this, [jQuery]); } ); - + return this; } }); @@ -1716,28 +1716,28 @@ jQuery.extend({ */ isReady: false, readyList: [], - + // Handle when the DOM is ready ready: function() { // Make sure that the DOM is not already loaded if ( !jQuery.isReady ) { // Remember that the DOM is ready jQuery.isReady = true; - + // If there are functions bound, to execute if ( jQuery.readyList ) { // Execute all of them jQuery.each( jQuery.readyList, function(){ this.apply( document ); }); - + // Reset the list of functions jQuery.readyList = null; } // Remove event listener to avoid memory leak if ( jQuery.browser.mozilla || jQuery.browser.opera ) document.removeEventListener( "DOMContentLoaded", jQuery.ready, false ); - + // Remove script element used by IE hack if( !window.frames.length ) // don't remove if frames are present (#1187) jQuery(window).load(function(){ jQuery("#__ie_init").remove(); }); @@ -1746,14 +1746,14 @@ jQuery.extend({ }); jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," + - "mousedown,mouseup,mousemove,mouseover,mouseout,change,select," + + "mousedown,mouseup,mousemove,mouseover,mouseout,change,select," + "submit,keydown,keypress,keyup,error").split(","), function(i,o){ - + // Handle event binding jQuery.fn[o] = function(f){ return f ? this.bind(o, f) : this.trigger(o); }; - + }); var readyBound = false; @@ -1766,44 +1766,44 @@ function bindReady(){ if ( jQuery.browser.mozilla || jQuery.browser.opera ) // Use the handy event callback document.addEventListener( "DOMContentLoaded", jQuery.ready, false ); - + // If IE is used, use the excellent hack by Matthias Miller // http://www.outofhanwell.com/blog/index.php?title=the_window_onload_problem_revisited else if ( jQuery.browser.msie ) { - + // Only works if you document.write() it - document.write("<scr" + "ipt id=__ie_init defer=true " + + document.write("<scr" + "ipt id=__ie_init defer=true " + "src=//:><\/script>"); - + // Use the defer script hack var script = document.getElementById("__ie_init"); - + // script does not exist if jQuery is loaded dynamically - if ( script ) + if ( script ) script.onreadystatechange = function() { if ( document.readyState != "complete" ) return; jQuery.ready(); }; - + // Clear from memory script = null; - + // If Safari is used } else if ( jQuery.browser.safari ) // Continually check to see if the document.readyState is valid jQuery.safariTimer = setInterval(function(){ // loaded and complete are both valid states - if ( document.readyState == "loaded" || + if ( document.readyState == "loaded" || document.readyState == "complete" ) { - + // If either one are found, remove the timer clearInterval( jQuery.safariTimer ); jQuery.safariTimer = null; - + // and execute any waiting functions jQuery.ready(); } - }, 10); + }, 10); // A fallback to window.onload, that will always work jQuery.event.add( window, "load", jQuery.ready ); @@ -1883,7 +1883,7 @@ jQuery.extend({ callback = data; data = null; } - + return jQuery.ajax({ type: "GET", url: url, @@ -1934,7 +1934,7 @@ jQuery.extend({ async: true, data: null }, - + // Last-Modified header cache for next request lastModified: {}, ajax: function( s ) { @@ -1986,7 +1986,7 @@ jQuery.extend({ // Allow custom headers/mimetypes if( s.beforeSend ) s.beforeSend(xml); - + if ( s.global ) jQuery.event.trigger("ajaxSend", [xml, s]); @@ -1995,13 +1995,13 @@ jQuery.extend({ // The transfer is complete and the data is available, or the request timed out if ( !requestDone && xml && (xml.readyState == 4 || isTimeout == "timeout") ) { requestDone = true; - + // clear poll interval if (ival) { clearInterval(ival); ival = null; } - + var status = isTimeout == "timeout" && "timeout" || !jQuery.httpSuccess( xml ) && "error" || s.ifModified && jQuery.httpNotModified( xml, s.url ) && "notmodified" || @@ -2024,14 +2024,14 @@ jQuery.extend({ try { modRes = xml.getResponseHeader("Last-Modified"); } catch(e) {} // swallow exception thrown by FF if header is not available - + if ( s.ifModified && modRes ) jQuery.lastModified[s.url] = modRes; - + // If a local callback was specified, fire it and pass it the data if ( s.success ) s.success( data, status ); - + // Fire the global callback if ( s.global ) jQuery.event.trigger( "ajaxSuccess", [xml, s] ); @@ -2055,10 +2055,10 @@ jQuery.extend({ xml = null; } }; - + if ( s.async ) { // don't attach the handler to the request, just poll it instead - var ival = setInterval(onreadystatechange, 13); + var ival = setInterval(onreadystatechange, 13); // Timeout checker if ( s.timeout > 0 ) @@ -2067,24 +2067,24 @@ jQuery.extend({ if ( xml ) { // Cancel the request xml.abort(); - + if( !requestDone ) onreadystatechange( "timeout" ); } }, s.timeout); } - + // Send the data try { xml.send(s.data); } catch(e) { jQuery.handleError(s, xml, null, e); } - + // firefox 1.5 doesn't fire statechange for sync requests if ( !s.async ) onreadystatechange(); - + // return XMLHttpRequest to allow aborting the request etc. return xml; }, @@ -2185,7 +2185,7 @@ jQuery.fn.extend({ this.animate({ height: "show", width: "show", opacity: "show" }, speed, callback) : - + this.filter(":hidden").each(function(){ this.style.display = this.oldblock ? this.oldblock : ""; if ( jQuery.css(this,"display") == "none" ) @@ -2198,7 +2198,7 @@ jQuery.fn.extend({ this.animate({ height: "hide", width: "hide", opacity: "hide" }, speed, callback) : - + this.filter(":visible").each(function(){ this.oldblock = this.oldblock || jQuery.css(this,"display"); if ( this.oldblock == "none" ) @@ -2243,7 +2243,7 @@ jQuery.fn.extend({ var hidden = jQuery(this).is(":hidden"), opt = jQuery.speed(speed, easing, callback), self = this; - + for ( var p in prop ) { if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden ) return jQuery.isFunction(opt.complete) && opt.complete.apply(this); @@ -2261,7 +2261,7 @@ jQuery.fn.extend({ this.style.overflow = "hidden"; this.curAnim = jQuery.extend({}, prop); - + jQuery.each( prop, function(name, val){ var e = new jQuery.fx( self, opt, name ); if ( val.constructor == Number ) @@ -2279,16 +2279,16 @@ jQuery.fn.extend({ fn = type; type = "fx"; } - + return this.each(function(){ if ( !this.queue ) this.queue = {}; - + if ( !this.queue[type] ) this.queue[type] = []; - + this.queue[type].push( fn ); - + if ( this.queue[type].length == 1 ) fn.apply(this); }); @@ -2297,19 +2297,19 @@ jQuery.fn.extend({ }); jQuery.extend({ - + speed: function(speed, easing, fn) { var opt = speed && speed.constructor == Object ? speed : { - complete: fn || !fn && easing || + complete: fn || !fn && easing || jQuery.isFunction( speed ) && speed, duration: speed, easing: fn && easing || easing && easing.constructor != Function && easing }; - opt.duration = (opt.duration && opt.duration.constructor == Number ? - opt.duration : + opt.duration = (opt.duration && opt.duration.constructor == Number ? + opt.duration : { slow: 600, fast: 200 }[opt.duration]) || 400; - + // Queueing opt.old = opt.complete; opt.complete = function(){ @@ -2317,10 +2317,10 @@ jQuery.extend({ if ( jQuery.isFunction( opt.old ) ) opt.old.apply( this ); }; - + return opt; }, - + easing: { linear: function( p, n, firstNum, diff ) { return firstNum + diff * p; @@ -2329,19 +2329,19 @@ jQuery.extend({ return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum; } }, - + queue: {}, - + dequeue: function(elem,type){ type = type || "fx"; - + if ( elem.queue && elem.queue[type] ) { // Remove self elem.queue[type].shift(); - + // Get next function var f = elem.queue[type][0]; - + if ( f ) f.apply( elem ); } }, @@ -2353,14 +2353,14 @@ jQuery.extend({ * of making it small in size the code became illegible to sane * people. You've been warned. */ - + fx: function( elem, options, prop ){ var z = this; // The styles var y = elem.style; - + // Simple function for setting a style value z.a = function(){ if ( options.step ) @@ -2401,7 +2401,7 @@ jQuery.extend({ if ( jQuery.timers.length == 1 ) { var timer = setInterval(function(){ var timers = jQuery.timers; - + for ( var i = 0; i < timers.length; i++ ) if ( !timers[i]() ) timers.splice(i--, 1); @@ -2428,7 +2428,7 @@ jQuery.extend({ // flash of content if ( prop != "opacity" ) y[prop] = "1px"; - + // Start by showing the element jQuery(elem).show(); }; @@ -2465,7 +2465,7 @@ jQuery.extend({ if ( options.display != null ) { // Reset the overflow y.overflow = options.overflow; - + // Reset the display y.display = options.display; if ( jQuery.css(elem, "display") == "none" ) @@ -2492,7 +2492,7 @@ jQuery.extend({ var n = t - this.startTime; // Figure out where in the animation we are and set the number var p = n / options.duration; - + // Perform the easing function, defaults to swing z.now = jQuery.easing[options.easing || (jQuery.easing.swing ? "swing" : "linear")](p, n, firstNum, (lastNum-firstNum), options.duration); @@ -2502,7 +2502,7 @@ jQuery.extend({ return true; }; - + } }); })(); diff --git a/tests/javascript/frameworks/jquery/jquery-1.2.6.js b/tests/javascript/frameworks/jquery/jquery-1.2.6.js index 88e661eec806dc61eb5dfbd08fd0bae8343f96be..2c0443896858b235bb3ef0fbac9ee775207c3c9e 100644 --- a/tests/javascript/frameworks/jquery/jquery-1.2.6.js +++ b/tests/javascript/frameworks/jquery/jquery-1.2.6.js @@ -582,7 +582,7 @@ jQuery.extend = jQuery.fn.extend = function() { // Recurse if we're merging object values if ( deep && copy && typeof copy == "object" && !copy.nodeType ) - target[ name ] = jQuery.extend( deep, + target[ name ] = jQuery.extend( deep, // Never move original objects, clone them src || ( copy.length != null ? [ ] : { } ) , copy ); @@ -2882,7 +2882,7 @@ jQuery.extend({ if ( xml && data.documentElement.tagName == "parsererror" ) throw "parsererror"; - + // Allow a pre-filtering function to sanitize the response if( filter ) data = filter( data, type ); @@ -3469,7 +3469,7 @@ jQuery.fn.extend({ parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset(); // Subtract element margins - // note: when an element has margin: auto the offsetLeft and marginLeft + // note: when an element has margin: auto the offsetLeft and marginLeft // are the same in Safari causing offset.left to incorrectly be 0 offset.top -= num( this, 'marginTop' ); offset.left -= num( this, 'marginLeft' ); @@ -3500,7 +3500,7 @@ jQuery.fn.extend({ // Create scrollLeft and scrollTop methods jQuery.each( ['Left', 'Top'], function(i, name) { var method = 'scroll' + name; - + jQuery.fn[ method ] = function(val) { if (!this[0]) return; diff --git a/tests/javascript/frameworks/jquery/jquery-1.3.2.js b/tests/javascript/frameworks/jquery/jquery-1.3.2.js index 926357433e3e8289757481ee826cee31657982fe..de34b8197bb6f3e206503224d4e8a76717745075 100644 --- a/tests/javascript/frameworks/jquery/jquery-1.3.2.js +++ b/tests/javascript/frameworks/jquery/jquery-1.3.2.js @@ -11,7 +11,7 @@ */ (function(){ -var +var // Will speed up references to window, and allows munging its name. window = this, // Will speed up references to undefined, and allows munging its name. @@ -407,13 +407,13 @@ jQuery.fn = jQuery.prototype = { }, val: function( value ) { - if ( value === undefined ) { + if ( value === undefined ) { var elem = this[0]; if ( elem ) { if( jQuery.nodeName( elem, 'option' ) ) return (elem.attributes.value || {}).specified ? elem.value : elem.text; - + // We need to handle select boxes special if ( jQuery.nodeName( elem, "select" ) ) { var index = elem.selectedIndex, @@ -442,7 +442,7 @@ jQuery.fn = jQuery.prototype = { } } - return values; + return values; } // Everything else, we just grab the value @@ -521,13 +521,13 @@ jQuery.fn = jQuery.prototype = { for ( var i = 0, l = this.length; i < l; i++ ) callback.call( root(this[i], first), this.length > 1 || i > 0 ? fragment.cloneNode(true) : fragment ); - + if ( scripts ) jQuery.each( scripts, evalScript ); } return this; - + function root( elem, cur ) { return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ? (elem.getElementsByTagName("tbody")[0] || @@ -594,7 +594,7 @@ jQuery.extend = jQuery.fn.extend = function() { // Recurse if we're merging object values if ( deep && copy && typeof copy === "object" && !copy.nodeType ) - target[ name ] = jQuery.extend( deep, + target[ name ] = jQuery.extend( deep, // Never move original objects, clone them src || ( copy.length != null ? [ ] : { } ) , copy ); @@ -936,7 +936,7 @@ jQuery.extend({ // IE completely kills leading whitespace when innerHTML is used if ( !jQuery.support.leadingWhitespace && /^\s/.test( elem ) ) div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild ); - + elem = jQuery.makeArray( div.childNodes ); } @@ -957,7 +957,7 @@ jQuery.extend({ fragment.appendChild( ret[i] ); } } - + return scripts; } @@ -1338,16 +1338,16 @@ jQuery.extend({ }, queue: function( elem, type, data ) { if ( elem ){ - + type = (type || "fx") + "queue"; - + var q = jQuery.data( elem, type ); - + if ( !q || jQuery.isArray(data) ) q = jQuery.data( elem, type, jQuery.makeArray(data) ); else if( data ) q.push( data ); - + } return q; }, @@ -1355,10 +1355,10 @@ jQuery.extend({ dequeue: function( elem, type ){ var queue = jQuery.queue( elem, type ), fn = queue.shift(); - + if( !type || type === "fx" ) fn = queue[0]; - + if( fn !== undefined ) fn.call(elem); } @@ -1400,7 +1400,7 @@ jQuery.fn.extend({ return this.each(function(){ var queue = jQuery.queue( this, type, data ); - + if( type == "fx" && queue.length == 1 ) queue[0].call(this); }); @@ -1428,19 +1428,19 @@ var Sizzle = function(selector, context, results, seed) { if ( context.nodeType !== 1 && context.nodeType !== 9 ) return []; - + if ( !selector || typeof selector !== "string" ) { return results; } var parts = [], m, set, checkSet, check, mode, extra, prune = true; - + // Reset the position of the chunker regexp (start from head) chunker.lastIndex = 0; - + while ( (m = chunker.exec(selector)) !== null ) { parts.push( m[1] ); - + if ( m[2] ) { extra = RegExp.rightContext; break; @@ -1554,7 +1554,7 @@ Sizzle.find = function(expr, context, isXML){ for ( var i = 0, l = Expr.order.length; i < l; i++ ) { var type = Expr.order[i], match; - + if ( (match = Expr.match[ type ].exec( expr )) ) { var left = RegExp.leftContext; @@ -1816,7 +1816,7 @@ var Expr = Sizzle.selectors = { }, ATTR: function(match, curLoop, inplace, result, not, isXML){ var name = match[1].replace(/\\/g, ""); - + if ( !isXML && Expr.attrMap[name] ) { match[1] = Expr.attrMap[name]; } @@ -1842,7 +1842,7 @@ var Expr = Sizzle.selectors = { } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { return true; } - + return match; }, POS: function(match){ @@ -1976,20 +1976,20 @@ var Expr = Sizzle.selectors = { if ( first == 1 && last == 0 ) { return true; } - + var doneName = match[0], parent = elem.parentNode; - + if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { var count = 0; for ( node = parent.firstChild; node; node = node.nextSibling ) { if ( node.nodeType === 1 ) { node.nodeIndex = ++count; } - } + } parent.sizcache = doneName; } - + var diff = elem.nodeIndex - last; if ( first == 0 ) { return diff == 0; @@ -2062,7 +2062,7 @@ var makeArray = function(array, results) { results.push.apply( results, array ); return results; } - + return array; }; @@ -2207,7 +2207,7 @@ if ( document.querySelectorAll ) (function(){ if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { return; } - + Sizzle = function(query, context, extra, seed){ context = context || document; @@ -2218,7 +2218,7 @@ if ( document.querySelectorAll ) (function(){ return makeArray( context.querySelectorAll(query), extra ); } catch(e){} } - + return oldSizzle(query, context, extra, seed); }; @@ -2483,7 +2483,7 @@ jQuery.event = { // Get the current list of functions bound to this event var handlers = events[type]; - + if ( jQuery.event.specialAll[type] ) jQuery.event.specialAll[type].setup.call(elem, data, namespaces); @@ -2556,7 +2556,7 @@ jQuery.event = { // Handle the removal of namespaced events if ( namespace.test(events[type][handle].type) ) delete events[type][handle]; - + if ( jQuery.event.specialAll[type] ) jQuery.event.specialAll[type].teardown.call(elem, namespaces); @@ -2623,11 +2623,11 @@ jQuery.event = { // don't do events on text and comment nodes if ( !elem || elem.nodeType == 3 || elem.nodeType == 8 ) return undefined; - + // Clean up in case it is reused event.result = undefined; event.target = elem; - + // Clone the incoming data, if any data = jQuery.makeArray(data); data.unshift( event ); @@ -2668,14 +2668,14 @@ jQuery.event = { event = arguments[0] = jQuery.event.fix( event || window.event ); event.currentTarget = this; - + // Namespaced event handlers var namespaces = event.type.split("."); event.type = namespaces.shift(); // Cache this now, all = true means, any handler all = !namespaces.length && !event.exclusive; - + var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)"); handlers = ( jQuery.data(this, "events") || {} )[event.type]; @@ -2773,7 +2773,7 @@ jQuery.event = { teardown: function() {} } }, - + specialAll: { live: { setup: function( selector, namespaces ){ @@ -2782,12 +2782,12 @@ jQuery.event = { teardown: function( namespaces ){ if ( namespaces.length ) { var remove = 0, name = RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)"); - + jQuery.each( (jQuery.data(this, "events").live || {}), function(){ if ( name.test(this.type) ) remove++; }); - + if ( remove < 1 ) jQuery.event.remove( this, namespaces[0], liveHandler ); } @@ -2800,7 +2800,7 @@ jQuery.Event = function( src ){ // Allow instantiation without the 'new' keyword if( !this.preventDefault ) return new jQuery.Event(src); - + // Event object if( src && src.type ){ this.originalEvent = src; @@ -2812,7 +2812,7 @@ jQuery.Event = function( src ){ // timeStamp is buggy for some events on Firefox(#3843) // So we won't rely on the native value this.timeStamp = now(); - + // Mark it as fixed this[expando] = true; }; @@ -2868,7 +2868,7 @@ var withinElement = function(event) { while ( parent && parent != this ) try { parent = parent.parentNode; } catch(e) { parent = this; } - + if( parent != this ){ // set the correct event type event.type = event.data; @@ -2876,9 +2876,9 @@ var withinElement = function(event) { jQuery.event.handle.apply( this, arguments ); } }; - -jQuery.each({ - mouseover: 'mouseenter', + +jQuery.each({ + mouseover: 'mouseenter', mouseout: 'mouseleave' }, function( orig, fix ){ jQuery.event.special[ fix ] = { @@ -2888,7 +2888,7 @@ jQuery.each({ teardown: function(){ jQuery.event.remove( this, orig, withinElement ); } - }; + }; }); jQuery.fn.extend({ @@ -2927,7 +2927,7 @@ jQuery.fn.extend({ event.stopPropagation(); jQuery.event.trigger( event, data, this[0] ); return event.result; - } + } }, toggle: function( fn ) { @@ -2970,7 +2970,7 @@ jQuery.fn.extend({ return this; }, - + live: function( type, fn ){ var proxy = jQuery.event.proxy( fn ); proxy.guid += this.selector + type; @@ -2979,7 +2979,7 @@ jQuery.fn.extend({ return this; }, - + die: function( type, fn ){ jQuery(document).unbind( liveConvert(type, this.selector), fn ? { guid: fn.guid + this.selector + type } : null ); return this; @@ -3002,7 +3002,7 @@ function liveHandler( event ){ elems.sort(function(a,b) { return jQuery.data(a.elem, "closest") - jQuery.data(b.elem, "closest"); }); - + jQuery.each(elems, function(){ if ( this.fn.call(this.elem, event, this.fn.data) === false ) return (stop = false); @@ -3103,12 +3103,12 @@ jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," + // Prevent memory leaks in IE // And prevent errors on refresh with events like mouseover in other browsers // Window isn't included so as not to unbind existing unload events -jQuery( window ).bind( 'unload', function(){ +jQuery( window ).bind( 'unload', function(){ for ( var id in jQuery.cache ) // Skip the window if ( id != 1 && jQuery.cache[ id ].handle ) jQuery.event.remove( jQuery.cache[ id ].handle.elem ); -}); +}); (function(){ jQuery.support = {}; @@ -3132,32 +3132,32 @@ jQuery( window ).bind( 'unload', function(){ jQuery.support = { // IE strips leading whitespace when .innerHTML is used leadingWhitespace: div.firstChild.nodeType == 3, - + // Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables tbody: !div.getElementsByTagName("tbody").length, - + // Make sure that you can get all elements in an <object> element // IE 7 always returns no results objectAll: !!div.getElementsByTagName("object")[0] .getElementsByTagName("*").length, - + // Make sure that link elements get serialized correctly by innerHTML // This requires a wrapper element in IE htmlSerialize: !!div.getElementsByTagName("link").length, - + // Get the style information from getAttribute // (IE uses .cssText insted) style: /red/.test( a.getAttribute("style") ), - + // Make sure that URLs aren't manipulated // (IE normalizes it by default) hrefNormalized: a.getAttribute("href") === "/a", - + // Make sure that element opacity exists // (IE uses filter instead) opacity: a.style.opacity === "0.5", - + // Verify style float existence // (IE uses styleFloat instead of cssFloat) cssFloat: !!a.style.cssFloat, @@ -3167,14 +3167,14 @@ jQuery( window ).bind( 'unload', function(){ noCloneEvent: true, boxModel: null }; - + script.type = "text/javascript"; try { script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); } catch(e){} root.insertBefore( script, root.firstChild ); - + // Make sure that the execution of code works by injecting a script // tag with appendChild/createTextNode // (IE doesn't support this, fails, and uses .text instead) @@ -3318,7 +3318,7 @@ jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".sp var jsc = now(); jQuery.extend({ - + get: function( url, data, callback, type ) { // shift arguments if data argument was ommited if ( jQuery.isFunction( data ) ) { @@ -3707,7 +3707,7 @@ jQuery.extend({ if ( xml && data.documentElement.tagName == "parsererror" ) throw "parsererror"; - + // Allow a pre-filtering function to sanitize the response // s != null is checked to keep backwards compatibility if( s && s.dataFilter ) @@ -3724,7 +3724,7 @@ jQuery.extend({ if ( type == "json" ) data = window["eval"]("(" + data + ")"); } - + return data; }, @@ -3788,26 +3788,26 @@ jQuery.fn.extend({ } else { for ( var i = 0, l = this.length; i < l; i++ ){ var old = jQuery.data(this[i], "olddisplay"); - + this[i].style.display = old || ""; - + if ( jQuery.css(this[i], "display") === "none" ) { var tagName = this[i].tagName, display; - + if ( elemdisplay[ tagName ] ) { display = elemdisplay[ tagName ]; } else { var elem = jQuery("<" + tagName + " />").appendTo("body"); - + display = elem.css("display"); if ( display === "none" ) display = "block"; - + elem.remove(); - + elemdisplay[ tagName ] = display; } - + jQuery.data(this[i], "olddisplay", display); } } @@ -3817,7 +3817,7 @@ jQuery.fn.extend({ for ( var i = 0, l = this.length; i < l; i++ ){ this[i].style.display = jQuery.data(this[i], "olddisplay") || ""; } - + return this; } }, @@ -3866,11 +3866,11 @@ jQuery.fn.extend({ var optall = jQuery.speed(speed, easing, callback); return this[ optall.queue === false ? "each" : "queue" ](function(){ - + var opt = jQuery.extend({}, optall), p, hidden = this.nodeType == 1 && jQuery(this).is(":hidden"), self = this; - + for ( p in prop ) { if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden ) return opt.complete.call(this); @@ -4125,7 +4125,7 @@ jQuery.fx.prototype = { if ( this.options.hide || this.options.show ) for ( var p in this.options.curAnim ) jQuery.attr(this.elem.style, p, this.options.orig[p]); - + // Execute the complete function this.options.complete.call( this.elem ); } @@ -4179,7 +4179,7 @@ if ( document.documentElement["getBoundingClientRect"] ) left = box.left + (self.pageXOffset || jQuery.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft; return { top: top, left: left }; }; -else +else jQuery.fn.offset = function() { if ( !this[0] ) return { top: 0, left: 0 }; if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] ); @@ -4269,7 +4269,7 @@ jQuery.fn.extend({ parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset(); // Subtract element margins - // note: when an element has margin: auto the offsetLeft and marginLeft + // note: when an element has margin: auto the offsetLeft and marginLeft // are the same in Safari causing offset.left to incorrectly be 0 offset.top -= num( this, 'marginTop' ); offset.left -= num( this, 'marginLeft' ); @@ -4300,7 +4300,7 @@ jQuery.fn.extend({ // Create scrollLeft and scrollTop methods jQuery.each( ['Left', 'Top'], function(i, name) { var method = 'scroll' + name; - + jQuery.fn[ method ] = function(val) { if (!this[0]) return null; @@ -4344,7 +4344,7 @@ jQuery.each([ "Height", "Width" ], function(i, name){ jQuery.css( this[0], lower, false, margin ? "margin" : "border" ) : null; }; - + var type = name.toLowerCase(); jQuery.fn[ type ] = function( size ) { diff --git a/tests/javascript/frameworks/jquery/jquery-1.4.4.js b/tests/javascript/frameworks/jquery/jquery-1.4.4.js index a4f114586ce4468aae29f8f241f145556377307f..c53482c8026496765b068261c85f61ba738f93df 100644 --- a/tests/javascript/frameworks/jquery/jquery-1.4.4.js +++ b/tests/javascript/frameworks/jquery/jquery-1.4.4.js @@ -75,10 +75,10 @@ var jQuery = function( selector, context ) { // For matching the engine and version of the browser browserMatch, - + // Has the ready events already been bound? readyBound = false, - + // The functions to execute on DOM ready readyList = [], @@ -92,7 +92,7 @@ var jQuery = function( selector, context ) { slice = Array.prototype.slice, trim = String.prototype.trim, indexOf = Array.prototype.indexOf, - + // [[Class]] -> type pairs class2type = {}; @@ -111,7 +111,7 @@ jQuery.fn = jQuery.prototype = { this.length = 1; return this; } - + // The body element only exists once, optimize finding it if ( selector === "body" && !context && document.body ) { this.context = document; @@ -150,9 +150,9 @@ jQuery.fn = jQuery.prototype = { ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes; } - + return jQuery.merge( this, selector ); - + // HANDLE: $("#id") } else { elem = document.getElementById( match[2] ); @@ -245,7 +245,7 @@ jQuery.fn = jQuery.prototype = { if ( jQuery.isArray( elems ) ) { push.apply( ret, elems ); - + } else { jQuery.merge( ret, elems ); } @@ -271,7 +271,7 @@ jQuery.fn = jQuery.prototype = { each: function( callback, args ) { return jQuery.each( this, callback, args ); }, - + ready: function( fn ) { // Attach the listeners jQuery.bindReady(); @@ -289,7 +289,7 @@ jQuery.fn = jQuery.prototype = { return this; }, - + eq: function( i ) { return i === -1 ? this.slice( i ) : @@ -314,7 +314,7 @@ jQuery.fn = jQuery.prototype = { return callback.call( elem, i, elem ); })); }, - + end: function() { return this.prevObject || jQuery(null); }, @@ -403,14 +403,14 @@ jQuery.extend({ return jQuery; }, - + // Is the DOM ready to be used? Set to true once it occurs. isReady: false, // A counter to track how many items to wait for before // the ready event fires. See #6781 readyWait: 1, - + // Handle when the DOM is ready ready: function( wait ) { // A third-party is pushing the ready event forwards @@ -454,7 +454,7 @@ jQuery.extend({ } } }, - + bindReady: function() { if ( readyBound ) { return; @@ -473,7 +473,7 @@ jQuery.extend({ if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - + // A fallback to window.onload, that will always work window.addEventListener( "load", jQuery.ready, false ); @@ -482,7 +482,7 @@ jQuery.extend({ // ensure firing before onload, // maybe late but safe also for iframes document.attachEvent("onreadystatechange", DOMContentLoaded); - + // A fallback to window.onload, that will always work window.attachEvent( "onload", jQuery.ready ); @@ -533,20 +533,20 @@ jQuery.extend({ if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { return false; } - + // Not own constructor property must be Object if ( obj.constructor && !hasOwn.call(obj, "constructor") && !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { return false; } - + // Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own. - + var key; for ( key in obj ) {} - + return key === undefined || hasOwn.call( obj, key ); }, @@ -556,11 +556,11 @@ jQuery.extend({ } return true; }, - + error: function( msg ) { throw msg; }, - + parseJSON: function( data ) { if ( typeof data !== "string" || !data ) { return null; @@ -568,7 +568,7 @@ jQuery.extend({ // Make sure leading/trailing whitespace is removed (IE can't handle it) data = jQuery.trim( data ); - + // Make sure the incoming data is actual JSON // Logic borrowed from http://json.org/json2.js if ( rvalidchars.test(data.replace(rvalidescape, "@") @@ -710,7 +710,7 @@ jQuery.extend({ for ( var l = second.length; j < l; j++ ) { first[ i++ ] = second[ j ]; } - + } else { while ( second[j] !== undefined ) { first[ i++ ] = second[ j++ ]; @@ -790,7 +790,7 @@ jQuery.extend({ // The value/s can be optionally by executed if its a function access: function( elems, key, value, exec, fn, pass ) { var length = elems.length; - + // Setting many attributes if ( typeof key === "object" ) { for ( var k in key ) { @@ -798,19 +798,19 @@ jQuery.extend({ } return elems; } - + // Setting one attribute if ( value !== undefined ) { // Optionally, function values get executed if exec is true exec = !pass && exec && jQuery.isFunction(value); - + for ( var i = 0; i < length; i++ ) { fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); } - + return elems; } - + // Getting an attribute return length ? fn( elems[0], key ) : undefined; }, @@ -1115,7 +1115,7 @@ jQuery.extend({ // Please use with caution uuid: 0, - // Unique for each copy of jQuery on the page + // Unique for each copy of jQuery on the page expando: "jQuery" + jQuery.now(), // The following elements throw uncatchable exceptions if you @@ -1607,7 +1607,7 @@ jQuery.fn.extend({ var option = options[ i ]; // Don't return options that are disabled or in a disabled optgroup - if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { // Get the specific value for the option @@ -1630,7 +1630,7 @@ jQuery.fn.extend({ if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) { return elem.getAttribute("value") === null ? "on" : elem.value; } - + // Everything else, we just grab the value return (elem.value || "").replace(rreturn, ""); @@ -1696,7 +1696,7 @@ jQuery.extend({ height: true, offset: true }, - + attr: function( elem, name, value, pass ) { // don't set attributes on text and comment nodes if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { @@ -1865,7 +1865,7 @@ jQuery.event = { var eventKey = elem.nodeType ? "events" : "__events__", events = elemData[ eventKey ], eventHandle = elemData.handle; - + if ( typeof events === "function" ) { // On plain objects events is a fn that holds the the data // which prevents this data from being JSON serialized @@ -1945,9 +1945,9 @@ jQuery.event = { } } } - - if ( special.add ) { - special.add.call( elem, handleObj ); + + if ( special.add ) { + special.add.call( elem, handleObj ); if ( !handleObj.handler.guid ) { handleObj.handler.guid = handler.guid; @@ -1986,7 +1986,7 @@ jQuery.event = { if ( !elemData || !events ) { return; } - + if ( typeof events === "function" ) { elemData = events; events = events.events; @@ -2024,7 +2024,7 @@ jQuery.event = { namespaces = type.split("."); type = namespaces.shift(); - namespace = new RegExp("(^|\\.)" + + namespace = new RegExp("(^|\\.)" + jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)"); } @@ -2186,7 +2186,7 @@ jQuery.event = { isClick = jQuery.nodeName( target, "a" ) && targetType === "click", special = jQuery.event.special[ targetType ] || {}; - if ( (!special._default || special._default.call( elem, event ) === false) && + if ( (!special._default || special._default.call( elem, event ) === false) && !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) { try { @@ -2256,7 +2256,7 @@ jQuery.event = { event.handler = handleObj.handler; event.data = handleObj.data; event.handleObj = handleObj; - + var ret = handleObj.handler.apply( this, args ); if ( ret !== undefined ) { @@ -2355,7 +2355,7 @@ jQuery.event = { add: function( handleObj ) { jQuery.event.add( this, liveConvert( handleObj.origType, handleObj.selector ), - jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) ); + jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) ); }, remove: function( handleObj ) { @@ -2385,7 +2385,7 @@ jQuery.removeEvent = document.removeEventListener ? if ( elem.removeEventListener ) { elem.removeEventListener( type, handle, false ); } - } : + } : function( elem, type, handle ) { if ( elem.detachEvent ) { elem.detachEvent( "on" + type, handle ); @@ -2432,7 +2432,7 @@ jQuery.Event.prototype = { if ( !e ) { return; } - + // if preventDefault exists run it on the original event if ( e.preventDefault ) { e.preventDefault(); @@ -2528,7 +2528,7 @@ if ( !jQuery.support.submitBubbles ) { return trigger( "submit", this, arguments ); } }); - + jQuery.event.add(this, "keypress.specialSubmit", function( e ) { var elem = e.target, type = elem.type; @@ -2590,7 +2590,7 @@ if ( !jQuery.support.changeBubbles ) { if ( e.type !== "focusout" || elem.type !== "radio" ) { jQuery.data( elem, "_change_data", val ); } - + if ( data === undefined || val === data ) { return; } @@ -2604,7 +2604,7 @@ if ( !jQuery.support.changeBubbles ) { jQuery.event.special.change = { filters: { - focusout: testChange, + focusout: testChange, beforedeactivate: testChange, @@ -2675,15 +2675,15 @@ if ( document.addEventListener ) { if ( focusCounts[fix]++ === 0 ) { document.addEventListener( orig, handler, true ); } - }, - teardown: function() { + }, + teardown: function() { if ( --focusCounts[fix] === 0 ) { document.removeEventListener( orig, handler, true ); } } }; - function handler( e ) { + function handler( e ) { e = jQuery.event.fix( e ); e.type = fix; return jQuery.event.trigger( e, null, e.target ); @@ -2700,7 +2700,7 @@ jQuery.each(["bind", "one"], function( i, name ) { } return this; } - + if ( jQuery.isFunction( data ) || data === false ) { fn = data; data = undefined; @@ -2740,20 +2740,20 @@ jQuery.fn.extend({ return this; }, - + delegate: function( selector, types, data, fn ) { return this.live( types, data, fn, selector ); }, - + undelegate: function( selector, types, fn ) { if ( arguments.length === 0 ) { return this.unbind( "live" ); - + } else { return this.die( types, null, fn, selector ); } }, - + trigger: function( type, data ) { return this.each(function() { jQuery.event.trigger( type, data, this ); @@ -2810,12 +2810,12 @@ jQuery.each(["live", "die"], function( i, name ) { var type, i = 0, match, namespaces, preType, selector = origSelector || this.selector, context = origSelector ? this : jQuery( this.context ); - + if ( typeof types === "object" && !types.preventDefault ) { for ( var key in types ) { context[ name ]( key, data, types[key], selector ); } - + return this; } @@ -2862,7 +2862,7 @@ jQuery.each(["live", "die"], function( i, name ) { context.unbind( "live." + liveConvert( type, selector ), fn ); } } - + return this; }; }); @@ -2881,7 +2881,7 @@ function liveHandler( event ) { if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) { return; } - + if ( event.namespace ) { namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)"); } @@ -3029,7 +3029,7 @@ var Sizzle = function( selector, context, results, seed ) { if ( context.nodeType !== 1 && context.nodeType !== 9 ) { return []; } - + if ( !selector || typeof selector !== "string" ) { return results; } @@ -3039,7 +3039,7 @@ var Sizzle = function( selector, context, results, seed ) { contextXML = Sizzle.isXML( context ), parts = [], soFar = selector; - + // Reset the position of the chunker regexp (start from head) do { chunker.exec( "" ); @@ -3047,9 +3047,9 @@ var Sizzle = function( selector, context, results, seed ) { if ( m ) { soFar = m[3]; - + parts.push( m[1] ); - + if ( m[2] ) { extra = m[3]; break; @@ -3073,7 +3073,7 @@ var Sizzle = function( selector, context, results, seed ) { if ( Expr.relative[ selector ] ) { selector += parts.shift(); } - + set = posProcess( selector, set ); } } @@ -3202,7 +3202,7 @@ Sizzle.find = function( expr, context, isXML ) { for ( var i = 0, l = Expr.order.length; i < l; i++ ) { var match, type = Expr.order[i]; - + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { var left = match[1]; match.splice( 1, 1 ); @@ -3518,7 +3518,7 @@ var Expr = Sizzle.selectors = { ATTR: function( match, curLoop, inplace, result, not, isXML ) { var name = match[1].replace(/\\/g, ""); - + if ( !isXML && Expr.attrMap[name] ) { match[1] = Expr.attrMap[name]; } @@ -3549,7 +3549,7 @@ var Expr = Sizzle.selectors = { } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { return true; } - + return match; }, @@ -3559,7 +3559,7 @@ var Expr = Sizzle.selectors = { return match; } }, - + filters: { enabled: function( elem ) { return elem.disabled === false && elem.type !== "hidden"; @@ -3572,12 +3572,12 @@ var Expr = Sizzle.selectors = { checked: function( elem ) { return elem.checked === true; }, - + selected: function( elem ) { // Accessing this property makes selected-by-default // options in Safari work properly elem.parentNode.selectedIndex; - + return elem.selected === true; }, @@ -3703,21 +3703,21 @@ var Expr = Sizzle.selectors = { case "only": case "first": while ( (node = node.previousSibling) ) { - if ( node.nodeType === 1 ) { - return false; + if ( node.nodeType === 1 ) { + return false; } } - if ( type === "first" ) { - return true; + if ( type === "first" ) { + return true; } node = elem; case "last": while ( (node = node.nextSibling) ) { - if ( node.nodeType === 1 ) { - return false; + if ( node.nodeType === 1 ) { + return false; } } @@ -3730,22 +3730,22 @@ var Expr = Sizzle.selectors = { if ( first === 1 && last === 0 ) { return true; } - + var doneName = match[0], parent = elem.parentNode; - + if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { var count = 0; - + for ( node = parent.firstChild; node; node = node.nextSibling ) { if ( node.nodeType === 1 ) { node.nodeIndex = ++count; } - } + } parent.sizcache = doneName; } - + var diff = elem.nodeIndex - last; if ( first === 0 ) { @@ -3764,7 +3764,7 @@ var Expr = Sizzle.selectors = { TAG: function( elem, match ) { return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; }, - + CLASS: function( elem, match ) { return (" " + (elem.className || elem.getAttribute("class")) + " ") .indexOf( match ) > -1; @@ -3830,7 +3830,7 @@ var makeArray = function( array, results ) { results.push.apply( results, array ); return results; } - + return array; }; @@ -4077,7 +4077,7 @@ if ( document.querySelectorAll ) { if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { return; } - + Sizzle = function( query, context, extra, seed ) { context = context || document; @@ -4115,7 +4115,7 @@ if ( document.querySelectorAll ) { } } } - + return oldSizzle(query, context, extra, seed); }; @@ -4137,7 +4137,7 @@ if ( document.querySelectorAll ) { // This should fail with an exception // Gecko does not error, returns false instead matches.call( document.documentElement, "[test!='']:sizzle" ); - + } catch( pseudoError ) { pseudoWorks = true; } @@ -4148,7 +4148,7 @@ if ( document.querySelectorAll ) { expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); if ( !Sizzle.isXML( node ) ) { - try { + try { if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { return matches.call( node, expr ); } @@ -4177,7 +4177,7 @@ if ( document.querySelectorAll ) { if ( div.getElementsByClassName("e").length === 1 ) { return; } - + Expr.order.splice(1, 0, "CLASS"); Expr.find.CLASS = function( match, context, isXML ) { if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { @@ -4228,7 +4228,7 @@ function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { if ( elem ) { var match = false; - + elem = elem[dir]; while ( elem ) { @@ -4281,7 +4281,7 @@ if ( document.documentElement.contains ) { Sizzle.isXML = function( elem ) { // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) + // (such as loading iframes in IE - #4833) var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; return documentElement ? documentElement.nodeName !== "HTML" : false; @@ -4373,7 +4373,7 @@ jQuery.fn.extend({ filter: function( selector ) { return this.pushStack( winnow(this, selector, true), "filter", selector ); }, - + is: function( selector ) { return !!selector && jQuery.filter( selector, this ).length > 0; }, @@ -4391,7 +4391,7 @@ jQuery.fn.extend({ selector = selectors[i]; if ( !matches[selector] ) { - matches[selector] = jQuery.expr.match.POS.test( selector ) ? + matches[selector] = jQuery.expr.match.POS.test( selector ) ? jQuery( selector, context || this.context ) : selector; } @@ -4414,7 +4414,7 @@ jQuery.fn.extend({ return ret; } - var pos = POS.test( selectors ) ? + var pos = POS.test( selectors ) ? jQuery( selectors, context || this.context ) : null; for ( i = 0, l = this.length; i < l; i++ ) { @@ -4435,10 +4435,10 @@ jQuery.fn.extend({ } ret = ret.length > 1 ? jQuery.unique(ret) : ret; - + return this.pushStack( ret, "closest", selectors ); }, - + // Determine the position of an element within // the matched set of elements index: function( elem ) { @@ -4519,7 +4519,7 @@ jQuery.each({ }, function( name, fn ) { jQuery.fn[ name ] = function( until, selector ) { var ret = jQuery.map( this, fn, until ); - + if ( !runtil.test( name ) ) { selector = until; } @@ -4548,7 +4548,7 @@ jQuery.extend({ jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : jQuery.find.matches(expr, elems); }, - + dir: function( elem, dir, until ) { var matched = [], cur = elem[ dir ]; @@ -4770,7 +4770,7 @@ jQuery.fn.extend({ return set; } }, - + // keepData is for internal use only--do not document remove: function( selector, keepData ) { for ( var i = 0, elem; (elem = this[i]) != null; i++ ) { @@ -4785,7 +4785,7 @@ jQuery.fn.extend({ } } } - + return this; }, @@ -4801,7 +4801,7 @@ jQuery.fn.extend({ elem.removeChild( elem.firstChild ); } } - + return this; }, @@ -4952,9 +4952,9 @@ jQuery.fn.extend({ } else { results = jQuery.buildFragment( args, this, scripts ); } - + fragment = results.fragment; - + if ( fragment.childNodes.length === 1 ) { first = fragment = fragment.firstChild; } else { @@ -5062,18 +5062,18 @@ jQuery.each({ var ret = [], insert = jQuery( selector ), parent = this.length === 1 && this[0].parentNode; - + if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) { insert[ original ]( this[0] ); return this; - + } else { for ( var i = 0, l = insert.length; i < l; i++ ) { var elems = (i > 0 ? this.clone(true) : this).get(); jQuery( insert[i] )[ original ]( elems ); ret = ret.concat( elems ); } - + return this.pushStack( ret, name, insert.selector ); } }; @@ -5161,7 +5161,7 @@ jQuery.extend({ for ( i = 0; ret[i]; i++ ) { if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) { scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] ); - + } else { if ( ret[i].nodeType === 1 ) { ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) ); @@ -5173,22 +5173,22 @@ jQuery.extend({ return ret; }, - + cleanData: function( elems ) { var data, id, cache = jQuery.cache, special = jQuery.event.special, deleteExpando = jQuery.support.deleteExpando; - + for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { continue; } id = elem[ jQuery.expando ]; - + if ( id ) { data = cache[ id ]; - + if ( data && data.events ) { for ( var type in data.events ) { if ( special[ type ] ) { @@ -5199,14 +5199,14 @@ jQuery.extend({ } } } - + if ( deleteExpando ) { delete elem[ jQuery.expando ]; } else if ( elem.removeAttribute ) { elem.removeAttribute( jQuery.expando ); } - + delete cache[ id ]; } } @@ -5819,7 +5819,7 @@ jQuery.extend({ data = tmp; jQuery.handleSuccess( s, xhr, status, data ); jQuery.handleComplete( s, xhr, status, data ); - + if ( head ) { head.removeChild( script ); } @@ -6078,19 +6078,19 @@ jQuery.extend({ value = jQuery.isFunction(value) ? value() : value; s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value); }; - + // Set traditional to true for jQuery <= 1.3.2 behavior. if ( traditional === undefined ) { traditional = jQuery.ajaxSettings.traditional; } - + // If an array was passed in, assume that it is an array of form elements. if ( jQuery.isArray(a) || a.jquery ) { // Serialize the form elements jQuery.each( a, function() { add( this.name, this.value ); }); - + } else { // If traditional, encode the "old" way (the way 1.3.2 or older // did it), otherwise encode params recursively. @@ -6123,7 +6123,7 @@ function buildParams( prefix, obj, traditional, add ) { buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add ); } }); - + } else if ( !traditional && obj != null && typeof obj === "object" ) { if ( jQuery.isEmptyObject( obj ) ) { add( prefix, "" ); @@ -6134,7 +6134,7 @@ function buildParams( prefix, obj, traditional, add ) { buildParams( prefix + "[" + k + "]", v, traditional, add ); }); } - + } else { // Serialize scalar item. add( prefix, obj ); @@ -6192,7 +6192,7 @@ jQuery.extend({ jQuery.event.trigger( "ajaxStop" ); } }, - + triggerGlobal: function( s, type, args ) { (s.context && s.context.url == null ? jQuery(s.context) : jQuery.event).trigger(type, args); }, @@ -6815,7 +6815,7 @@ if ( "getBoundingClientRect" in document.documentElement ) { jQuery.fn.offset = function( options ) { var elem = this[0], box; - if ( options ) { + if ( options ) { return this.each(function( i ) { jQuery.offset.setOffset( this, options, i ); }); @@ -6857,7 +6857,7 @@ if ( "getBoundingClientRect" in document.documentElement ) { jQuery.fn.offset = function( options ) { var elem = this[0]; - if ( options ) { + if ( options ) { return this.each(function( i ) { jQuery.offset.setOffset( this, options, i ); }); @@ -6976,7 +6976,7 @@ jQuery.offset = { return { top: top, left: left }; }, - + setOffset: function( elem, options, i ) { var position = jQuery.css( elem, "position" ); @@ -7010,7 +7010,7 @@ jQuery.offset = { if (options.left != null) { props.left = (options.left - curOffset.left) + curLeft; } - + if ( "using" in options ) { options.using.call( elem, props ); } else { @@ -7070,7 +7070,7 @@ jQuery.each( ["Left", "Top"], function( i, name ) { jQuery.fn[ method ] = function(val) { var elem = this[0], win; - + if ( !elem ) { return null; } @@ -7138,7 +7138,7 @@ jQuery.each([ "Height", "Width" ], function( i, name ) { if ( !elem ) { return size == null ? null : this; } - + if ( jQuery.isFunction( size ) ) { return this.each(function( i ) { var self = jQuery( this ); diff --git a/tests/javascript/frameworks/jquery/jquery-1.5.1.js b/tests/javascript/frameworks/jquery/jquery-1.5.1.js index 78fcfa469b3f55b17bb865ceeb760758a84bb8a4..7932fc701956997a1aa8d1aac06372a76118b66a 100644 --- a/tests/javascript/frameworks/jquery/jquery-1.5.1.js +++ b/tests/javascript/frameworks/jquery/jquery-1.5.1.js @@ -3328,7 +3328,7 @@ var Sizzle = function( selector, context, results, seed ) { if ( context.nodeType !== 1 && context.nodeType !== 9 ) { return []; } - + if ( !selector || typeof selector !== "string" ) { return results; } @@ -3338,7 +3338,7 @@ var Sizzle = function( selector, context, results, seed ) { contextXML = Sizzle.isXML( context ), parts = [], soFar = selector; - + // Reset the position of the chunker regexp (start from head) do { chunker.exec( "" ); @@ -3346,9 +3346,9 @@ var Sizzle = function( selector, context, results, seed ) { if ( m ) { soFar = m[3]; - + parts.push( m[1] ); - + if ( m[2] ) { extra = m[3]; break; @@ -3372,7 +3372,7 @@ var Sizzle = function( selector, context, results, seed ) { if ( Expr.relative[ selector ] ) { selector += parts.shift(); } - + set = posProcess( selector, set ); } } @@ -3501,7 +3501,7 @@ Sizzle.find = function( expr, context, isXML ) { for ( var i = 0, l = Expr.order.length; i < l; i++ ) { var match, type = Expr.order[i]; - + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { var left = match[1]; match.splice( 1, 1 ); @@ -3833,7 +3833,7 @@ var Expr = Sizzle.selectors = { ATTR: function( match, curLoop, inplace, result, not, isXML ) { var name = match[1] = match[1].replace( rBackslash, "" ); - + if ( !isXML && Expr.attrMap[name] ) { match[1] = Expr.attrMap[name]; } @@ -3867,7 +3867,7 @@ var Expr = Sizzle.selectors = { } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { return true; } - + return match; }, @@ -3877,7 +3877,7 @@ var Expr = Sizzle.selectors = { return match; } }, - + filters: { enabled: function( elem ) { return elem.disabled === false && elem.type !== "hidden"; @@ -3890,14 +3890,14 @@ var Expr = Sizzle.selectors = { checked: function( elem ) { return elem.checked === true; }, - + selected: function( elem ) { // Accessing this property makes selected-by-default // options in Safari work properly if ( elem.parentNode ) { elem.parentNode.selectedIndex; } - + return elem.selected === true; }, @@ -3918,7 +3918,7 @@ var Expr = Sizzle.selectors = { }, text: function( elem ) { - // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) // use getAttribute instead to test this case return "text" === elem.getAttribute( 'type' ); }, @@ -4025,21 +4025,21 @@ var Expr = Sizzle.selectors = { case "only": case "first": while ( (node = node.previousSibling) ) { - if ( node.nodeType === 1 ) { - return false; + if ( node.nodeType === 1 ) { + return false; } } - if ( type === "first" ) { - return true; + if ( type === "first" ) { + return true; } node = elem; case "last": while ( (node = node.nextSibling) ) { - if ( node.nodeType === 1 ) { - return false; + if ( node.nodeType === 1 ) { + return false; } } @@ -4052,22 +4052,22 @@ var Expr = Sizzle.selectors = { if ( first === 1 && last === 0 ) { return true; } - + var doneName = match[0], parent = elem.parentNode; - + if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { var count = 0; - + for ( node = parent.firstChild; node; node = node.nextSibling ) { if ( node.nodeType === 1 ) { node.nodeIndex = ++count; } - } + } parent.sizcache = doneName; } - + var diff = elem.nodeIndex - last; if ( first === 0 ) { @@ -4086,7 +4086,7 @@ var Expr = Sizzle.selectors = { TAG: function( elem, match ) { return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; }, - + CLASS: function( elem, match ) { return (" " + (elem.className || elem.getAttribute("class")) + " ") .indexOf( match ) > -1; @@ -4152,7 +4152,7 @@ var makeArray = function( array, results ) { results.push.apply( results, array ); return results; } - + return array; }; @@ -4399,7 +4399,7 @@ if ( document.querySelectorAll ) { if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { return; } - + Sizzle = function( query, context, extra, seed ) { context = context || document; @@ -4408,24 +4408,24 @@ if ( document.querySelectorAll ) { if ( !seed && !Sizzle.isXML(context) ) { // See if we find a selector to speed up var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); - + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { // Speed-up: Sizzle("TAG") if ( match[1] ) { return makeArray( context.getElementsByTagName( query ), extra ); - + // Speed-up: Sizzle(".CLASS") } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { return makeArray( context.getElementsByClassName( match[2] ), extra ); } } - + if ( context.nodeType === 9 ) { // Speed-up: Sizzle("body") // The body element only exists once, optimize finding it if ( query === "body" && context.body ) { return makeArray( [ context.body ], extra ); - + // Speed-up: Sizzle("#ID") } else if ( match && match[3] ) { var elem = context.getElementById( match[3] ); @@ -4438,12 +4438,12 @@ if ( document.querySelectorAll ) { if ( elem.id === match[3] ) { return makeArray( [ elem ], extra ); } - + } else { return makeArray( [], extra ); } } - + try { return makeArray( context.querySelectorAll(query), extra ); } catch(qsaError) {} @@ -4481,7 +4481,7 @@ if ( document.querySelectorAll ) { } } } - + return oldSizzle(query, context, extra, seed); }; @@ -4503,7 +4503,7 @@ if ( document.querySelectorAll ) { // This should fail with an exception // Gecko does not error, returns false instead matches.call( document.documentElement, "[test!='']:sizzle" ); - + } catch( pseudoError ) { pseudoWorks = true; } @@ -4514,7 +4514,7 @@ if ( document.querySelectorAll ) { expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); if ( !Sizzle.isXML( node ) ) { - try { + try { if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { return matches.call( node, expr ); } @@ -4543,7 +4543,7 @@ if ( document.querySelectorAll ) { if ( div.getElementsByClassName("e").length === 1 ) { return; } - + Expr.order.splice(1, 0, "CLASS"); Expr.find.CLASS = function( match, context, isXML ) { if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { @@ -4594,7 +4594,7 @@ function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { if ( elem ) { var match = false; - + elem = elem[dir]; while ( elem ) { @@ -4647,7 +4647,7 @@ if ( document.documentElement.contains ) { Sizzle.isXML = function( elem ) { // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) + // (such as loading iframes in IE - #4833) var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; return documentElement ? documentElement.nodeName !== "HTML" : false; @@ -5491,7 +5491,7 @@ jQuery.each({ function getAll( elem ) { if ( "getElementsByTagName" in elem ) { return elem.getElementsByTagName( "*" ); - + } else if ( "querySelectorAll" in elem ) { return elem.querySelectorAll( "*" ); diff --git a/tests/javascript/frameworks/jquery/jquery.json-2.2.js b/tests/javascript/frameworks/jquery/jquery.json-2.2.js index 87f5d0157c801ea16929f8452cde507e9c5f5bcd..04c36895969021ace153b9ef9c60d10489444bb3 100644 --- a/tests/javascript/frameworks/jquery/jquery.json-2.2.js +++ b/tests/javascript/frameworks/jquery/jquery.json-2.2.js @@ -5,15 +5,15 @@ * This document is licensed as free software under the terms of the * MIT License: http://www.opensource.org/licenses/mit-license.php * - * Brantley Harris wrote this plugin. It is based somewhat on the JSON.org + * Brantley Harris wrote this plugin. It is based somewhat on the JSON.org * website's http://www.json.org/json2.js, which proclaims: * "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that * I uphold. * - * It is also influenced heavily by MochiKit's serializeJSON, which is + * It is also influenced heavily by MochiKit's serializeJSON, which is * copyrighted 2005 by Bob Ippolito. */ - + (function($) { /** jQuery.toJSON( json-serializble ) Converts the given argument into a JSON respresentation. @@ -28,26 +28,26 @@ { if (typeof(JSON) == 'object' && JSON.stringify) return JSON.stringify(o); - + var type = typeof(o); - + if (o === null) return "null"; - + if (type == "undefined") return undefined; - + if (type == "number" || type == "boolean") return o + ""; - + if (type == "string") return $.quoteString(o); - + if (type == 'object') { - if (typeof o.toJSON == "function") + if (typeof o.toJSON == "function") return $.toJSON( o.toJSON() ); - + if (o.constructor === Date) { var month = o.getUTCMonth() + 1; @@ -57,26 +57,26 @@ if (day < 10) day = '0' + day; var year = o.getUTCFullYear(); - + var hours = o.getUTCHours(); if (hours < 10) hours = '0' + hours; - + var minutes = o.getUTCMinutes(); if (minutes < 10) minutes = '0' + minutes; - + var seconds = o.getUTCSeconds(); if (seconds < 10) seconds = '0' + seconds; - + var milli = o.getUTCMilliseconds(); if (milli < 100) milli = '0' + milli; if (milli < 10) milli = '0' + milli; return '"' + year + '-' + month + '-' + day + 'T' + - hours + ':' + minutes + ':' + seconds + - '.' + milli + 'Z"'; + hours + ':' + minutes + ':' + seconds + + '.' + milli + 'Z"'; } - if (o.constructor === Array) + if (o.constructor === Array) { var ret = []; for (var i = 0; i < o.length; i++) @@ -84,7 +84,7 @@ return "[" + ret.join(",") + "]"; } - + var pairs = []; for (var k in o) { var name; @@ -96,12 +96,12 @@ name = $.quoteString(k); else continue; //skip non-string or number keys - - if (typeof o[k] == "function") + + if (typeof o[k] == "function") continue; //skip pairs where the value is a function. - + var val = $.toJSON(o[k]); - + pairs.push(name + ":" + val); } @@ -118,7 +118,7 @@ return JSON.parse(src); return eval("(" + src + ")"); }; - + /** jQuery.secureEvalJSON(src) Evals JSON in a way that is *more* secure. **/ @@ -126,12 +126,12 @@ { if (typeof(JSON) == 'object' && JSON.parse) return JSON.parse(src); - + var filtered = src; filtered = filtered.replace(/\\["\\\/bfnrtu]/g, '@'); filtered = filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); filtered = filtered.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); - + if (/^[\],:{}\s]*$/.test(filtered)) return eval("(" + src + ")"); else @@ -139,13 +139,13 @@ }; /** jQuery.quoteString(string) - Returns a string-repr of a string, escaping quotes intelligently. + Returns a string-repr of a string, escaping quotes intelligently. Mostly a support function for toJSON. - + Examples: >>> jQuery.quoteString("apple") "apple" - + >>> jQuery.quoteString('"Where are we going?", she asked.') "\"Where are we going?\", she asked." **/ @@ -153,7 +153,7 @@ { if (string.match(_escapeable)) { - return '"' + string.replace(_escapeable, function (a) + return '"' + string.replace(_escapeable, function (a) { var c = _meta[a]; if (typeof c === 'string') return c; @@ -163,9 +163,9 @@ } return '"' + string + '"'; }; - + var _escapeable = /["\\\x00-\x1f\x7f-\x9f]/g; - + var _meta = { '\b': '\\b', '\t': '\\t', diff --git a/tests/javascript/frameworks/mootools/mootools-1.1.2.js b/tests/javascript/frameworks/mootools/mootools-1.1.2.js index e473cbde761a8a116a61f5d01d7243bffd2f691b..365d2efc775a41e466aaf769adc07d71defa5f2e 100644 --- a/tests/javascript/frameworks/mootools/mootools-1.1.2.js +++ b/tests/javascript/frameworks/mootools/mootools-1.1.2.js @@ -286,7 +286,7 @@ document.head = document.getElementsByTagName('head')[0]; /* Class: window Some properties are attached to the window object by the browser detection. - + Note: browser detection is entirely object-based. We dont sniff. diff --git a/tests/javascript/frameworks/mootools/mootools-1.2.5.js b/tests/javascript/frameworks/mootools/mootools-1.2.5.js index 384c39392f141d9b458d5d57e0736dc628c9724c..40dcdc1903cd710bdf59e89887c4a16902583cc5 100644 --- a/tests/javascript/frameworks/mootools/mootools-1.2.5.js +++ b/tests/javascript/frameworks/mootools/mootools-1.2.5.js @@ -377,7 +377,7 @@ Array.implement({ for (var i = 0, j = array.length; i < j; i++) this.push(array[i]); return this; }, - + getLast: function(){ return (this.length) ? this[this.length - 1] : null; }, @@ -826,9 +826,9 @@ provides: Class */ function Class(params){ - + if (params instanceof Function) params = {initialize: params}; - + var newClass = function(){ Object.reset(this); if (newClass._prototyping) return this; @@ -837,9 +837,9 @@ function Class(params){ delete this._current; delete this.caller; return value; }.extend(this); - + newClass.implement(params); - + newClass.constructor = Class; newClass.prototype.constructor = newClass; @@ -853,14 +853,14 @@ Function.prototype.protect = function(){ }; Object.reset = function(object, key){ - + if (key == null){ for (var p in object) Object.reset(object, p); return object; } - + delete object[key]; - + switch ($type(object[key])){ case 'object': var F = function(){}; @@ -870,9 +870,9 @@ Object.reset = function(object, key){ break; case 'array': object[key] = $unlink(object[key]); break; } - + return object; - + }; new Native({name: 'Class', initialize: Class}).extend({ @@ -883,10 +883,10 @@ new Native({name: 'Class', initialize: Class}).extend({ delete F._prototyping; return proto; }, - + wrap: function(self, key, method){ if (method._origin) method = method._origin; - + return function(){ if (method._protected && this._current == null) throw new Error('The method "' + key + '" cannot be called.'); var caller = this.caller, current = this._current; @@ -897,56 +897,56 @@ new Native({name: 'Class', initialize: Class}).extend({ }.extend({_owner: self, _origin: method, _name: key}); } - + }); Class.implement({ - + implement: function(key, value){ - + if ($type(key) == 'object'){ for (var p in key) this.implement(p, key[p]); return this; } - + var mutator = Class.Mutators[key]; - + if (mutator){ value = mutator.call(this, value); if (value == null) return this; } - + var proto = this.prototype; switch ($type(value)){ - + case 'function': if (value._hidden) return this; proto[key] = Class.wrap(this, key, value); break; - + case 'object': var previous = proto[key]; if ($type(previous) == 'object') $mixin(previous, value); else proto[key] = $unlink(value); break; - + case 'array': proto[key] = $unlink(value); break; - + default: proto[key] = value; } - + return this; } - + }); Class.Mutators = { - + Extends: function(parent){ this.parent = parent; @@ -967,7 +967,7 @@ Class.Mutators = { }, this); } - + }; @@ -1407,16 +1407,16 @@ Document.implement({ getWindow: function(){ return this.window; }, - + id: (function(){ - + var types = { string: function(id, nocash, doc){ id = doc.getElementById(id); return (id) ? types.element(id, nocash) : null; }, - + element: function(el, nocash){ $uid(el); if (!nocash && !el.$family && !(/^object|embed$/i).test(el.tagName)){ @@ -1425,16 +1425,16 @@ Document.implement({ }; return el; }, - + object: function(obj, nocash, doc){ if (obj.toElement) return types.element(obj.toElement(doc), nocash); return null; } - + }; types.textnode = types.whitespace = types.window = types.document = $arguments(0); - + return function(el, nocash, doc){ if (el && el.$family && el.uid) return el; var type = $type(el); @@ -1525,7 +1525,7 @@ var clean = function(item, retain){ } Element.dispose(item); } - } + } if (!uid) return; collected[uid] = storage[uid] = null; }; @@ -1748,7 +1748,7 @@ Element.implement({ getParents: function(match, nocash){ return walk(this, 'parentNode', null, match, true, nocash); }, - + getSiblings: function(match, nocash){ return this.getParent().getChildren(match, nocash).erase(this); }, @@ -3601,7 +3601,7 @@ var JSON = new Hash(this.JSON && { stringify: JSON.stringify, parse: JSON.parse }).extend({ - + $specialChars: {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'}, $replaceChars: function(chr){ @@ -3779,7 +3779,7 @@ Element.Events.domready = { window.fireEvent('domready'); document.fireEvent('domready'); }; - + window.addEvent('load', domready); if (Browser.Engine.trident){ @@ -4089,7 +4089,7 @@ Selectors.Pseudo = new Hash({ checked: function(){ return this.checked; }, - + empty: function(){ return !(this.innerText || this.textContent || '').length; }, @@ -4166,11 +4166,11 @@ Selectors.Pseudo = new Hash({ odd: function(argument, local){ return Selectors.Pseudo['nth-child'].call(this, '2n', local); }, - + selected: function(){ return this.selected; }, - + enabled: function(){ return (this.disabled === false); } diff --git a/tests/javascript/frameworks/mootools/mootools-1.3.1.js b/tests/javascript/frameworks/mootools/mootools-1.3.1.js index 9c83aa130ae3f957bdb2da482bacd972658eb421..76f0c41c50f9c33a86b509b6f7097a53de4434fa 100644 --- a/tests/javascript/frameworks/mootools/mootools-1.3.1.js +++ b/tests/javascript/frameworks/mootools/mootools-1.3.1.js @@ -167,7 +167,7 @@ var Type = this.Type = function(name, object){ object.prototype.$family = (function(){ return lower; }).hide(); - + } } @@ -203,7 +203,7 @@ var implement = function(name, method){ if (typeOf(hook) == 'type') implement.call(hook, name, method); else hook.call(this, name, method); } - + var previous = this.prototype[name]; if (previous == null || !previous.$protected) this.prototype[name] = method; @@ -744,14 +744,14 @@ Function.implement({ try { return this.apply(bind, Array.from(args)); } catch (e){} - + return null; }, bind: function(bind){ var self = this, args = (arguments.length > 1) ? Array.slice(arguments, 1) : null; - + return function(){ if (!args && !arguments.length) return self.call(bind); if (args && arguments.length) return self.apply(bind, args.concat(Array.from(arguments))); @@ -1407,7 +1407,7 @@ this.Events = new Class({ addEvent: function(type, fn, internal){ type = removeOn(type); - + this.$events[type] = (this.$events[type] || []).include(fn); if (internal) fn.internal = true; @@ -1430,7 +1430,7 @@ this.Events = new Class({ }, this); return this; }, - + removeEvent: function(type, fn){ type = removeOn(type); var events = this.$events[type]; @@ -1785,7 +1785,7 @@ local.setDocument = function(document){ var selected, id = 'slick_uniqueid'; var testNode = document.createElement('div'); - + var testRoot = document.body || document.getElementsByTagName('body')[0] || root; testRoot.appendChild(testNode); @@ -1836,7 +1836,7 @@ local.setDocument = function(document){ features.brokenGEBCN = cachedGetElementsByClassName || brokenSecondClassNameGEBCN; } - + if (testNode.querySelectorAll){ // IE 8 returns closed nodes (EG:"</foo>") for querySelectorAll('*') for some documents try { @@ -1962,7 +1962,7 @@ var reSimpleSelector = /^([#.]?)((?:[\w-]+|\*))$/, local.search = function(context, expression, append, first){ var found = this.found = (first) ? null : (append || []); - + if (!context) return found; else if (context.navigator) context = context.document; // Convert the node from a window to a document else if (!context.nodeType) return found; @@ -2256,7 +2256,7 @@ local.matchNode = function(node, selector){ return this.nativeMatchesSelector.call(node, selector.replace(/\[([^=]+)=\s*([^'"\]]+?)\s*\]/g, '[$1="$2"]')); } catch(matchError) {} } - + var parsed = this.Slick.parse(selector); if (!parsed) return true; @@ -2335,7 +2335,7 @@ var combinators = { this.push(item, tag, null, classes, attributes, pseudos); break; } - } + } return; } if (!item){ @@ -2544,7 +2544,7 @@ var pseudos = { 'root': function(node){ return (node === this.root); }, - + 'selected': function(node){ return node.selected; } @@ -2573,7 +2573,7 @@ local.attributeGetters = { 'style': function(){ return (this.style) ? this.style.cssText : this.getAttribute('style'); }, - + 'tabindex': function(){ var attributeNode = this.getAttributeNode('tabindex'); return (attributeNode && attributeNode.specified) ? attributeNode.nodeValue : null; @@ -3941,7 +3941,7 @@ Element.implement({ x: offset.x - scroll.x, y: offset.y - scroll.y }; - + if (relative && (relative = document.id(relative))){ var relativePosition = relative.getPosition(); return {x: position.x - relativePosition.x - leftBorder(relative), y: position.y - relativePosition.y - topBorder(relative)}; @@ -4135,7 +4135,7 @@ var Fx = this.Fx = new Class({ } else { this.frame++; } - + if (this.frame < this.frames){ var delta = this.transition(this.frame / this.frames); this.set(this.compute(this.from, this.to, delta)); @@ -4178,7 +4178,7 @@ var Fx = this.Fx = new Class({ pushInstance.call(this, fps); return this; }, - + stop: function(){ if (this.isRunning()){ this.time = null; @@ -4192,7 +4192,7 @@ var Fx = this.Fx = new Class({ } return this; }, - + cancel: function(){ if (this.isRunning()){ this.time = null; @@ -4202,7 +4202,7 @@ var Fx = this.Fx = new Class({ } return this; }, - + pause: function(){ if (this.isRunning()){ this.time = null; @@ -4210,12 +4210,12 @@ var Fx = this.Fx = new Class({ } return this; }, - + resume: function(){ if ((this.frame < this.frames) && !this.isRunning()) pushInstance.call(this, this.options.fps); return this; }, - + isRunning: function(){ var list = instances[this.options.fps]; return list && list.contains(this); @@ -4778,7 +4778,7 @@ var Request = this.Request = new Class({ xhr.onreadystatechange = empty; if (progressSupport) xhr.onprogress = xhr.onloadstart = empty; clearTimeout(this.timer); - + this.response = {text: this.xhr.responseText || '', xml: this.xhr.responseXML}; if (this.options.isSuccess.call(this, this.status)) this.success(this.response.text, this.response.xml); @@ -4815,15 +4815,15 @@ var Request = this.Request = new Class({ onFailure: function(){ this.fireEvent('complete').fireEvent('failure', this.xhr); }, - + loadstart: function(event){ this.fireEvent('loadstart', [event, this.xhr]); }, - + progress: function(event){ this.fireEvent('progress', [event, this.xhr]); }, - + timeout: function(){ this.fireEvent('timeout', this.xhr); }, @@ -4847,7 +4847,7 @@ var Request = this.Request = new Class({ } return false; }, - + send: function(options){ if (!this.check(options)) return this; @@ -4883,7 +4883,7 @@ var Request = this.Request = new Class({ } if (!url) url = document.location.pathname; - + var trimPosition = url.lastIndexOf('/'); if (trimPosition > -1 && (trimPosition = url.indexOf('#')) > -1) url = url.substr(0, trimPosition); @@ -4903,7 +4903,7 @@ var Request = this.Request = new Class({ xhr.open(method.toUpperCase(), url, this.options.async, this.options.user, this.options.password); if (this.options.user && 'withCredentials' in xhr) xhr.withCredentials = true; - + xhr.onreadystatechange = this.onStateChange.bind(this); Object.each(this.headers, function(value, key){ @@ -5300,7 +5300,7 @@ var domready = function(){ if (ready) return; Browser.loaded = ready = true; document.removeListener('DOMContentLoaded', domready).removeListener('readystatechange', check); - + document.fireEvent('domready'); window.fireEvent('domready'); }; @@ -5362,7 +5362,7 @@ Element.Events.load = { domready(); delete Element.Events.load; } - + return true; } }; diff --git a/tests/javascript/frameworks/yui/yui-3.3.0.js b/tests/javascript/frameworks/yui/yui-3.3.0.js index 8fcf8ea315d423d6ab9f5518e2510c574a469e84..78b00d855a7d52b3c6d1f7058f34bd3bfa2eec5b 100644 --- a/tests/javascript/frameworks/yui/yui-3.3.0.js +++ b/tests/javascript/frameworks/yui/yui-3.3.0.js @@ -2621,7 +2621,7 @@ O.isEmpty = function(o) { * @returns {Object} The Y.UA object */ YUI.Env.parseUA = function(subUA) { - + var numberify = function(s) { var c = 0; return parseFloat(s.replace(/\./g, function() { @@ -3737,7 +3737,7 @@ add('load', '0', { // no point loading the -keys module even when a bluetooth keyboard may be // available. return !(Y.UA.ios || Y.UA.android); -}, +}, "trigger": "autocomplete-list" }); // ie-style-test.js @@ -3767,12 +3767,12 @@ add('load', '1', { !testFeature('style', 'computedStyle')); return ret; -}, +}, "trigger": "dom-style" }); // 0 add('load', '2', { - "trigger": "widget-base", + "trigger": "widget-base", "ua": "ie" }); // ie-base-test.js @@ -3780,14 +3780,14 @@ add('load', '3', { "test": function(Y) { var imp = Y.config.doc && Y.config.doc.implementation; return (imp && (!imp.hasFeature('Events', '2.0'))); -}, +}, "trigger": "node-base" }); // dd-gestures-test.js add('load', '4', { "test": function(Y) { return (Y.config.win && ('ontouchstart' in Y.config.win && !Y.UA.chrome)); -}, +}, "trigger": "dd-drag" }); // history-hash-ie-test.js @@ -3797,7 +3797,7 @@ add('load', '5', { return Y.UA.ie && (!('onhashchange' in Y.config.win) || !docMode || docMode < 8); -}, +}, "trigger": "history-hash" }); diff --git a/tests/javascript/jash/Jash.css b/tests/javascript/jash/Jash.css index a9d3838926e43e8eccb92422a969e2862452dbaa..4bb5a50c0b2e519e862acd46eba7655efb8f9be3 100644 --- a/tests/javascript/jash/Jash.css +++ b/tests/javascript/jash/Jash.css @@ -9,12 +9,12 @@ * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. @@ -60,7 +60,7 @@ color: white !important; position: absolute; background: #bbb; - width: 20px; + width: 20px; text-align: center; display: block; right: 3px; _right: 1px; @@ -70,7 +70,7 @@ cursor: pointer; } a.JashXButton:hover { - background: #ddd; + background: #ddd; } #JashTextareaWrap { width: 100%; @@ -89,7 +89,7 @@ html>body #JashTextareaWrap { PADDING: 2px; height: 60%; height: expression(parseInt(this.parentNode.parentNode.offsetHeight * (3/5)) + 'px'); - + } #JashInput { padding: 2px; diff --git a/tests/javascript/jash/Jash.js b/tests/javascript/jash/Jash.js index f3ef8abc5e7aba73203df10523c983f46fcbc848..45fb379deb6cc8cc46577b844fbacaee2c11c7b8 100644 --- a/tests/javascript/jash/Jash.js +++ b/tests/javascript/jash/Jash.js @@ -2,24 +2,24 @@ function Jash() { /* location of source code (used to find css file) */ this.jashRoot = "http://www.billyreisinger.com/jash/source/latest/"; - /* functions that take element ids or class names as pricincipal arguments */ + /* functions that take element ids or class names as pricincipal arguments */ this.domGetElFunctions = { id: new Array("document.getElementById","$"), className: new Array("getElementsByClassName","$C") }; - + /* output line separator for major blocks of content */ var line = "-------------------------------------------------"; - + /* this is returned by internal methods to avoid printing null output */ - var _null = "nooutput"; + var _null = "nooutput"; var self = this; this.version = "1.35.7"; this.versionDate = "2009/09/05 09:10"; - + /** - * Set environment, create HTML + * Set environment, create HTML */ this.main = function() { this.browser = this.returnBrowserType(); /* User's browser type */ @@ -47,7 +47,7 @@ function Jash() { this.defaultText += line + "\n" + this.tips[(parseInt((Math.random()*10)%this.tips.length))] + "\n" + line + "\n"; this.loopOnDomInserts(); } - + this.loopOnDomInserts = function() { try { self.testDomInsert(); @@ -62,7 +62,7 @@ function Jash() { self.doDomInserts(); self.finishInit(); } - + this.testDomInsert = function() { document.body.appendChild(document.createElement("em")).id = "JashTestElement"; } @@ -70,18 +70,18 @@ function Jash() { /* create tab complete object */ Jash.TabComplete.prototype = this; this.tabComplete = new Jash.TabComplete(); - + /* create new evaluation instance */ Jash.Evaluator.prototype = this; - this.evaluation = new Jash.Evaluator(); - + this.evaluation = new Jash.Evaluator(); + /* create new history object */ this.history = new Jash.History(); window.setTimeout(function() { self.input.focus(); },500); } - + /** * Import stylesheet and insert dom nodes */ @@ -98,7 +98,7 @@ function Jash() { */ self.create(); } - + /** * return string representing browser type */ @@ -129,11 +129,11 @@ function Jash() { return "linux"; } } - + /** - * return access key text based on what browser we're using. Access keys are - * different for every browser, and even between the same browsers on - * different platforms. + * return access key text based on what browser we're using. Access keys are + * different for every browser, and even between the same browsers on + * different platforms. */ this.getAccessKeyText = function() { var txt; @@ -142,17 +142,17 @@ function Jash() { case "ie": txt = "Alt"; break; - case "ff": + case "ff": /* FF/Win = alt/shift; FF/Mac = ctrl; FF/Linux/x86 = alt */ if (agt == "mac") { txt = "Ctrl"; - } else if(agt == "linux") { + } else if(agt == "linux") { txt = "Alt"; - } else { + } else { txt = "Alt-Shift"; } break; - case "op": + case "op": txt = "Shift-Esc"; break; case "sa": @@ -168,9 +168,9 @@ function Jash() { } return txt; } - - - + + + /** * Print simple output to the console * @param {string} text text to print @@ -181,7 +181,7 @@ function Jash() { this.print = function(text,clear,suppressLineNumbers,autoscroll) { clear = (typeof clear != "undefined") ? clear : false; autoscroll = (typeof autoscroll != "undefined") ? autoscroll : true; - + if(this.output == null || document.getElementById("JashParent") == null) { this.create(); this.output = document.getElementById("JashOutput"); @@ -211,7 +211,7 @@ function Jash() { this.print(line,false,true); var out = ""; this.lineNumber = 0; - + for(var p in obj) { if(typeof obj[p] == "function") { var t = obj[p].toString(); @@ -228,7 +228,7 @@ function Jash() { this.output.scrollTop = this.output.scrollHeight; return _null; } - + /** * Dump - show verbose output of all of an object's members * @param {object} obj object whose members should be dumped @@ -251,10 +251,10 @@ function Jash() { out.push(++this.lineNumber + ". " + obj[i]); } } - this.print(out.join("\n"),false,true); + this.print(out.join("\n"),false,true); this.print(line,false,true); this.output.scrollTop = this.output.scrollHeight; - } + } return _null; } /** @@ -266,7 +266,7 @@ function Jash() { this.input.focus(); return _null; } - + /** * Shows everything that has gone in the output console during this session */ @@ -274,9 +274,9 @@ function Jash() { this.outputHistory.push(this.output.value); this.dump(this.outputHistory); } - - - + + + /** * Map input keystrokes * @param {int} keyCode number representing keycode of key pressed in event object @@ -306,7 +306,7 @@ function Jash() { return false; } } - + /** * Get the Y scrolling offset of the current page for whatever browser * @returns {int} Y scrolling offset of current page @@ -331,9 +331,9 @@ function Jash() { /* Temporary variables to hold mouse x-y pos.s */ var tempX = 0 var tempY = 0 - + /* IE */ - if (window.event) { + if (window.event) { /* doctype present in IE6/7 */ if(document.documentElement && document.documentElement.scrollTop) { tempX = window.event.clientX + document.documentElement.scrollLeft; @@ -345,8 +345,8 @@ function Jash() { } else { /* grab the x-y pos.s if browser is NS */ tempX = e.pageX; tempY = e.pageY; - } - + } + return {x:tempX,y:tempY}; } /** @@ -386,7 +386,7 @@ function Jash() { * @returns {array} [x,y] offset of html element 'obj' */ this.findElementPosition = function(obj) { - var curleft = 0 ; + var curleft = 0 ; var curtop = 0; if (obj.offsetParent) { curleft = obj.offsetLeft @@ -398,7 +398,7 @@ function Jash() { } return [curleft,curtop]; } - + /** * Create HTML necessary for Debugger, assign events to buttons and window */ @@ -408,11 +408,11 @@ function Jash() { return; } var self = this; - + /* outermost container */ var debugParent = document.createElement("div"); var windowScrollY = 0; - + if (document.documentElement && document.documentElement.scrollTop) { windowScrollY = document.documentElement.scrollTop; } else if (document.body) { @@ -422,7 +422,7 @@ function Jash() { } debugParent.style.top = windowScrollY + 50 + "px"; debugParent.id = "JashParent"; - + /* close on ESC key press */ this.addEvent(document,"keydown", function(e) { e = (typeof window.event != "undefined") ? window.event : e; @@ -433,32 +433,32 @@ function Jash() { } } }); - + /* WRAPPERS FOR TEXTAREAS */ var textareaWrap = document.createElement("div"); textareaWrap.id = "JashTextareaWrap"; - - + + /* OUTPUT FIELD */ var debugOutput = document.createElement("textarea"); debugOutput.id = "JashOutput"; debugOutput.wrap = "off"; debugOutput.readOnly = "true"; debugOutput.value = this.defaultText; - + /* INPUT FIELD */ var inp = document.createElement("textarea"); inp.id = "JashInput"; var last = ""; - - - /* listen for certain keystrokes, map them */ + + + /* listen for certain keystrokes, map them */ inp.onkeydown = function(e) { e = (typeof window.event != "undefined") ? window.event : e; return self.assignInputKeyEvent(e); } /* Supress certain keystrokes */ - inp.onkeypress = function(e) { + inp.onkeypress = function(e) { e = (typeof window.event != "undefined") ? window.event : e; var k = e.keyCode; /* suppress certain key strokes */ @@ -474,7 +474,7 @@ function Jash() { return false; } } - + /* DRAG / TITLE BAR */ var dragBut = document.createElement("div"); dragBut.innerHTML = "Jash"; @@ -483,7 +483,7 @@ function Jash() { e = (typeof window.event != "undefined") ? window.event : e; var xplus = (typeof e.layerX == "undefined") ? e.offsetX : e.layerX; var yplus = (typeof e.layerY == "undefined") ? e.offsetY : e.layerY; - document.onmousemove = function(e) { + document.onmousemove = function(e) { var coords = self.getMouseXY(e); document.getElementById("JashParent").style.top = coords.y - yplus + "px"; document.getElementById("JashParent").style.left = coords.x - xplus + "px"; @@ -495,7 +495,7 @@ function Jash() { }; /* cancel click event to prevent text selection */ dragBut.onclick = function() { return false; } - + /** * BUTTONS */ @@ -508,7 +508,7 @@ function Jash() { self.close(); return false; } - + /* CLEAR BUTTON */ var clearBut = document.createElement("a"); clearBut.innerHTML = "Clear (" + this.accessKeyText + "-C)"; @@ -519,7 +519,7 @@ function Jash() { return false; } this.setCrossBrowserAccessKeyFunctionForAnchor(clearBut); - + /* EVALUATE BUTTON */ var evalBut = document.createElement("a"); evalBut.value = "Evaluate (" + this.accessKeyText + "-Z)"; @@ -536,7 +536,7 @@ function Jash() { return false; } this.setCrossBrowserAccessKeyFunctionForAnchor(evalBut); - + /* HELP BUTTON */ var helpBut = document.createElement("a"); helpBut.innerHTML = "Help"; @@ -545,7 +545,7 @@ function Jash() { helpBut.onclick = function() { self.help(); } - + /* DOM BUTTON */ var domBut = document.createElement("a"); domBut.innerHTML = "Mouseover DOM (" + this.accessKeyText + "-X)"; @@ -570,7 +570,7 @@ function Jash() { return _null; } this.setCrossBrowserAccessKeyFunctionForAnchor(domBut); - + /* INNER HTML INSPECT BUTTON */ var innerHtmlInspectBut = document.createElement("a"); innerHtmlInspectBut.innerHTML = "innerHTML Dump (" + this.accessKeyText + "-A)"; @@ -585,7 +585,7 @@ function Jash() { return _null; } this.setCrossBrowserAccessKeyFunctionForAnchor(innerHtmlInspectBut); - + /* CSS BUTTON */ var cssBut = document.createElement("a"); cssBut.innerHTML = "CSS Input (" + this.accessKeyText + "-S)"; @@ -614,7 +614,7 @@ function Jash() { return _null; } this.setCrossBrowserAccessKeyFunctionForAnchor(cssBut); - + /* RESIZE BUTTON */ var resizeBut = document.createElement("div"); resizeBut.id = "JashResizeButton"; @@ -629,8 +629,8 @@ function Jash() { if(newWidth < self.minDims.x) { newWidth = self.minDims.x; } textareaWrap.style.width = newWidth + "px"; debugParent.style.width = newWidth + "px"; - - + + var newHeight = originalDims.y + (newMouseDims.y - originMouseDims.y); if(newHeight < self.minDims.y) { newHeight = self.minDims.y; } textareaWrap.style.height = newHeight + "px"; @@ -640,16 +640,16 @@ function Jash() { document.onmousemove = ""; } } - - + + var bottomBar = document.createElement("div"); bottomBar.id = "JashBottomBar"; - + /* append nodes to DOM */ - + debugParent.appendChild(dragBut); debugParent.appendChild(xBut); - + bottomBar.appendChild(evalBut); bottomBar.appendChild(cssBut); bottomBar.appendChild(domBut); @@ -657,27 +657,27 @@ function Jash() { bottomBar.appendChild(clearBut); bottomBar.appendChild(helpBut); debugParent.appendChild(bottomBar); - + debugParent.appendChild(resizeBut); document.body.appendChild(debugParent); - + /* the textareas should be last to get w/h calculated correctly */ textareaWrap.appendChild(debugOutput); textareaWrap.appendChild(inp); debugParent.appendChild(textareaWrap); - + this.bottomBar = document.getElementById("JashBottomBar"); this.dragBar = document.getElementById("JashDragBar") this.output = document.getElementById("JashOutput"); this.input = document.getElementById("JashInput"); this.mainBlock = debugParent; - - /* When user scrolls page, move debug window, too */ + + /* When user scrolls page, move debug window, too */ this.addEvent(window,'scroll',function() { debugParent.style.top = 50 + self.getXBrowserYOffset() + 'px'; }); } - + /** * set the visual state of a button * @param {HTML Element} button element to change visual state of @@ -722,9 +722,9 @@ function Jash() { out.push("press " + this.accessKeyText + "-A to activate/deactivate innerHTML dump (only works w/ DOM inspector)"); out.push("press " + this.accessKeyText + "-C to clear output and input"); out.push("press " + this.accessKeyText + "-S to turn on/off CSS input mode. In CSS input mode, you can enter arbitrary CSS selectors and rules, as you would normally do in a CSS stylesheet."); - + this.print(out.join("\n")); - + return _null; } /** @@ -738,7 +738,7 @@ function Jash() { this.mainBlock.style.display = "none"; } } - + /** * Cross-browser access key * @param {HTML Element} el element to simulate access key event on @@ -756,9 +756,9 @@ function Jash() { self.input.focus(); } } - + } - + /** * Time execution in ms */ @@ -770,7 +770,7 @@ function Jash() { * Start the timer * @returns {int} epoch time in ms */ - start: function() { + start: function() { t_start = new Date().getTime(); return t_start; }, @@ -784,8 +784,8 @@ function Jash() { return (t_total); } } - - + + /** * DOM inspection: Show parent node structure, and possibly innerHTML, of node * under mouse cursor. @@ -796,10 +796,10 @@ function Jash() { var el = typeof e.target == "undefined" ? e.srcElement : e.target; /* store first node for later use */ this.currentNode = el; - + /* see what first node is */ var childMost = this.identifyNode(el,false); - + /* step through parent nodes */ var out = ""; var childmostTxt = "childmost..... " + childMost.txt + "\n"; @@ -821,7 +821,7 @@ function Jash() { this.print(this.currentNode.innerHTML,false,true,false); } } - + if(!this.evaluation.cssEvalFlag) { if(childMost.id != "") { if(typeof $ != "undefined") { @@ -830,26 +830,26 @@ function Jash() { this.input.value = 'document.getElementById("' + childMost.id + '")'; } } else { - + this.input.value = "this.currentNode"; } } } - + /** * Return a string containing information about HTML element 'el' - node name, id, class, etc. * @param {HTML Element} el Element to inspect * @param {bool} showDots precede returned text with dots * @returns {object} {txt: string <node class="" id="">,id: string elementId} */ - this.identifyNode = function(el,showDots) { + this.identifyNode = function(el,showDots) { showDots = typeof showDots == "boolean" ? showDots : true; - + var out = { txt: "", id: "" }; - + if(showDots) out.txt += ".............. "; out.txt += "<" + el.nodeName.toLowerCase(); if(el.id != "") { @@ -865,9 +865,9 @@ function Jash() { if(el.href) { out.txt += ' href="' + el.href + '"'; } - + out.txt += ">"; - + return out; } /** @@ -879,7 +879,7 @@ function Jash() { } /** * Class to evaluate input text as javascript or CSS -* @class Jash.Evaluator +* @class Jash.Evaluator * @inherits Jash * @returns {object} a new copy of Evaluator */ @@ -887,7 +887,7 @@ Jash.Evaluator = function() { /* are we in CSS-edit mode? bool */ this.cssEvalFlag = false; /* this is returned by internal methods to avoid printing null output */ - var _null = "nooutput"; + var _null = "nooutput"; /** * Delegate evaluation of input string appropriately * @param {string} input input string to evaluate @@ -926,10 +926,10 @@ Jash.Evaluator = function() { } } catch(e) { return(e.message); - } + } } - /** - * evaluate 'input' string as css + /** + * evaluate 'input' string as css * @param {string} input an input string to evaluate as css (selector(s) followed by rules) * @returns {sring} the input string unmodified */ @@ -955,7 +955,7 @@ Jash.Evaluator = function() { document.body.appendChild(this.styleInputTag); } if(this.browser == "ff" || this.browser == "op") { - /* wow, I can't believe this works in FF and Opera. It shouldn't */ + /* wow, I can't believe this works in FF and Opera. It shouldn't */ this.styleInputTag.innerHTML += rule + "\n"; } else if (this.browser == "ie" || this.browser == "sa") { /* in IE, stylesheets are added to the top of the stack */ @@ -981,8 +981,8 @@ Jash.Evaluator = function() { } /** -* Store input for later retrieval. Provide methods for retrieving input in a -* linear fashion. +* Store input for later retrieval. Provide methods for retrieving input in a +* linear fashion. * @class Jash.History */ Jash.History = function() { @@ -1001,7 +1001,7 @@ Jash.History.prototype = { }, /** * Find the previous input in history relative to current position - * @returns {string} blank if no history value, or string + * @returns {string} blank if no history value, or string */ getPreviousInput: function() { if(this.position < 0) { @@ -1029,7 +1029,7 @@ Jash.History.prototype = { } /** * Indent, add line breaks, and close tags in an HTML string -* Example usage: +* Example usage: * <pre> * Jash.Indenter.indent(document.getElementById("someDiv").innerHTML); * </pre> @@ -1041,7 +1041,7 @@ Jash.Indenter = { nodesCommonlyUnclosed: new Array("link ", "img ", "meta ", "!DOCTYPE ", "input ", "param", "hr", "br"), /** * repeat stringToRepeat times times and return concatenated string with no separator - * @param {string} stringToRepeat a string that should be repeated times times + * @param {string} stringToRepeat a string that should be repeated times times * @param {int} times number of times to repeat string * @returns {string} string repeated times times */ @@ -1054,7 +1054,7 @@ Jash.Indenter = { }, /** * Find unclosed tags (a list of which is in this.nodesCommonlyUnclosed) in str and - * close them. + * close them. * @param {string} str string representing one node * @returns {str} string with tag(s) closed */ @@ -1087,20 +1087,20 @@ Jash.Indenter = { indent: function(source) { var source = source; var arr = new Array(); - + /* remove new lines and tabs */ source = source.replace(/[\n\r\t]/g, ''); /* remove spaces before and after html tags */ source = source.replace(/>\s+/g, ">"); source = source.replace(/\s+</g, "<"); - + /* Close some nodes */ var splitsrc = source.split("<"); for(i=0;i<splitsrc.length;i++) { splitsrc[i] = this.closeUnclosedNode(splitsrc[i]); } source = splitsrc.join("<"); - + /* indent code */ var level = 0; var sourceLength = source.length; @@ -1153,19 +1153,19 @@ Jash.Indenter = { /** * Time exectuion of a given function. Store results and report average -* resuls. Allow single or multiple-pass execution using a variety of -* loop styles. -* Example usage: +* resuls. Allow single or multiple-pass execution using a variety of +* loop styles. +* Example usage: * <pre> -* var profile = new Jash.Profiler(function() { -* document.getElementById("something"); +* var profile = new Jash.Profiler(function() { +* document.getElementById("something"); * }); * profile.multiPass(1000); * </pre> -* -* @class Jash.Profiler +* +* @class Jash.Profiler * @param {function} func Function to profile -* @param {function} func (optional) callback function to fire when profiler is done +* @param {function} func (optional) callback function to fire when profiler is done * @returns {object} an instance of this object */ Jash.Profiler = function(func,onFinish) { @@ -1178,7 +1178,7 @@ Jash.Profiler = function(func,onFinish) { this.results = new Array(); this.onFinish = typeof onFinish != "function" ? this.defaultOnFinish : onFinish; var self = this; - + /** * Do this.func 'reps' times in a reverse while loop * @param {int} reps Amount of times to execute this.func @@ -1219,12 +1219,12 @@ Jash.Profiler = function(func,onFinish) { if(!this.results[kind][repsMemberName]) { this.results[kind][repsMemberName] = new Array(); } - - var time = this[kind](reps); + + var time = this[kind](reps); this.results[kind][repsMemberName].push(time); } /** - * Run this.func only one time, store resulting time in milliseconds in + * Run this.func only one time, store resulting time in milliseconds in * this.results.runOnce[] */ this.runOnce = function() { @@ -1242,7 +1242,7 @@ Jash.Profiler = function(func,onFinish) { t_start: 0, t_end: 0, t_total: 0, - start: function() { + start: function() { t_start = new Date().getTime(); return t_start; }, @@ -1278,7 +1278,7 @@ Jash.Profiler = function(func,onFinish) { jash.print("Error: the loop type '" + type + "' does not exist"); return false; } - + var self = this; if(type == "runOnce") { if(passes < 1) { @@ -1289,9 +1289,9 @@ Jash.Profiler = function(func,onFinish) { self.multiPass(--passes,type); },50); } - + } else { - + if(passes < 1) { var repsMemberName = "r_" + reps; self.reportProfile(Math.round(this.average(this.results[type][repsMemberName])),type,reps); @@ -1313,16 +1313,16 @@ Jash.Profiler = function(func,onFinish) { var line = "-------PROFILER----------------------------------------------"; var str = line + "\n" + this.func + "\n" + line + "\n"; str += "Type of profile: " + type + "\n"; - + if(typeof reps != "undefined") { str += "Loop iterations: " + reps + "\n"; } - + str += "Average execution time: " + avgMs + "ms" + "\n"; - + if(type == "runOnce") { howManyTimes = this.results.runOnce.length; - } else { + } else { repsMemberName = "r_" + reps; howManyTimes = this.results[type][repsMemberName].length; } @@ -1332,25 +1332,25 @@ Jash.Profiler = function(func,onFinish) { } } /** -* Tab completion of javascript objects, HTML Element ids, and HTML Element -* class names. +* Tab completion of javascript objects, HTML Element ids, and HTML Element +* class names. * @class Jash.TabComplete * @returns {object} an object that is a new instance of Jash.TabComplete class */ Jash.TabComplete = function() { /*** - * Begin completion process by delegating event based on what is found to - * be the context of the request. + * Begin completion process by delegating event based on what is found to + * be the context of the request. * @param {object} e Event object * @returns {boolean} False if tab delegated to a id or class name completion function, null if not ***/ this.tabComplete = function(e) { e = (typeof window.event != "undefined") ? window.event : e; var inputText = this.input.value; - + /* see if input is a dom selector function */ var match = null; - if(match = this.searchInputForDomGetElFunctions(inputText)) { + if(match = this.searchInputForDomGetElFunctions(inputText)) { this.tabCompleteIdOrClassInJavascript(match.match[0], match.type); this.focusCaretAtEndOfInput(); return false; @@ -1358,11 +1358,11 @@ Jash.TabComplete = function() { this.tabCompleteIdOrClassInCss(inputText); this.focusCaretAtEndOfInput(); return false; - } else { + } else { this.tabCompleteJavascript(e,inputText); this.focusCaretAtEndOfInput(); } - + } this.focusCaretAtEndOfInput = function() { this.input.selectionEnd = this.input.selectionStart = this.input.value.length; @@ -1377,20 +1377,20 @@ Jash.TabComplete = function() { /*get last word of input */ var words = inputText.split(/\s+/); var lastWord = words[(words.length - 1)]; - + var numOpeningParens = lastWord.split("(").length - 1; var numClosingParens = lastWord.split(")").length - 1; - + var scope; var sentinel = 0; - + var diff = numOpeningParens - numClosingParens; - + if(diff > 0) { /*how many )'s are after the last ( ?*/ numClosingParens = lastWord.split("(")[numOpeningParens].split(")").length - 1; /*now we can figure out how many )'s we care about*/ - var numRealDanglers = numOpeningParens - numClosingParens; + var numRealDanglers = numOpeningParens - numClosingParens; scope = lastWord.split("(").slice(numRealDanglers).join("("); } else if (diff < 0) { this.print("error: too many closing parentheses"); @@ -1398,16 +1398,16 @@ Jash.TabComplete = function() { } else { scope = lastWord; } - + scope = scope.split("."); var fragment = scope.pop(); scope = scope.join("."); - + if(scope == "") scope = "window"; - + var members = this.getMembers(scope); var results = this.findTextMatchesInArray(members,fragment); - + /*no match was found*/ if(results == false) { /*no match*/ @@ -1426,13 +1426,13 @@ Jash.TabComplete = function() { var reggie = new RegExp(fragment + "$"); this.input.value = this.input.value.replace(reggie,results); } - + return false; } /** * Return true if all characters in an array of strings at a certain position * are the same - * + * * @param {int} index 0 start int position of character to look at * @param {array} arr array of strings to test * @returns {boolean} True if all characters match at position 'index', false if not @@ -1448,9 +1448,9 @@ Jash.TabComplete = function() { } return true; } - + /** - * Try to find the longest possible match in an array of strings starting from the + * Try to find the longest possible match in an array of strings starting from the * left * * @param {str} str String to look for @@ -1468,20 +1468,20 @@ Jash.TabComplete = function() { } /** * Attempt to complete an element id or class name based on what is available in all - * elements in the current DOM; assume the input text is a javascript function call containing (" before - * the string in question. + * elements in the current DOM; assume the input text is a javascript function call containing (" before + * the string in question. * @param {string} inputText Text to try to complete * @param {string} type "id" | "class" : element id or class name completion **/ this.tabCompleteIdOrClassInJavascript = function(inputText,type) { - + /*parse out query*/ var query = inputText.split("("); query = query[query.length - 1].replace(/\W/g,''); - + /*loop through dom to find els that match query*/ var matches = new Array(); - + var els = document.getElementsByTagName("*"); if(type == "id") { for(var i = 0; i<els.length; i++) { @@ -1489,7 +1489,7 @@ Jash.TabComplete = function() { matches.push(els[i].id); } } - + } else if (type == "class") { for(var i = 0; i<els.length; i++) { if(els[i].className && els[i].className != '') { @@ -1514,7 +1514,7 @@ Jash.TabComplete = function() { this.dump(matches.sort()); var bestMatch = this.findBestStringMatch(query,matches); if(query != '') { - /* do the same string splitting operation that + /* do the same string splitting operation that was used to find the query text in the first place */ var replacement = inputText.split("("); replacement[replacement.length - 1] = replacement[replacement.length - 1].replace(query,bestMatch); @@ -1524,7 +1524,7 @@ Jash.TabComplete = function() { } } } - + /** * Attempt to complete an element id or class name based on what is available in all * elements in the current DOM; assume the input text is a css-style selector, i.e. ".someth" or "#someth" @@ -1536,7 +1536,7 @@ Jash.TabComplete = function() { var lastSelector = selectors[selectors.length-1]; var els = document.getElementsByTagName("*"); var matches = new Array(); - + /* class name */ if(lastSelector.match(/^\./)) { for(var i = 0; i<els.length; i++) { @@ -1575,7 +1575,7 @@ Jash.TabComplete = function() { } } } - + /** * scan inputText to determine if a dom get el fct was typed in. If so, return match * and type of match (class or id) @@ -1601,20 +1601,20 @@ Jash.TabComplete = function() { * @param {array} arrayToTest array of strings to match against * @param {string} findMe string to look for in array * @returns {array} array of matches (if matches > 1) - * @returns {str} string match (if matches == 1) + * @returns {str} string match (if matches == 1) * @returns {boolean} false (if matches == 0) **/ this.findTextMatchesInArray = function(arrayToTest,findMe) { var resultsArray = new Array(); var tester = new RegExp("^" + findMe); - + for(var i=0;i<arrayToTest.length;i++) { if(tester.test(arrayToTest[i])) { resultsArray.push(arrayToTest[i]); } } if(resultsArray.length > 1) { - resultsArray.sort(); + resultsArray.sort(); return resultsArray; } else if (resultsArray.length == 1) { return resultsArray[0]; @@ -1624,7 +1624,7 @@ Jash.TabComplete = function() { } /** * Scan an object and return just the member names - * @param {string} context name of object to scan + * @param {string} context name of object to scan **/ this.getMembers = function(context) { var members = new Array(); diff --git a/tests/lib/chai-1.9.0/History.md b/tests/lib/chai-1.9.0/History.md index 09cce25adb1ed2713659c92af037eee5987a7472..c769a56a613614812b38f8e5e80c1ee73680df5b 100644 --- a/tests/lib/chai-1.9.0/History.md +++ b/tests/lib/chai-1.9.0/History.md @@ -1,5 +1,5 @@ -1.9.0 / 2014-01-29 +1.9.0 / 2014-01-29 ================== * docs: add contributing.md #238 @@ -41,12 +41,12 @@ * test: updated for the new assertion errors * core: improve message for assertion errors (throw assertion) -1.8.1 / 2013-10-10 +1.8.1 / 2013-10-10 ================== * pkg: update deep-eql version -1.8.0 / 2013-09-18 +1.8.0 / 2013-09-18 ================== * test: [sauce] add a few more browsers @@ -61,7 +61,7 @@ * Merge pull request #181 from tricknotes/fix-highlight * Fix highlight for example code -1.7.2 / 2013-06-27 +1.7.2 / 2013-06-27 ================== * coverage: add coveralls badge @@ -74,14 +74,14 @@ * Fix to highlight code example * bower: granular ignores -1.7.1 / 2013-06-24 +1.7.1 / 2013-06-24 ================== * Merge branch 'feature/bower'. #175 * bower: add json file * build: browser -1.7.0 / 2013-06-17 +1.7.0 / 2013-06-17 ================== * error: remove internal assertion error constructor @@ -100,7 +100,7 @@ * Merge pull request #169 from katsgeorgeek/topics/master * Fix comparison objects. -1.6.1 / 2013-06-05 +1.6.1 / 2013-06-05 ================== * Merge pull request #168 from katsgeorgeek/topics/master @@ -111,7 +111,7 @@ * Merge pull request #161 from brandonpayton/master * Fix documented name for assert interfaces isDefined method -1.6.0 / 2013-04-29 +1.6.0 / 2013-04-29 ================== * build: browser @@ -134,7 +134,7 @@ * notes: migration notes for deep equal changes * test: for ever err() there must be a passing version -1.5.0 / 2013-02-03 +1.5.0 / 2013-02-03 ================== * docs: add Release Notes for non-gitlog summary of changes. @@ -190,14 +190,14 @@ * Add new getProperties and getEnumerableProperties utils. * showDiff: force true for equal and eql -1.4.2 / 2012-12-21 +1.4.2 / 2012-12-21 ================== * browser build: (object diff support when used with mocha) #106 * test: [display] array test for mocha object diff * browser: no longer need different AssertionError constructor -1.4.1 / 2012-12-21 +1.4.1 / 2012-12-21 ================== * showDiff: force diff for equal and eql. #106 @@ -206,7 +206,7 @@ * FIX: assert.Throw checks error type/message * TST: assert.Throw should check error type/message -1.4.0 / 2012-11-29 +1.4.0 / 2012-11-29 ================== * pre-release browser build @@ -222,7 +222,7 @@ * Check for 'actual' type * Added support for circular references when checking deep (in)equality. -1.3.0 / 2012-10-01 +1.3.0 / 2012-10-01 ================== * browser build w/ folio >= 0.3.4. Closes #99 @@ -243,7 +243,7 @@ * Make globalShould test work in browser too. * Add a setter for `Object.prototype.should`. Closes #86. -1.2.0 / 2012-08-07 +1.2.0 / 2012-08-07 ================== * Merge branch 'feature/errmsg' @@ -263,7 +263,7 @@ * Merge pull request #88 from pwnall/master * Don't inspect() assertion arguments if the assertion passes. -1.1.1 / 2012-07-09 +1.1.1 / 2012-07-09 ================== * improve commonjs support on browser build @@ -277,7 +277,7 @@ * clean up makefile * early folio 0.3.x support -1.1.0 / 2012-06-26 +1.1.0 / 2012-06-26 ================== * browser build @@ -302,7 +302,7 @@ * move core assertions to own file and refactor all using utils * rearrange folder structure -1.0.4 / 2012-06-03 +1.0.4 / 2012-06-03 ================== * Merge pull request #68 from fizker/itself @@ -310,7 +310,7 @@ * simplify error inspections for cross browser compatibility * fix safari `addChainableMethod` errors. Closes #69 -1.0.3 / 2012-05-27 +1.0.3 / 2012-05-27 ================== * Point Travis badge to the right place. @@ -318,7 +318,7 @@ * Fix .not.deep.equal. * contributors list -1.0.2 / 2012-05-26 +1.0.2 / 2012-05-26 ================== * Merge pull request #67 from chaijs/chaining-and-flags @@ -332,7 +332,7 @@ * Add .mailmap to .npmignore. * Add a .mailmap file to fix my name in shortlogs. -1.0.1 / 2012-05-18 +1.0.1 / 2012-05-18 ================== * browser build @@ -345,7 +345,7 @@ * Add npm-debug.log to .gitignore. * no reserved words as actuals. #62 -1.0.0 / 2012-05-15 +1.0.0 / 2012-05-15 ================== * readme cleanup @@ -364,7 +364,7 @@ * Use defined return value of Assertion extension functions * Update utility docs -1.0.0-rc3 / 2012-05-09 +1.0.0-rc3 / 2012-05-09 ================== * Merge branch 'feature/rc3' @@ -398,7 +398,7 @@ * Sinon–Chai has a dash * updated plugins list for docs -1.0.0-rc2 / 2012-05-06 +1.0.0-rc2 / 2012-05-06 ================== * Merge branch 'feature/test-cov' @@ -410,7 +410,7 @@ * overwrite Property and Method now ensure chain * version notes in readme -1.0.0-rc1 / 2012-05-04 +1.0.0-rc1 / 2012-05-04 ================== * browser build (rc1) @@ -517,7 +517,7 @@ * added 2012 to copyright headers * Added DeepEqual assertions -0.5.3 / 2012-04-21 +0.5.3 / 2012-04-21 ================== * Merge branch 'refs/heads/jgonera-oldbrowsers' @@ -532,7 +532,7 @@ * Support for expected and actual parameters in assert-style error object * chai as promised - readme -0.5.2 / 2012-03-21 +0.5.2 / 2012-03-21 ================== * browser build @@ -542,7 +542,7 @@ * better error message for assert.operator. Closes #39 * version notes -0.5.1 / 2012-03-14 +0.5.1 / 2012-03-14 ================== * chai.fail no longer exists @@ -550,7 +550,7 @@ * Added asset#isDefined. Closes #37. * dev docs update for Assertion#assert -0.5.0 / 2012-03-07 +0.5.0 / 2012-03-07 ================== * [bug] on inspect of reg on n 0.4.12 @@ -582,7 +582,7 @@ * Update the compiled version. * Add object & sane arguments support to `Assertion#empty`. -0.4.2 / 2012-02-28 +0.4.2 / 2012-02-28 ================== * fix for `process` not available in browser when used via browserify. Closes #28 @@ -614,7 +614,7 @@ * Add test for `assert.strictEqual`. * Add test for `assert.notEqual`. -0.4.1 / 2012-02-26 +0.4.1 / 2012-02-26 ================== * Merge pull request #27 from logicalparadox/type-fix @@ -625,7 +625,7 @@ * Add test for `new Number` type check. * Fix type of actual checks. -0.4.0 / 2012-02-25 +0.4.0 / 2012-02-25 ================== * docs and readme for upcoming 0.4.0 @@ -658,7 +658,7 @@ * doc contributors * README contributors -0.3.4 / 2012-02-23 +0.3.4 / 2012-02-23 ================== * inline comment typos for #15 @@ -673,25 +673,25 @@ * doc updates * read me updates include plugins -0.3.3 / 2012-02-12 +0.3.3 / 2012-02-12 ================== * Merge pull request #14 from jfirebaugh/configurable_properties * Make Assertion.prototype properties configurable -0.3.2 / 2012-02-10 +0.3.2 / 2012-02-10 ================== * codex version * docs * docs cleanup -0.3.1 / 2012-02-07 +0.3.1 / 2012-02-07 ================== * node 0.4.x compat -0.3.0 / 2012-02-07 +0.3.0 / 2012-02-07 ================== * Merge branch 'feature/03x' @@ -702,27 +702,27 @@ * Merge pull request #11 from domenic/master * Make `chai.use` a no-op if the function has already been used. -0.2.4 / 2012-02-02 +0.2.4 / 2012-02-02 ================== * added in past tense switch for `been` -0.2.3 / 2012-02-01 +0.2.3 / 2012-02-01 ================== * try that again -0.2.2 / 2012-02-01 +0.2.2 / 2012-02-01 ================== * added `been` (past of `be`) alias -0.2.1 / 2012-01-29 +0.2.1 / 2012-01-29 ================== * added Throw, with a capital T, as an alias to `throw` (#7) -0.2.0 / 2012-01-26 +0.2.0 / 2012-01-26 ================== * update gitignore for vim *.swp @@ -732,7 +732,7 @@ * simple .use function. See #9. * readme notice on browser compat -0.1.7 / 2012-01-25 +0.1.7 / 2012-01-25 ================== * added assert tests to browser test runner diff --git a/tests/lib/chai-1.9.0/ReleaseNotes.md b/tests/lib/chai-1.9.0/ReleaseNotes.md index 322cabd636569a25dc27f4a0b8eeb6dde997d801..e8ec49f562e70c35fea890dee65ae7610d756ead 100644 --- a/tests/lib/chai-1.9.0/ReleaseNotes.md +++ b/tests/lib/chai-1.9.0/ReleaseNotes.md @@ -1,15 +1,15 @@ # Release Notes -## 1.9.0 / 2014-01-29 +## 1.9.0 / 2014-01-29 The following changes are required if you are upgrading from the previous version: - **Users:** - No changes required -- **Plugin Developers:** +- **Plugin Developers:** - Review [#219](https://github.com/chaijs/chai/pull/219). -- **Core Contributors:** - - Refresh `node_modules` folder for updated dependencies. +- **Core Contributors:** + - Refresh `node_modules` folder for updated dependencies. ### Community Contributions @@ -31,42 +31,42 @@ Thank you to all who took time to contribute! - [#237](https://github.com/chaijs/chai/pull/237) Remove coveralls/jscoverage, include istanbul coverage report in travis test. - Update Karma and Sauce runner versions for consistent CI results. No more karma@canary. -## 1.8.1 / 2013-10-10 +## 1.8.1 / 2013-10-10 The following changes are required if you are upgrading from the previous version: - **Users:** - - Refresh `node_modules` folder for updated dependencies. -- **Plugin Developers:** + - Refresh `node_modules` folder for updated dependencies. +- **Plugin Developers:** - No changes required -- **Core Contributors:** - - Refresh `node_modules` folder for updated dependencies. +- **Core Contributors:** + - Refresh `node_modules` folder for updated dependencies. ### Browserify This is a small patch that updates the dependency tree so browserify users can install chai. (Remove conditional requires) -## 1.8.0 / 2013-09-18 +## 1.8.0 / 2013-09-18 The following changes are required if you are upgrading from the previous version: - **Users:** - See `deep.equal` notes. -- **Plugin Developers:** +- **Plugin Developers:** - No changes required -- **Core Contributors:** - - Refresh `node_modules` folder for updated dependencies. +- **Core Contributors:** + - Refresh `node_modules` folder for updated dependencies. ### Deep Equals This version of Chai focused on a overhaul to the deep equal utility. The code for this -tool has been removed from the core lib and can now be found at: +tool has been removed from the core lib and can now be found at: [chai / deep-eql](https://github.com/chaijs/deep-eql). As stated in previous releases, this is part of a larger initiative to provide transparency, independent testing, and coverage for -some of the more complicated internal tools. +some of the more complicated internal tools. -For the most part `.deep.equal` will behave the same as it has. However, in order to provide a +For the most part `.deep.equal` will behave the same as it has. However, in order to provide a consistent ruleset across all types being tested, the following changes have been made and _might_ require changes to your tests. @@ -94,7 +94,7 @@ expect(Array.prototype.slice.call(arguments)).to.deep.equal([]); ### CI and Browser Testing -Chai now runs the browser CI suite using [Karma](http://karma-runner.github.io/) directed at +Chai now runs the browser CI suite using [Karma](http://karma-runner.github.io/) directed at [SauceLabs](https://saucelabs.com/). This means we get to know where our browser support stands... and we get a cool badge: @@ -104,67 +104,67 @@ Look for the list of browsers/versions to expand over the coming releases. - [#195](https://github.com/chaijs/chai/issues/195) karma test framework -## 1.7.2 / 2013-06-27 +## 1.7.2 / 2013-06-27 The following changes are required if you are upgrading from the previous version: - **Users:** - No changes required. -- **Plugin Developers:** +- **Plugin Developers:** - No changes required -- **Core Contributors:** - - Refresh `node_modules` folder for updated dependencies. +- **Core Contributors:** + - Refresh `node_modules` folder for updated dependencies. ### Coverage Reporting Coverage reporting has always been available for core-developers but the data has never been published for our end users. In our ongoing effort to improve accountability this data will now be published via the [coveralls.io](https://coveralls.io/) service. A badge has been added to the README and the full report -can be viewed online at the [chai coveralls project](https://coveralls.io/r/chaijs/chai). Furthermore, PRs +can be viewed online at the [chai coveralls project](https://coveralls.io/r/chaijs/chai). Furthermore, PRs will receive automated messages indicating how their PR impacts test coverage. This service is tied to TravisCI. ### Other Fixes - [#175](https://github.com/chaijs/chai/issues/175) Add `bower.json`. (Fix ignore all) -## 1.7.1 / 2013-06-24 +## 1.7.1 / 2013-06-24 The following changes are required if you are upgrading from the previous version: - **Users:** - No changes required. -- **Plugin Developers:** +- **Plugin Developers:** - No changes required -- **Core Contributors:** - - Refresh `node_modules` folder for updated dependencies. +- **Core Contributors:** + - Refresh `node_modules` folder for updated dependencies. ### Official Bower Support Support has been added for the Bower Package Manager ([bower.io])(http://bower.io/). Though Chai could be installed via Bower in the past, this update adds official support via the `bower.json` -specification file. +specification file. - [#175](https://github.com/chaijs/chai/issues/175) Add `bower.json`. -## 1.7.0 / 2013-06-17 +## 1.7.0 / 2013-06-17 The following changes are required if you are upgrading from the previous version: - **Users:** - No changes required. -- **Plugin Developers:** +- **Plugin Developers:** - Review AssertionError update notice. -- **Core Contributors:** - - Refresh `node_modules` folder for updated dependencies. +- **Core Contributors:** + - Refresh `node_modules` folder for updated dependencies. ### AssertionError Update Notice Chai now uses [chaijs/assertion-error](https://github.com/chaijs/assertion-error) instead an internal -constructor. This will allow for further iteration/experimentation of the AssertionError constructor -independant of Chai. Future plans include stack parsing for callsite support. +constructor. This will allow for further iteration/experimentation of the AssertionError constructor +independant of Chai. Future plans include stack parsing for callsite support. This update constructor has a different constructor param signature that conforms more with the standard -`Error` object. If your plugin throws and `AssertionError` directly you will need to update your plugin +`Error` object. If your plugin throws and `AssertionError` directly you will need to update your plugin with the new signature. ```js @@ -208,7 +208,7 @@ throw new AssertionError('An assertion error occurred', null, arguments.callee); This is the first non-developement dependency for Chai. As Chai continues to evolve we will begin adding more; the next will likely be improved type detection and deep equality. With Chai's userbase continually growing there is an higher need for accountability and documentation. External dependencies will allow us to iterate and -test on features independent from our interfaces. +test on features independent from our interfaces. Note: The browser packaged version `chai.js` will ALWAYS contain all dependencies needed to run Chai. @@ -220,16 +220,16 @@ Note: The browser packaged version `chai.js` will ALWAYS contain all dependencie Thank you to all who took the time to contribute! -## 1.6.1 / 2013-06-05 +## 1.6.1 / 2013-06-05 The following changes are required if you are upgrading from the previous version: - **Users:** - No changes required. -- **Plugin Developers:** +- **Plugin Developers:** - No changes required. -- **Core Contributors:** - - Refresh `node_modules` folder for updated developement dependencies. +- **Core Contributors:** + - Refresh `node_modules` folder for updated developement dependencies. ### Deep Equality @@ -247,16 +247,16 @@ Thank you to all who took the time to contribute! - Mocha has been locked at version `1.8.x` to ensure `mocha-phantomjs` compatibility. -## 1.6.0 / 2013-04-29 +## 1.6.0 / 2013-04-29 The following changes are required if you are upgrading from the previous version: - **Users:** - No changes required. -- **Plugin Developers:** +- **Plugin Developers:** - No changes required. -- **Core Contributors:** - - Refresh `node_modules` folder for updated developement dependencies. +- **Core Contributors:** + - Refresh `node_modules` folder for updated developement dependencies. ### New Assertions @@ -277,14 +277,14 @@ expect([1, 2, 3]).to.not.include.members([3, 2, 8]); // (assert) full set assert.sameMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'same members'); -// (assert) inclusion +// (assert) inclusion assert.includeMembers([ 1, 2, 3 ], [ 2, 1 ], 'include members'); ``` #### Non-inclusion for Assert Interface -Most `assert` functions have a negative version, like `instanceOf()` has a corresponding `notInstaceOf()`. +Most `assert` functions have a negative version, like `instanceOf()` has a corresponding `notInstaceOf()`. However `include()` did not have a corresponding `notInclude()`. This has been added. ```js @@ -305,19 +305,19 @@ Thank you to all who took time to contribute! - [#158](https://github.com/chaijs/chai/issues/158) `assert#notInclude` has been added. - Travis-CI now tests Node.js `v0.10.x`. Support for `v0.6.x` has been removed. `v0.8.x` is still tested as before. -## 1.5.0 / 2013-02-03 +## 1.5.0 / 2013-02-03 ### Migration Requirements The following changes are required if you are upgrading from the previous version: -- **Users:** - - _Update [2013-02-04]:_ Some users may notice a small subset of deep equality assertions will no longer pass. This is the result of +- **Users:** + - _Update [2013-02-04]:_ Some users may notice a small subset of deep equality assertions will no longer pass. This is the result of [#120](https://github.com/chaijs/chai/issues/120), an improvement to our deep equality algorithm. Users will need to revise their assertions to be more granular should this occur. Further information: [#139](https://github.com/chaijs/chai/issues/139). -- **Plugin Developers:** +- **Plugin Developers:** - No changes required. -- **Core Contributors:** +- **Core Contributors:** - Refresh `node_modules` folder for updated developement dependencies. ### Community Contributions @@ -341,10 +341,10 @@ Thank you to all who took time to contribute! #### For Users -**1. Component Support:** Chai now included the proper configuration to be installed as a +**1. Component Support:** Chai now included the proper configuration to be installed as a [component](https://github.com/component/component). Component users are encouraged to consult [chaijs.com](http://chaijs.com) for the latest version number as using the master branch -does not gaurantee stability. +does not gaurantee stability. ```js // relevant component.json @@ -357,9 +357,9 @@ Alternatively, bleeding-edge is available: $ component install chaijs/chai -**2. Configurable showDiff:** Some test runners (such as [mocha](http://visionmedia.github.com/mocha/)) -include support for showing the diff of strings and objects when an equality error occurs. Chai has -already included support for this, however some users may not prefer this display behavior. To revert to +**2. Configurable showDiff:** Some test runners (such as [mocha](http://visionmedia.github.com/mocha/)) +include support for showing the diff of strings and objects when an equality error occurs. Chai has +already included support for this, however some users may not prefer this display behavior. To revert to no diff display, the following configuration is available: ```js @@ -369,7 +369,7 @@ chai.Assertion.showDiff = true; // default, diff output enabled #### For Plugin Developers -**1. New Utility - type**: The new utility `.type()` is available as a better implementation of `typeof` +**1. New Utility - type**: The new utility `.type()` is available as a better implementation of `typeof` that can be used cross-browser. It handles the inconsistencies of Array, `null`, and `undefined` detection. - **@param** _{Mixed}_ object to detect type of @@ -387,9 +387,9 @@ chai.use(function (c, utils) { #### For Core Contributors -**1. Browser Testing**: Browser testing of the `./chai.js` file is now available in the command line -via PhantomJS. `make test` and Travis-CI will now also rebuild and test `./chai.js`. Consequently, all -pull requests will now be browser tested in this way. +**1. Browser Testing**: Browser testing of the `./chai.js` file is now available in the command line +via PhantomJS. `make test` and Travis-CI will now also rebuild and test `./chai.js`. Consequently, all +pull requests will now be browser tested in this way. _Note: Contributors opening pull requests should still NOT include the browser build._ diff --git a/tests/lib/jsdoc-toolkit/README.txt b/tests/lib/jsdoc-toolkit/README.txt index 3782da88da7138ed0add0059ad0d7d6f37fdf44c..763e8039251b6adf07f40e80cbe9fd4dc92311b4 100644 --- a/tests/lib/jsdoc-toolkit/README.txt +++ b/tests/lib/jsdoc-toolkit/README.txt @@ -15,7 +15,7 @@ For more information, to report a bug, or to browse the technical documentation for this tool please visit the official JsDoc Toolkit project homepage at http://code.google.com/p/jsdoc-toolkit/ -For the most up-to-date documentation on JsDoc Toolkit see the +For the most up-to-date documentation on JsDoc Toolkit see the official wiki at http://code.google.com/p/jsdoc-toolkit/w/list ====================================================================== @@ -142,12 +142,12 @@ You can obtain the source code for Rhino from the Mozilla web site at http://www.mozilla.org/rhino/download.html JsDoc Toolkit is a larger work that uses the Rhino JavaScript engine -but is not derived from it in any way. The Rhino library is used +but is not derived from it in any way. The Rhino library is used without modification and without any claims whatsoever. The Rhino Debugger -You can obtain more information about the Rhino Debugger from the +You can obtain more information about the Rhino Debugger from the Mozilla web site at http://www.mozilla.org/rhino/debugger.html JsDoc Toolkit is a larger work that uses the Rhino Debugger but diff --git a/tests/lib/jsdoc-toolkit/app/frame/Chain.js b/tests/lib/jsdoc-toolkit/app/frame/Chain.js index 506469d18595273a4897a0e821078b10cb4201ea..f83079680115936c4ba8c77505162b371f1ccc93 100644 --- a/tests/lib/jsdoc-toolkit/app/frame/Chain.js +++ b/tests/lib/jsdoc-toolkit/app/frame/Chain.js @@ -8,7 +8,7 @@ function ChainNode(object, link) { function Chain(valueLinks) { this.nodes = []; this.cursor = -1; - + if (valueLinks && valueLinks.length > 0) { this.push(valueLinks[0], "//"); for (var i = 1, l = valueLinks.length; i < l; i+=2) { diff --git a/tests/lib/jsdoc-toolkit/app/frame/Dumper.js b/tests/lib/jsdoc-toolkit/app/frame/Dumper.js index d8b007b1d9e1a6751609eb11ffad50b89d3ce76d..731cd33453d39fef7cb43ac82b7a7b432ae17f0d 100644 --- a/tests/lib/jsdoc-toolkit/app/frame/Dumper.js +++ b/tests/lib/jsdoc-toolkit/app/frame/Dumper.js @@ -7,7 +7,7 @@ library Data.Dump. To download the original visit: AUTHORS -The Data.Dump JavaScript module is written by Kevin Jones +The Data.Dump JavaScript module is written by Kevin Jones (kevinj@cpan.org), based on Data::Dump by Gisle Aas (gisle@aas.no), based on Data::Dumper by Gurusamy Sarathy (gsar@umich.edu). @@ -33,7 +33,7 @@ Dumper = { else return "()"; }, - + _dump: function (obj) { if (typeof obj == 'undefined') return 'undefined'; var out; @@ -46,23 +46,23 @@ Dumper = { break; case 'object': var pairs = new Array; - + for (var prop in obj) { if (prop != "circularReference" && obj.hasOwnProperty(prop)) { //hide inherited properties pairs.push(prop + ': ' + this._dump(obj[prop])); } } - + out = '{' + this._format_list(pairs) + '}'; break; - + case 'string': for (var prop in Dumper.ESC) { if (Dumper.ESC.hasOwnProperty(prop)) { obj = obj.replace(prop, Dumper.ESC[prop]); } } - + // Escape UTF-8 Strings if (obj.match(/^[\x00-\x7f]*$/)) { out = '"' + obj.replace(/\"/g, "\\\"").replace(/([\n\r]+)/g, "\\$1") + '"'; @@ -71,44 +71,44 @@ Dumper = { out = "unescape('"+escape(obj)+"')"; } break; - + case 'array': var elems = new Array; - + for (var i=0; i<obj.length; i++) { elems.push( this._dump(obj[i]) ); } - + out = '[' + this._format_list(elems) + ']'; break; - + case 'date': // firefox returns GMT strings from toUTCString()... var utc_string = obj.toUTCString().replace(/GMT/,'UTC'); out = 'new Date("' + utc_string + '")'; break; - + case 'element': // DOM element out = this._dump_dom(obj); break; - + default: out = obj; } - + out = String(out).replace(/\n/g, '\n '); out = out.replace(/\n (.*)$/,"\n$1"); - + return out; }, - + _format_list: function (list) { if (!list.length) return ''; var nl = list.toString().length > 60 ? '\n' : ' '; return nl + list.join(',' + nl) + nl; }, - + _typeof: function (obj) { if (obj && obj.circularReference && obj.circularReference > 1) return 'circular'; if (Array.prototype.isPrototypeOf(obj)) return 'array'; @@ -116,7 +116,7 @@ Dumper = { if (typeof obj.nodeType != 'undefined') return 'element'; return typeof(obj); }, - + _dump_dom: function (obj) { return '"' + Dumper.nodeTypes[obj.nodeType] + '"'; } diff --git a/tests/lib/jsdoc-toolkit/app/frame/Hash.js b/tests/lib/jsdoc-toolkit/app/frame/Hash.js index 62cfad646aa58ef57394bdcc87adc22782676519..fa60d874765750042c89055f338336e69792405c 100644 --- a/tests/lib/jsdoc-toolkit/app/frame/Hash.js +++ b/tests/lib/jsdoc-toolkit/app/frame/Hash.js @@ -9,7 +9,7 @@ for (var p = _index.first(); p; p = _index.next()) { print(p.key+" is for "+p.value); } - + */ var Hash = function() { this._map = {}; diff --git a/tests/lib/jsdoc-toolkit/app/frame/Link.js b/tests/lib/jsdoc-toolkit/app/frame/Link.js index 1e6241bfbfe03d578c6878ac64b161c19f63efb8..f0020a13ea9b5314ae9bb82d3ab13b3591ce95fc 100644 --- a/tests/lib/jsdoc-toolkit/app/frame/Link.js +++ b/tests/lib/jsdoc-toolkit/app/frame/Link.js @@ -9,7 +9,7 @@ function Link() { this.innerName = ""; this.classLink = false; this.targetName = ""; - + this.target = function(targetName) { if (defined(targetName)) this.targetName = targetName; return this; @@ -38,7 +38,7 @@ function Link() { if (defined(file)) this.file = file; return this; } - + this.toString = function() { var linkString; var thisLink = this; @@ -76,10 +76,10 @@ Link.base = ""; Link.symbolNameToLinkName = function(symbol) { var linker = "", ns = ""; - + if (symbol.isStatic) linker = "."; else if (symbol.isInner) linker = "-"; - + if (symbol.isEvent && !/^event:/.test(symbol.name)) { ns = "event:"; } @@ -88,29 +88,29 @@ Link.symbolNameToLinkName = function(symbol) { Link.getSymbol= function(alias) { var symbol= Link.symbolSet.getSymbol(alias); - + if (symbol) return symbol; - + if ('#'!==alias.charAt(0) || !Link.currentSymbol) return null; - + // resolve relative name var container= Link.currentSymbol; - + while (container) { symbol= Link.symbolSet.getSymbol(container.alias + alias); if (symbol) return symbol; - + // No superclass if (!container.augments.length) return null; - + container= Link.symbolSet.getSymbol(container.augments[0].desc); } - + return null; } @@ -124,7 +124,7 @@ Link.prototype._makeSymbolLink = function(alias) { // if there is no symbol by that name just return the name unaltered if (!linkTo) return this.text || alias; - + // it's a symbol in another file else { if (!linkTo.is("CONSTRUCTOR") && !linkTo.isNamespace) { // it's a method or property @@ -138,22 +138,22 @@ Link.prototype._makeSymbolLink = function(alias) { } linkPath = linkBase + linkPath } - + var linkText= this.text || alias; - + var link = {linkPath: linkPath, linkText: linkText, linkInner: (this.innerName? "#"+this.innerName : "")}; - + if (typeof JSDOC.PluginManager != "undefined") { JSDOC.PluginManager.run("onSymbolLink", link); } - + return "<a href=\""+link.linkPath+link.linkInner+"\""+target+">"+link.linkText+"</a>"; } /** Create a link to a source file. */ Link.prototype._makeSrcLink = function(srcFilePath) { var target = (this.targetName)? " target=\""+this.targetName+"\"" : ""; - + // transform filepath into a filename var srcFile = srcFilePath.replace(/\.\.?[\\\/]/g, "").replace(/[:\\\/]/g, "_"); var outFilePath = Link.base + publish.conf.srcDir + srcFile + publish.conf.ext; @@ -165,7 +165,7 @@ Link.prototype._makeSrcLink = function(srcFilePath) { /** Create a link to a source file. */ Link.prototype._makeFileLink = function(filePath) { var target = (this.targetName)? " target=\""+this.targetName+"\"" : ""; - + var outFilePath = Link.base + filePath; if (!this.text) this.text = filePath; diff --git a/tests/lib/jsdoc-toolkit/app/frame/Namespace.js b/tests/lib/jsdoc-toolkit/app/frame/Namespace.js index fa1e41d1001f8e3e11aac39bd1cb0619c718313a..9ea2adb197c79ee98462c0ab213b28e98eea99e7 100644 --- a/tests/lib/jsdoc-toolkit/app/frame/Namespace.js +++ b/tests/lib/jsdoc-toolkit/app/frame/Namespace.js @@ -5,6 +5,6 @@ function Namespace(name, f) { for (var o = _global_, i = 0, l = n.length; i < l; i++) { o = o[n[i]] = o[n[i]] || {}; } - + if (f) f(); } \ No newline at end of file diff --git a/tests/lib/jsdoc-toolkit/app/frame/Opt.js b/tests/lib/jsdoc-toolkit/app/frame/Opt.js index 352f1590301023a3dfe6e044c5d255f1d672131c..bca4ee7ab32c1654b58a5e8f82bc182b22352e36 100644 --- a/tests/lib/jsdoc-toolkit/app/frame/Opt.js +++ b/tests/lib/jsdoc-toolkit/app/frame/Opt.js @@ -19,7 +19,7 @@ Opt = { name = m.shift(); value = m.shift(); if (typeof value == "undefined") value = true; - + for (var n in optNames) { // convert it to a shortname if (name == optNames[n]) { name = n; @@ -32,7 +32,7 @@ Opt = { name = m.shift(); value = m.shift(); if (typeof value == "undefined") value = true; - + for (var n in optNames) { // find the matching key if (name == n || name+'[]' == n) { name = n; @@ -44,7 +44,7 @@ Opt = { name = RegExp.$1; if (!opt[name]) opt[name] = []; } - + if (opt[name] && opt[name].push) { opt[name].push(value); } @@ -62,70 +62,70 @@ Opt = { /*t: plan(11, "Testing Opt."); - + is( typeof Opt, "object", "Opt is an object." ); - + is( typeof Opt.get, "function", "Opt.get is a function." ); - + var optNames = {a:"accept", b:"backtrace", c:"class", d:"debug", "e[]":"exceptions"}; var t_options = Opt.get(["-a=xml", "-b", "--class=new", "--debug", "-e=one", "-e=two", "foo", "bar"], optNames); - + is( t_options.a, "xml", "an option defined with a short name can be accessed by its short name." ); - + is( t_options.b, true, "an option defined with a short name and no value are true." ); - + is( t_options.c, "new", "an option defined with a long name can be accessed by its short name." ); - + is( t_options.d, true, "an option defined with a long name and no value are true." ); - + is( typeof t_options.e, "object", "an option that can accept multiple values is defined." ); - + is( t_options.e.length, 2, "an option that can accept multiple values can have more than one value." ); - + is( t_options.e[1], "two", "an option that can accept multiple values can be accessed as an array." ); - + is( typeof t_options._, "object", "the property '_' is defined for unnamed options." ); - + is( t_options._[0], "foo", diff --git a/tests/lib/jsdoc-toolkit/app/frame/String.js b/tests/lib/jsdoc-toolkit/app/frame/String.js index c183c27d561a10410ada398e67feacb9d17a68b3..837a36623e00814d76519c3adc9a50d8ab63df97 100644 --- a/tests/lib/jsdoc-toolkit/app/frame/String.js +++ b/tests/lib/jsdoc-toolkit/app/frame/String.js @@ -16,22 +16,22 @@ String.prototype.trim = function() { } /*t: plan(6, "Testing String.prototype.trim."); - + var s = " a bc ".trim(); is(s, "a bc", "multiple spaces front and back are trimmed."); s = "a bc\n\n".trim(); is(s, "a bc", "newlines only in back are trimmed."); - + s = "\ta bc".trim(); is(s, "a bc", "tabs only in front are trimmed."); - + s = "\n \t".trim(); is(s, "", "an all-space string is trimmed to empty."); - + s = "a b\nc".trim(); is(s, "a b\nc", "a string with no spaces in front or back is trimmed to itself."); - + s = "".trim(); is(s, "", "an empty string is trimmed to empty."); @@ -43,7 +43,7 @@ String.prototype.balance = function(open, close) { if (i == this.length) return [-1, -1]; i++; } - + var j = i+1; var balance = 1; while (j < this.length) { @@ -53,40 +53,40 @@ String.prototype.balance = function(open, close) { j++; if (j == this.length) return [-1, -1]; } - + return [i, j]; } /*t: plan(16, "Testing String.prototype.balance."); - + var s = "{abc}".balance("{","}"); is(s[0], 0, "opener in first is found."); is(s[1], 4, "closer in last is found."); - + s = "ab{c}de".balance("{","}"); is(s[0], 2, "opener in middle is found."); is(s[1], 4, "closer in middle is found."); - + s = "a{b{c}de}f".balance("{","}"); is(s[0], 1, "nested opener is found."); is(s[1], 8, "nested closer is found."); - + s = "{}".balance("{","}"); is(s[0], 0, "opener with no content is found."); is(s[1], 1, "closer with no content is found."); - + s = "".balance("{","}"); is(s[0], -1, "empty string opener is -1."); is(s[1], -1, "empty string closer is -1."); - + s = "{abc".balance("{","}"); is(s[0], -1, "opener with no closer returns -1."); is(s[1], -1, "no closer returns -1."); - + s = "abc".balance("{","}"); is(s[0], -1, "no opener or closer returns -1 for opener."); is(s[1], -1, "no opener or closer returns -1 for closer."); - + s = "a<bc}de".balance("<","}"); is(s[0], 1, "unmatching opener is found."); is(s[1], 4, "unmatching closer is found."); diff --git a/tests/lib/jsdoc-toolkit/app/frame/Testrun.js b/tests/lib/jsdoc-toolkit/app/frame/Testrun.js index a33bb4140349740954fc6856dd1f5eff942c3cdb..ac2c961282374da2d6d9804fcb678ab76c173387 100644 --- a/tests/lib/jsdoc-toolkit/app/frame/Testrun.js +++ b/tests/lib/jsdoc-toolkit/app/frame/Testrun.js @@ -7,7 +7,7 @@ * @license <a href="http://en.wikipedia.org/wiki/MIT_License">X11/MIT License</a> * (See the accompanying README file for full details.) */ - + /** Yet another unit testing tool for JavaScript. @author Michael Mathews <a href="mailto:micmath@gmail.com">micmath@gmail.com</a> @@ -19,7 +19,7 @@ function testrun(testCases) { var result = testCases[t](); ran++; } - + return testrun.reportOut+"-------------------------------\n"+((testrun.fails>0)? ":( Failed "+testrun.fails+"/" : ":) Passed all ")+testrun.count+" test"+((testrun.count == 1)? "":"s")+".\n"; } @@ -43,11 +43,11 @@ testrun.report = function(text) { */ ok = function(test, message) { testrun.count++; - + var result; try { result = eval(test); - + if (result) { testrun.passes++; testrun.report(" OK "+testrun.count+" - "+((message != null)? message : "")); @@ -68,16 +68,16 @@ ok = function(test, message) { Check if test is same as expected. @param {string} test To be evaluated. @param {string} expected - @param {string} message Optional. To be displayed in the report. + @param {string} message Optional. To be displayed in the report. @return {boolean} True if (test == expected). Note that the comparison is not a strict equality check. */ is = function(test, expected, message) { testrun.count++; - + var result; try { result = eval(test); - + if (result == expected) { testrun.passes++ testrun.report(" OK "+testrun.count+" - "+((message != null)? message : "")); @@ -110,7 +110,7 @@ like = function(test, pattern, message) { try { result = eval(test); var rgx = new RegExp(pattern); - + if (rgx.test(result)) { testrun.passes++ testrun.report(" OK "+testrun.count+" - "+((message != null)? message : "")); diff --git a/tests/lib/jsdoc-toolkit/app/handlers/FOODOC.js b/tests/lib/jsdoc-toolkit/app/handlers/FOODOC.js index b208f55b1aeac2a7a32953cb6d4b1ee1ef245252..c845b1859f5eeeaf25ab0025eac41e0119da2725 100644 --- a/tests/lib/jsdoc-toolkit/app/handlers/FOODOC.js +++ b/tests/lib/jsdoc-toolkit/app/handlers/FOODOC.js @@ -10,7 +10,7 @@ FOODOC.VERSION = "1.0"; FOODOC.handle = function(srcFile, src) { LOG.inform("Handling file '" + srcFile + "'"); - + return [ new JSDOC.Symbol( "foo", diff --git a/tests/lib/jsdoc-toolkit/app/handlers/XMLDOC.js b/tests/lib/jsdoc-toolkit/app/handlers/XMLDOC.js index 40f87b3559f441ec6e2b0e70b79d0c40441145ec..e777d03e7f328fbabab9a262084630e114b6d522 100755 --- a/tests/lib/jsdoc-toolkit/app/handlers/XMLDOC.js +++ b/tests/lib/jsdoc-toolkit/app/handlers/XMLDOC.js @@ -5,7 +5,7 @@ * @version $Revision: 498 $ */ XMLDOC = { - + }; /** The current version string of this application. */ @@ -18,9 +18,9 @@ IO.includeDir("handlers/XMLDOC/"); * @type Symbol[] */ XMLDOC.handle = function(srcFile, src) { - + }; XMLDOC.publish = function(symbolgroup) { - + } \ No newline at end of file diff --git a/tests/lib/jsdoc-toolkit/app/lib/JSDOC.js b/tests/lib/jsdoc-toolkit/app/lib/JSDOC.js index 5de7b9efd5f12d9028f1e220852a34438e55f5d8..9f14c5c1665b6dee8d571994ea2c4974e48f8801 100644 --- a/tests/lib/jsdoc-toolkit/app/lib/JSDOC.js +++ b/tests/lib/jsdoc-toolkit/app/lib/JSDOC.js @@ -1,7 +1,7 @@ /** @overview @date $Date: 2010-06-13 22:02:44 +0100 (Sun, 13 Jun 2010) $ - @version $Revision: 837 $ + @version $Revision: 837 $ @location $HeadURL: https://jsdoc-toolkit.googlecode.com/svn/tags/jsdoc_toolkit-2.4.0/jsdoc-toolkit/app/lib/JSDOC.js $ @name JSDOC.js */ @@ -18,9 +18,9 @@ JSDOC = { */ if (typeof arguments == "undefined") arguments = []; JSDOC.opt = Opt.get( - arguments, + arguments, { - a: "allfunctions", + a: "allfunctions", c: "conf", d: "directory", "D[]": "define", @@ -71,31 +71,31 @@ JSDOC.usage = function() { print(" -u or --unique\n Force file names to be unique, but not based on symbol names.\n"); print(" -v or --verbose\n Provide verbose feedback about what is happening.\n"); print(" -x=<EXT>[,EXT]... or --ext=<EXT>[,EXT]...\n Scan source files with the given extension/s (defaults to js).\n"); - + quit(); } /*t: plan(4, "Testing JSDOC namespace."); - + is( typeof JSDOC, "object", "JSDOC.usage is a function." ); - + is( typeof JSDOC.VERSION, "string", "JSDOC.VERSION is a string." ); - + is( typeof JSDOC.usage, "function", "JSDOC.usage is a function." ); - + is( typeof JSDOC.opt, "object", diff --git a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/DocComment.js b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/DocComment.js index 4b21cd71768fe16bc8ef291f13c364a21e961259..b99a08317e737bdbed5a58d920ca47d136b17393 100644 --- a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/DocComment.js +++ b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/DocComment.js @@ -4,7 +4,7 @@ if (typeof JSDOC == "undefined") JSDOC = {}; Create a new DocComment. This takes a raw documentation comment, and wraps it in useful accessors. @class Represents a documentation comment object. - */ + */ JSDOC.DocComment = function(/**String*/comment) { this.init(); if (typeof comment != "undefined") { @@ -28,35 +28,35 @@ JSDOC.DocComment.prototype.parse = function(/**String*/comment) { comment = "/** @desc */"; this.isUserComment = false; } - + this.src = JSDOC.DocComment.unwrapComment(comment); - + this.meta = ""; if (this.src.indexOf("#") == 0) { this.src.match(/#(.+[+-])([\s\S]*)$/); if (RegExp.$1) this.meta = RegExp.$1; if (RegExp.$2) this.src = RegExp.$2; } - + if (typeof JSDOC.PluginManager != "undefined") { JSDOC.PluginManager.run("onDocCommentSrc", this); } - + this.fixDesc(); this.src = JSDOC.DocComment.shared+"\n"+this.src; - - this.tagTexts = + + this.tagTexts = this.src .split(/(^|[\r\n])\s*@/) .filter(function($){return $.match(/\S/)}); - + /** The tags found in the comment. @type JSDOC.DocTag[] */ this.tags = this.tagTexts.map(function($){return new JSDOC.DocTag($)}); - + if (typeof JSDOC.PluginManager != "undefined") { JSDOC.PluginManager.run("onDocCommentTags", this); } @@ -66,14 +66,14 @@ JSDOC.DocComment.prototype.parse = function(/**String*/comment) { plan(5, "testing JSDOC.DocComment"); requires("../frame/String.js"); requires("../lib/JSDOC/DocTag.js"); - + var com = new JSDOC.DocComment("/**@foo some\n* comment here*"+"/"); is(com.tagTexts[0], "foo some\ncomment here", "first tag text is found."); is(com.tags[0].title, "foo", "the title is found in a comment with one tag."); - + var com = new JSDOC.DocComment("/** @foo first\n* @bar second*"+"/"); is(com.getTag("bar").length, 1, "getTag() returns one tag by that title."); - + JSDOC.DocComment.shared = "@author John Smith"; var com = new JSDOC.DocComment("/**@foo some\n* comment here*"+"/"); is(com.tags[0].title, "author", "shared comment is added."); @@ -85,16 +85,16 @@ JSDOC.DocComment.prototype.parse = function(/**String*/comment) { */ JSDOC.DocComment.prototype.fixDesc = function() { if (this.meta && this.meta != "@+") return; - if (/^\s*[^@\s]/.test(this.src)) { + if (/^\s*[^@\s]/.test(this.src)) { this.src = "@desc "+this.src; } } /*t: plan(5, "testing JSDOC.DocComment#fixDesc"); - + var com = new JSDOC.DocComment(); - + com.src = "this is a desc\n@author foo"; com.fixDesc(); is(com.src, "@desc this is a desc\n@author foo", "if no @desc tag is provided one is added."); @@ -106,7 +106,7 @@ JSDOC.DocComment.prototype.fixDesc = function() { com.src = "\nx"; com.fixDesc(); is(com.src, "@desc \nx", "if no @desc tag is provided one is added to return and character."); - + com.src = " "; com.fixDesc(); is(com.src, " ", "if no @desc tag is provided one is not added to just whitespace."); @@ -128,23 +128,23 @@ JSDOC.DocComment.unwrapComment = function(/**String*/comment) { /*t: plan(5, "testing JSDOC.DocComment.unwrapComment"); - + var com = "/**x*"+"/"; var unwrapped = JSDOC.DocComment.unwrapComment(com); is(unwrapped, "x", "a single character jsdoc is found."); - + com = "/***x*"+"/"; unwrapped = JSDOC.DocComment.unwrapComment(com); is(unwrapped, "x", "three stars are allowed in the opener."); - + com = "/****x*"+"/"; unwrapped = JSDOC.DocComment.unwrapComment(com); is(unwrapped, "*x", "fourth star in the opener is kept."); - + com = "/**x\n * y\n*"+"/"; unwrapped = JSDOC.DocComment.unwrapComment(com); is(unwrapped, "x\ny\n", "leading stars and spaces are trimmed."); - + com = "/**x\n * y\n*"+"/"; unwrapped = JSDOC.DocComment.unwrapComment(com); is(unwrapped, "x\n y\n", "only first space after leading stars are trimmed."); @@ -181,7 +181,7 @@ JSDOC.DocComment.prototype.deleteTag = function(/**String*/tagTitle) { plan(1, "testing JSDOC.DocComment#getTag"); requires("../frame/String.js"); requires("../lib/JSDOC/DocTag.js"); - + var com = new JSDOC.DocComment("/**@foo some\n* @bar\n* @bar*"+"/"); is(com.getTag("bar").length, 2, "getTag returns expected number of tags."); */ @@ -195,9 +195,9 @@ JSDOC.DocComment.shared = ""; plan(2, "testing JSDOC.DocComment.shared"); requires("../frame/String.js"); requires("../lib/JSDOC/DocTag.js"); - + JSDOC.DocComment.shared = "@author Michael"; - + var com = new JSDOC.DocComment("/**@foo\n* @foo*"+"/"); is(com.getTag("author").length, 1, "getTag returns shared tag."); is(com.getTag("foo").length, 2, "getTag returns unshared tags too."); diff --git a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/DocTag.js b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/DocTag.js index 77ec07cacdbf06266f4ff278d5417635cc80ca9d..42605fc297e656d458885311715562af214731f3 100644 --- a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/DocTag.js +++ b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/DocTag.js @@ -20,7 +20,7 @@ JSDOC.DocTag.prototype.init = function() { this.isOptional = false; this.defaultValue = ""; this.desc = ""; - + return this; } @@ -36,9 +36,9 @@ JSDOC.DocTag.prototype.parse = function(src) { if (JSDOC.PluginManager) { JSDOC.PluginManager.run("onDocTagSynonym", this); } - + src = this.nibbleType(src); - + // only some tags are allowed to have names. if (this.title == "param" || this.title == "property" || this.title == "config") { // @config is deprecated src = this.nibbleName(src); @@ -49,10 +49,10 @@ JSDOC.DocTag.prototype.parse = function(src) { else throw e; } this.desc = src; // whatever is left - + // example tags need to have whitespace preserved if (this.title != "example") this.desc = this.desc.trim(); - + if (JSDOC.PluginManager) { JSDOC.PluginManager.run("onDocTag", this); } @@ -67,7 +67,7 @@ JSDOC.DocTag.prototype.toString = function() { /*t: plan(1, "testing JSDOC.DocTag#toString"); - + var tag = new JSDOC.DocTag("param {object} date A valid date."); is(""+tag, "A valid date.", "stringifying a tag returns the desc."); */ @@ -79,28 +79,28 @@ JSDOC.DocTag.prototype.toString = function() { */ JSDOC.DocTag.prototype.nibbleTitle = function(src) { if (typeof src != "string") throw "src must be a string not "+(typeof src); - + var parts = src.match(/^\s*(\S+)(?:\s([\s\S]*))?$/); if (parts && parts[1]) this.title = parts[1]; if (parts && parts[2]) src = parts[2]; else src = ""; - + return src; } /*t: plan(8, "testing JSDOC.DocTag#nibbleTitle"); - + var tag = new JSDOC.DocTag(); - + tag.init().nibbleTitle("aTitleGoesHere"); is(tag.title, "aTitleGoesHere", "a title can be found in a single-word string."); - + var src = tag.init().nibbleTitle("aTitleGoesHere and the rest"); is(tag.title, "aTitleGoesHere", "a title can be found in a multi-word string."); is(src, "and the rest", "the rest is returned when the title is nibbled off."); - + src = tag.init().nibbleTitle(""); is(tag.title, "", "given an empty string the title is empty."); is(src, "", "the rest is empty when the tag is empty."); @@ -121,7 +121,7 @@ JSDOC.DocTag.prototype.nibbleTitle = function(src) { */ JSDOC.DocTag.prototype.nibbleType = function(src) { if (typeof src != "string") throw "src must be a string not "+(typeof src); - + if (src.match(/^\s*\{/)) { var typeRange = src.balance("{", "}"); if (typeRange[1] == -1) { @@ -131,25 +131,25 @@ JSDOC.DocTag.prototype.nibbleType = function(src) { this.type = this.type.replace(/\s*,\s*/g, "|"); // multiples can be separated by , or | src = src.substring(typeRange[1]+1); } - + return src; } /*t: plan(5, "testing JSDOC.DocTag.parser.nibbleType"); requires("../frame/String.js"); - + var tag = new JSDOC.DocTag(); - + tag.init().nibbleType("{String[]} aliases"); is(tag.type, "String[]", "type can have non-alpha characters."); - + tag.init().nibbleType("{ aTypeGoesHere } etc etc"); is(tag.type, "aTypeGoesHere", "type is trimmed."); - + tag.init().nibbleType("{ oneType, twoType ,\n threeType } etc etc"); is(tag.type, "oneType|twoType|threeType", "multiple types can be separated by commas."); - + var error; try { tag.init().nibbleType("{widget foo"); } catch(e) { error = e; } @@ -165,9 +165,9 @@ JSDOC.DocTag.prototype.nibbleType = function(src) { */ JSDOC.DocTag.prototype.nibbleName = function(src) { if (typeof src != "string") throw "src must be a string not "+(typeof src); - + src = src.trim(); - + // is optional? if (src.charAt(0) == "[") { var nameRange = src.balance("[", "]"); @@ -176,9 +176,9 @@ JSDOC.DocTag.prototype.nibbleName = function(src) { } this.name = src.substring(nameRange[0]+1, nameRange[1]).trim(); this.isOptional = true; - + src = src.substring(nameRange[1]+1); - + // has default value? var nameAndValue = this.name.split("="); if (nameAndValue.length) { @@ -193,7 +193,7 @@ JSDOC.DocTag.prototype.nibbleName = function(src) { if (parts[2]) src = parts[2].trim(); else src = ""; } - } + } return src; } @@ -201,27 +201,27 @@ JSDOC.DocTag.prototype.nibbleName = function(src) { /*t: requires("../frame/String.js"); plan(9, "testing JSDOC.DocTag.parser.nibbleName"); - + var tag = new JSDOC.DocTag(); - + tag.init().nibbleName("[foo] This is a description."); is(tag.isOptional, true, "isOptional syntax is detected."); is(tag.name, "foo", "optional param name is found."); - + tag.init().nibbleName("[foo] This is a description."); is(tag.isOptional, true, "isOptional syntax is detected when no type."); is(tag.name, "foo", "optional param name is found when no type."); - + tag.init().nibbleName("[foo=7] This is a description."); is(tag.name, "foo", "optional param name is found when default value."); is(tag.defaultValue, 7, "optional param default value is found when default value."); - + //tag.init().nibbleName("[foo= a value] This is a description."); //is(tag.defaultValue, " a value", "optional param default value is found when default value has spaces (issue #112)."); - + tag.init().nibbleName("[foo=[]] This is a description."); is(tag.defaultValue, "[]", "optional param default value is found when default value is [] (issue #95)."); - + tag.init().nibbleName("[foo=a=b] This is a description."); is(tag.name, "foo", "optional param name is found when default value is a=b."); is(tag.defaultValue, "a=b", "optional param default value is found when default value is a=b.") @@ -230,9 +230,9 @@ JSDOC.DocTag.prototype.nibbleName = function(src) { /*t: plan(32, "Testing JSDOC.DocTag.parser."); requires("../frame/String.js"); - + var tag = new JSDOC.DocTag(); - + is(typeof tag, "object", "JSDOC.DocTag.parser with an empty string returns an object."); is(typeof tag.title, "string", "returned object has a string property 'title'."); is(typeof tag.type, "string", "returned object has a string property 'type'."); @@ -240,37 +240,37 @@ JSDOC.DocTag.prototype.nibbleName = function(src) { is(typeof tag.defaultValue, "string", "returned object has a string property 'defaultValue'."); is(typeof tag.isOptional, "boolean", "returned object has a boolean property 'isOptional'."); is(typeof tag.desc, "string", "returned object has a string property 'desc'."); - + tag = new JSDOC.DocTag("param {widget} foo"); is(tag.title, "param", "param title is found."); is(tag.name, "foo", "param name is found when desc is missing."); is(tag.desc, "", "param desc is empty when missing."); - + tag = new JSDOC.DocTag("param {object} date A valid date."); is(tag.name, "date", "param name is found with a type."); is(tag.type, "object", "param type is found."); is(tag.desc, "A valid date.", "param desc is found with a type."); - + tag = new JSDOC.DocTag("param aName a description goes\n here."); is(tag.name, "aName", "param name is found without a type."); is(tag.desc, "a description goes\n here.", "param desc is found without a type."); - + tag = new JSDOC.DocTag("param {widget}"); is(tag.name, "", "param name is empty when it is not given."); - + tag = new JSDOC.DocTag("param {widget} [foo] This is a description."); is(tag.name, "foo", "optional param name is found."); - + tag = new JSDOC.DocTag("return {aType} This is a description."); is(tag.type, "aType", "when return tag has no name, type is found."); is(tag.desc, "This is a description.", "when return tag has no name, desc is found."); - + tag = new JSDOC.DocTag("author Joe Coder <jcoder@example.com>"); is(tag.title, "author", "author tag has a title."); is(tag.type, "", "the author tag has no type."); is(tag.name, "", "the author tag has no name."); is(tag.desc, "Joe Coder <jcoder@example.com>", "author tag has desc."); - + tag = new JSDOC.DocTag("private \t\n "); is(tag.title, "private", "private tag has a title."); is(tag.type, "", "the private tag has no type."); @@ -279,16 +279,16 @@ JSDOC.DocTag.prototype.nibbleName = function(src) { tag = new JSDOC.DocTag("example\n example(code);\n more();"); is(tag.desc, " example(code);\n more();", "leading whitespace (less one) in examples code is preserved."); - + tag = new JSDOC.DocTag("param theName \n"); is(tag.name, "theName", "name only is found."); - + tag = new JSDOC.DocTag("type theDesc \n"); is(tag.desc, "theDesc", "desc only is found."); - + tag = new JSDOC.DocTag("type {theType} \n"); is(tag.type, "theType", "type only is found."); - + tag = new JSDOC.DocTag(""); is(tag.title, "", "title is empty when tag is empty."); */ \ No newline at end of file diff --git a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js index 02275a6910816ffeaa64f6b2df84173307843ccf..c199a40d526b16e73db044496a38962b83a72915 100644 --- a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js +++ b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js @@ -7,13 +7,13 @@ JSDOC.JsDoc = function(/**object*/ opt) { if (opt) { JSDOC.opt = opt; } - + if (JSDOC.opt.h) { JSDOC.usage(); quit(); } - - // defend against options that are not sane + + // defend against options that are not sane if (JSDOC.opt._.length == 0) { LOG.warn("No source files to work on. Nothing to do."); quit(); @@ -21,7 +21,7 @@ JSDOC.JsDoc = function(/**object*/ opt) { if (JSDOC.opt.t === true || JSDOC.opt.d === true) { JSDOC.usage(); } - + if (typeof JSDOC.opt.d == "string") { if (!JSDOC.opt.d.charAt(JSDOC.opt.d.length-1).match(/[\\\/]/)) { JSDOC.opt.d = JSDOC.opt.d+"/"; @@ -30,19 +30,19 @@ JSDOC.JsDoc = function(/**object*/ opt) { IO.mkPath(JSDOC.opt.d); } if (JSDOC.opt.e) IO.setEncoding(JSDOC.opt.e); - + // the -r option: scan source directories recursively if (typeof JSDOC.opt.r == "boolean") JSDOC.opt.r = 10; else if (!isNaN(parseInt(JSDOC.opt.r))) JSDOC.opt.r = parseInt(JSDOC.opt.r); else JSDOC.opt.r = 1; - + // the -D option: define user variables var D = {}; if (JSDOC.opt.D) { for (var i = 0; i < JSDOC.opt.D.length; i++) { var param = JSDOC.opt.D[i]; // remove first and last character if both == " - if ( + if ( param.length > 1 && param.charAt(0) == '"' && param.charAt(param.length-1) == '"' @@ -65,7 +65,7 @@ JSDOC.JsDoc = function(/**object*/ opt) { JSDOC.opt.D[c] = JSDOC.conf.D[c]; } } - + // Give plugins a chance to initialize if (defined(JSDOC.PluginManager)) { JSDOC.PluginManager.run("onInit", JSDOC.opt); @@ -82,18 +82,18 @@ JSDOC.JsDoc = function(/**object*/ opt) { */ JSDOC.JsDoc._getSrcFiles = function() { JSDOC.JsDoc.srcFiles = []; - + var ext = ["js"]; if (JSDOC.opt.x) { ext = JSDOC.opt.x.split(",").map(function($) {return $.toLowerCase()}); } - + for (var i = 0; i < JSDOC.opt._.length; i++) { JSDOC.JsDoc.srcFiles = JSDOC.JsDoc.srcFiles.concat( IO.ls(JSDOC.opt._[i], JSDOC.opt.r).filter( function($) { var thisExt = $.split(".").pop().toLowerCase(); - + if (JSDOC.opt.E) { for(var n = 0; n < JSDOC.opt.E.length; n++) { if ($.match(new RegExp(JSDOC.opt.E[n]))) { @@ -102,13 +102,13 @@ JSDOC.JsDoc._getSrcFiles = function() { } } } - + return (ext.indexOf(thisExt) > -1); // we're only interested in files with certain extensions } ) ); } - + return JSDOC.JsDoc.srcFiles; } @@ -116,9 +116,9 @@ JSDOC.JsDoc._parseSrcFiles = function() { JSDOC.Parser.init(); for (var i = 0, l = JSDOC.JsDoc.srcFiles.length; i < l; i++) { var srcFile = JSDOC.JsDoc.srcFiles[i]; - + if (JSDOC.opt.v) LOG.inform("Parsing file: " + srcFile); - + try { var src = IO.readFile(srcFile); } diff --git a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js index bcaebc9c553cd34aac5926adf883e471ea9d5d14..ba59e413e6bc92dfcdcb0272c5742713dfbcbac1 100644 --- a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js +++ b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js @@ -3,7 +3,7 @@ */ JSDOC.JsPlate = function(templateFile) { if (templateFile) this.template = IO.readFile(templateFile); - + this.templateFile = templateFile; this.code = ""; this.parse(); @@ -14,11 +14,11 @@ JSDOC.JsPlate.prototype.parse = function() { this.code = "var output=\u001e"+this.template; this.code = this.code.replace( - /<for +each="(.+?)" +in="(.+?)" *>/gi, + /<for +each="(.+?)" +in="(.+?)" *>/gi, function (match, eachName, inName) { return "\u001e;\rvar $"+eachName+"_keys = keys("+inName+");\rfor(var $"+eachName+"_i = 0; $"+eachName+"_i < $"+eachName+"_keys.length; $"+eachName+"_i++) {\rvar $"+eachName+"_last = ($"+eachName+"_i == $"+eachName+"_keys.length-1);\rvar $"+eachName+"_key = $"+eachName+"_keys[$"+eachName+"_i];\rvar "+eachName+" = "+inName+"[$"+eachName+"_key];\routput+=\u001e"; } - ); + ); this.code = this.code.replace(/<if test="(.+?)">/g, "\u001e;\rif ($1) { output+=\u001e"); this.code = this.code.replace(/<elseif test="(.+?)"\s*\/>/g, "\u001e;}\relse if ($1) { output+=\u001e"); this.code = this.code.replace(/<else\s*\/>/g, "\u001e;}\relse { output+=\u001e"); @@ -83,7 +83,7 @@ JSDOC.JsPlate.values = function(obj) { JSDOC.JsPlate.prototype.process = function(data, compact) { var keys = JSDOC.JsPlate.keys; var values = JSDOC.JsPlate.values; - + try { eval(this.code); } @@ -95,7 +95,7 @@ JSDOC.JsPlate.prototype.process = function(data, compact) { print("line "+e.lineNumber+": "+lines[e.lineNumber-1]); print(""); } - + if (compact) { // patch by mcbain.asm // Remove lines that contain only space-characters, usually left by lines in the template // which originally only contained JSPlate tags or code. This makes it easier to write @@ -103,7 +103,7 @@ JSDOC.JsPlate.prototype.process = function(data, compact) { // Lines purposely left blank (just a line ending) are left alone. output = output.replace(/\s+?(\r?)\n/g, "$1\n"); } - + /*debug*///print(this.code); return output; } \ No newline at end of file diff --git a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Lang.js b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Lang.js index 62919d7d8306fb17e61aa063a02d0ac90418860b..4091c75b896a0403b9d8210177335de0216e1e63 100644 --- a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Lang.js +++ b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Lang.js @@ -76,29 +76,29 @@ JSDOC.Lang.punc.names = { ",": "COMMA", "?": "HOOK", ":": "COLON", - "||": "OR", + "||": "OR", "&&": "AND", "|": "BITWISE_OR", "^": "BITWISE_XOR", "&": "BITWISE_AND", - "===": "STRICT_EQ", + "===": "STRICT_EQ", "==": "EQ", "=": "ASSIGN", "!==": "STRICT_NE", "!=": "NE", "<<": "LSH", - "<=": "LE", + "<=": "LE", "<": "LT", ">>>": "URSH", ">>": "RSH", ">=": "GE", - ">": "GT", + ">": "GT", "++": "INCREMENT", "--": "DECREMENT", "+": "PLUS", "-": "MINUS", "*": "MUL", - "/": "DIV", + "/": "DIV", "%": "MOD", "!": "NOT", "~": "BITWISE_NOT", diff --git a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Parser.js b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Parser.js index e489c61d6bf201493236e7eff82ee75c7a74818b..90889b0deed743134a77944e4e66a25b6d298e29 100644 --- a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Parser.js +++ b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Parser.js @@ -13,7 +13,7 @@ JSDOC.Parser = { treatUnderscoredAsPrivate: true, // factory: true explain: false // factory: false }, - + addSymbol: function(symbol) { if (JSDOC.Parser.rename) { @@ -26,13 +26,13 @@ JSDOC.Parser = { } } } - + if (JSDOC.opt.S) { if (typeof JSDOC.Parser.secureModules == "undefined") JSDOC.Parser.secureModules = {}; if (/^exports\./.test(symbol.alias)) { symbol.srcFile.match(/(^|[\\\/])([^\\\/]+)\.js/i); var fileNS = RegExp.$2; - + // need to create the namespace associated with this file first if (!JSDOC.Parser.secureModules[fileNS]) { JSDOC.Parser.secureModules[fileNS] = 1; @@ -44,7 +44,7 @@ JSDOC.Parser = { nsSymbol.desc = (JSDOC.Parser.symbols.getSymbol(symbol.srcFile) || {desc: ""}).desc; JSDOC.Parser.addSymbol(nsSymbol); } - + symbol.alias = symbol.alias.replace(/^exports\./, fileNS + '.'); symbol.name = symbol.name.replace(/^exports\./, ''); symbol.memberOf = fileNS; @@ -66,7 +66,7 @@ JSDOC.Parser = { } } } - + // we don't document anonymous things if (JSDOC.Parser.conf.ignoreAnonymous && symbol.name.match(/\$anonymous\b/)) return; @@ -74,15 +74,15 @@ JSDOC.Parser = { if (JSDOC.Parser.conf.treatUnderscoredAsPrivate && symbol.name.match(/[.#-]_[^.#-]+$/)) { if (!symbol.comment.getTag("public").length > 0) symbol.isPrivate = true; } - + // -p flag is required to document private things if (!JSDOC.opt.p && symbol.isPrivate) return; // issue #161 fixed by mcbain.asm - + // ignored things are not documented, this doesn't cascade if (symbol.isIgnored) return; JSDOC.Parser.symbols.addSymbol(symbol); }, - + addBuiltin: function(name) { var builtin = new JSDOC.Symbol(name, [], "CONSTRUCTOR", new JSDOC.DocComment("")); builtin.isNamespace = true; @@ -91,15 +91,15 @@ JSDOC.Parser = { JSDOC.Parser.addSymbol(builtin); return builtin; }, - + init: function() { JSDOC.Parser.symbols = new JSDOC.SymbolSet(); JSDOC.Parser.walker = new JSDOC.Walker(); }, - + finish: function() { - JSDOC.Parser.symbols.relate(); - + JSDOC.Parser.symbols.relate(); + // make a litle report about what was found if (JSDOC.Parser.conf.explain) { var symbols = JSDOC.Parser.symbols.toArray(); @@ -120,27 +120,27 @@ JSDOC.Parser = { JSDOC.Parser.parse = function(/**JSDOC.TokenStream*/ts, /**String*/srcFile) { JSDOC.Symbol.srcFile = (srcFile || ""); JSDOC.DocComment.shared = ""; // shared comments don't cross file boundaries - + if (!JSDOC.Parser.walker) JSDOC.Parser.init(); JSDOC.Parser.walker.walk(ts); // adds to our symbols - + // filter symbols by option for (var p = JSDOC.Parser.symbols._index.first(); p; p = JSDOC.Parser.symbols._index.next()) { var symbol = p.value; - + if (!symbol) continue; - + if (symbol.is("FILE") || symbol.is("GLOBAL")) { continue; } else if (!JSDOC.opt.a && !symbol.comment.isUserComment) { JSDOC.Parser.symbols.deleteSymbol(symbol.alias); } - + if (/#$/.test(symbol.alias)) { // we don't document prototypes JSDOC.Parser.symbols.deleteSymbol(symbol.alias); } } - + return JSDOC.Parser.symbols.toArray(); } diff --git a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/PluginManager.js b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/PluginManager.js index 9c9119310042ea0106c6ec940c596c1e9c4e7a2b..857353265a264658c207ec86d993ec409d8aede4 100644 --- a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/PluginManager.js +++ b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/PluginManager.js @@ -13,8 +13,8 @@ JSDOC.PluginManager.registerPlugin = function(/**String*/name, /**Object*/handle /** The collection of all plugins. Requires a unique name for each. */ JSDOC.PluginManager.plugins = {}; - - + + JSDOC.PluginManager.plugins[name] = handlers; } diff --git a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Symbol.js b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Symbol.js index 1aa44da8b37104ec30c013a1339f917eaa89b815..088496eb9d078ae6f74ac1a466a7770419f5da91 100644 --- a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Symbol.js +++ b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Symbol.js @@ -56,7 +56,7 @@ JSDOC.Symbol.prototype.serialize = function() { keys.push (p); } keys = keys.sort(); - + var out = ""; for (var i in keys) { if (typeof this[keys[i]] == "function") continue; @@ -78,7 +78,7 @@ JSDOC.Symbol.prototype.__defineSetter__("name", JSDOC.Symbol.prototype.__defineGetter__("name", function() { return this._name; } ); -JSDOC.Symbol.prototype.__defineSetter__("params", +JSDOC.Symbol.prototype.__defineSetter__("params", function(v) { for (var i = 0, l = v.length; i < l; i++) { if (v[i].constructor != JSDOC.DocTag) { // may be a generic object parsed from signature, like {type:..., name:...} @@ -123,19 +123,19 @@ JSDOC.Symbol.prototype.populate = function( /** JSDOC.DocComment */ comment ) { this.$args = arguments; - + this.name = name; this.alias = this.name; - + this.params = params; this.isa = (isa == "VIRTUAL")? "OBJECT":isa; this.comment = comment || new JSDOC.DocComment(""); this.srcFile = JSDOC.Symbol.srcFile; - + if (this.is("FILE") && !this.alias) this.alias = this.srcFile; this.setTags(); - + if (typeof JSDOC.PluginManager != "undefined") { JSDOC.PluginManager.run("onSymbol", this); } @@ -147,10 +147,10 @@ JSDOC.Symbol.prototype.setTags = function() { if (authors.length) { this.author = authors.map(function($){return $.desc;}).join(", "); } - + /*t: plan(34, "testing JSDOC.Symbol"); - + requires("../lib/JSDOC/DocComment.js"); requires("../frame/String.js"); requires("../lib/JSDOC/DocTag.js"); @@ -158,76 +158,76 @@ JSDOC.Symbol.prototype.setTags = function() { var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@author Joe Smith*"+"/")); is(sym.author, "Joe Smith", "@author tag, author is found."); */ - + // @desc var descs = this.comment.getTag("desc"); if (descs.length) { this.desc = descs.map(function($){return $.desc;}).join("\n"); // multiple descriptions are concatenated into one } - + /*t: var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@desc This is a description.*"+"/")); is(sym.desc, "This is a description.", "@desc tag, description is found."); */ - + // @overview if (this.is("FILE")) { if (!this.alias) this.alias = this.srcFile; - + var overviews = this.comment.getTag("overview"); if (overviews.length) { this.desc = [this.desc].concat(overviews.map(function($){return $.desc;})).join("\n"); } } - + /*t: var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@overview This is an overview.*"+"/")); is(sym.desc, "\nThis is an overview.", "@overview tag, description is found."); */ - + // @since var sinces = this.comment.getTag("since"); if (sinces.length) { this.since = sinces.map(function($){return $.desc;}).join(", "); } - + /*t: var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@since 1.01*"+"/")); is(sym.since, "1.01", "@since tag, description is found."); */ - + // @constant if (this.comment.getTag("constant").length) { this.isConstant = true; } - + /*t: var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@constant*"+"/")); is(sym.isConstant, true, "@constant tag, isConstant set."); */ - + // @version var versions = this.comment.getTag("version"); if (versions.length) { this.version = versions.map(function($){return $.desc;}).join(", "); } - + /*t: var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@version 2.0x*"+"/")); is(sym.version, "2.0x", "@version tag, version is found."); */ - + // @deprecated var deprecateds = this.comment.getTag("deprecated"); if (deprecateds.length) { this.deprecated = deprecateds.map(function($){return $.desc;}).join("\n"); } - + /*t: var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@deprecated Use other method.*"+"/")); is(sym.deprecated, "Use other method.", "@deprecated tag, desc is found."); */ - + // @example var examples = this.comment.getTag("example"); if (examples.length) { @@ -239,50 +239,50 @@ JSDOC.Symbol.prototype.setTags = function() { } ); } - + /*t: var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@example This\n is an example. \n*"+"/")); isnt(typeof sym.example[0], "undefined", "@example tag, creates sym.example array."); is(sym.example[0], "This\n is an example.", "@example tag, desc is found."); */ - + // @see var sees = this.comment.getTag("see"); if (sees.length) { var thisSee = this.see; sees.map(function($){thisSee.push($.desc);}); } - + /*t: var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@see The other thing.*"+"/")); is(sym.see, "The other thing.", "@see tag, desc is found."); */ - + // @class var classes = this.comment.getTag("class"); if (classes.length) { this.isa = "CONSTRUCTOR"; this.classDesc = classes[0].desc; // desc can't apply to the constructor as there is none. } - + /*t: var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@class This describes the class.*"+"/")); is(sym.isa, "CONSTRUCTOR", "@class tag, makes symbol a constructor."); is(sym.classDesc, "This describes the class.", "@class tag, class description is found."); */ - + // @namespace var namespaces = this.comment.getTag("namespace"); if (namespaces.length) { this.classDesc = namespaces[0].desc; this.isNamespace = true; } - + /*t: var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@namespace This describes the namespace.*"+"/")); is(sym.classDesc, "This describes the namespace.", "@namespace tag, class description is found."); */ - + // @param var params = this.comment.getTag("param"); if (params.length) { @@ -305,21 +305,21 @@ JSDOC.Symbol.prototype.setTags = function() { } } } - + /*t: var sym = new JSDOC.Symbol("foo", [{type: "array", name: "pages"}], "FUNCTION", new JSDOC.DocComment("/**Description.*"+"/")); is(sym.params.length, 1, "parser defined param is found."); - + sym = new JSDOC.Symbol("foo", [], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {array} pages*"+"/")); is(sym.params.length, 1, "user defined param is found."); is(sym.params[0].type, "array", "user defined param type is found."); is(sym.params[0].name, "pages", "user defined param name is found."); - + sym = new JSDOC.Symbol("foo", [{type: "array", name: "pages"}], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {string} uid*"+"/")); is(sym.params.length, 1, "user defined param overwrites parser defined param."); is(sym.params[0].type, "string", "user defined param type overwrites parser defined param type."); is(sym.params[0].name, "uid", "user defined param name overwrites parser defined param name."); - + sym = new JSDOC.Symbol("foo", [{type: "array", name: "pages"}, {type: "number", name: "count"}], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {string} uid*"+"/")); is(sym.params.length, 2, "user defined params overlay parser defined params."); is(sym.params[1].type, "number", "user defined param type overlays parser defined param type."); @@ -329,17 +329,17 @@ JSDOC.Symbol.prototype.setTags = function() { is(sym.params.length, 1, "user defined param with description is found."); is(sym.params[0].desc, "The pages description.", "user defined param description is found."); */ - + // @constructor if (this.comment.getTag("constructor").length) { this.isa = "CONSTRUCTOR"; } - + /*t: var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@constructor*"+"/")); is(sym.isa, "CONSTRUCTOR", "@constructor tag, makes symbol a constructor."); */ - + // @static if (this.comment.getTag("static").length) { this.isStatic = true; @@ -347,56 +347,56 @@ JSDOC.Symbol.prototype.setTags = function() { this.isNamespace = true; } } - + /*t: var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@static\n@constructor*"+"/")); is(sym.isStatic, true, "@static tag, makes isStatic true."); is(sym.isNamespace, true, "@static and @constructor tag, makes isNamespace true."); */ - + // @inner if (this.comment.getTag("inner").length) { this.isInner = true; this.isStatic = false; } - + /*t: var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@inner*"+"/")); is(sym.isStatic, false, "@inner tag, makes isStatic false."); is(sym.isInner, true, "@inner makes isInner true."); */ - + // @name var names = this.comment.getTag("name"); if (names.length) { this.name = names[0].desc; } - + /*t: // todo */ - + // @field if (this.comment.getTag("field").length) { this.isa = "OBJECT"; } - + /*t: var sym = new JSDOC.Symbol("foo", [], "FUNCTION", new JSDOC.DocComment("/**@field*"+"/")); is(sym.isa, "OBJECT", "@field tag, makes symbol an object."); */ - + // @function if (this.comment.getTag("function").length) { this.isa = "FUNCTION"; if (/event:/.test(this.alias)) this.isEvent = true; } - + /*t: var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@function*"+"/")); is(sym.isa, "FUNCTION", "@function tag, makes symbol a function."); */ - + // @event var events = this.comment.getTag("event"); if (events.length) { @@ -405,13 +405,13 @@ JSDOC.Symbol.prototype.setTags = function() { if (!/event:/.test(this.alias)) this.alias = this.alias.replace(/^(.*[.#-])([^.#-]+)$/, "$1event:$2"); } - + /*t: var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@event*"+"/")); is(sym.isa, "FUNCTION", "@event tag, makes symbol a function."); is(sym.isEvent, true, "@event makes isEvent true."); */ - + // @fires var fires = this.comment.getTag("fires"); if (fires.length) { @@ -419,11 +419,11 @@ JSDOC.Symbol.prototype.setTags = function() { this.fires.push(fires[i].desc); } } - + /*t: // todo */ - + // @property var properties = this.comment.getTag("property"); if (properties.length) { @@ -438,7 +438,7 @@ JSDOC.Symbol.prototype.setTags = function() { JSDOC.Parser.addSymbol(property); } } - + /*t: // todo */ @@ -449,52 +449,52 @@ JSDOC.Symbol.prototype.setTags = function() { this.returns = returns; this.type = returns.map(function($){return $.type}).join(", "); } - + /*t: // todo */ - + // @exception this.exceptions = this.comment.getTag("throws"); - + /*t: // todo */ - + // @requires var requires = this.comment.getTag("requires"); if (requires.length) { this.requires = requires.map(function($){return $.desc}); } - + /*t: // todo */ - + // @type var types = this.comment.getTag("type"); if (types.length) { this.type = types[0].desc; //multiple type tags are ignored } - + /*t: // todo */ - + // @private if (this.comment.getTag("private").length || this.isInner) { this.isPrivate = true; } - + // @ignore if (this.comment.getTag("ignore").length) { this.isIgnored = true; } - + /*t: // todo */ - + // @inherits ... as ... var inherits = this.comment.getTag("inherits"); if (inherits.length) { @@ -504,7 +504,7 @@ JSDOC.Symbol.prototype.setTags = function() { var inAs = RegExp.$2 || inAlias; if (inAlias) inAlias = inAlias.replace(/\.prototype\.?/g, "#"); - + if (inAs) { inAs = inAs.replace(/\.prototype\.?/g, "#"); inAs = inAs.replace(/^this\.?/, "#"); @@ -521,14 +521,14 @@ JSDOC.Symbol.prototype.setTags = function() { this.inherits.push({alias: inAlias, as: inAs}); } } - + /*t: // todo */ - + // @augments this.augments = this.comment.getTag("augments"); - + // @default var defaults = this.comment.getTag("default"); if (defaults.length) { @@ -536,11 +536,11 @@ JSDOC.Symbol.prototype.setTags = function() { this.defaultValue = defaults[0].desc; } } - + /*t: // todo */ - + // @memberOf var memberOfs = this.comment.getTag("memberOf"); if (memberOfs.length) { @@ -551,16 +551,16 @@ JSDOC.Symbol.prototype.setTags = function() { /*t: // todo */ - + // @public if (this.comment.getTag("public").length) { this.isPrivate = false; } - + /*t: // todo */ - + if (JSDOC.PluginManager) { JSDOC.PluginManager.run("onSetTags", this); } diff --git a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js index 8e3a2ebf690e2cbb03d653b198a2f4e2b692856f..8afd4066cf7b697b470d4295c7160a68367477cc 100644 --- a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js +++ b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js @@ -60,16 +60,16 @@ JSDOC.SymbolSet.prototype.resolveBorrows = function() { for (var p = this._index.first(); p; p = this._index.next()) { var symbol = p.value; if (symbol.is("FILE") || symbol.is("GLOBAL")) continue; - + var borrows = symbol.inherits; for (var i = 0; i < borrows.length; i++) { - + if (/#$/.test(borrows[i].alias)) { LOG.warn("Attempted to borrow entire instance of "+borrows[i].alias+" but that feature is not yet implemented."); return; } var borrowed = this.getSymbol(borrows[i].alias); - + if (!borrowed) { LOG.warn("Can't borrow undocumented "+borrows[i].alias+"."); continue; @@ -80,14 +80,14 @@ if (/#$/.test(borrows[i].alias)) { borrows[i].as = symbol.name+RegExp.$1+assumedName; LOG.inform("Assuming borrowed as name is "+borrows[i].as+" but that feature is experimental."); } - + var borrowAsName = borrows[i].as; var borrowAsAlias = borrowAsName; if (!borrowAsName) { LOG.warn("Malformed @borrow, 'as' is required."); continue; } - + if (borrowAsName.length > symbol.alias.length && borrowAsName.indexOf(symbol.alias) == 0) { borrowAsName = borrowAsName.replace(borrowed.alias, "") } @@ -96,9 +96,9 @@ if (/#$/.test(borrows[i].alias)) { if (borrowAsName.charAt(0) != "#") joiner = "."; borrowAsAlias = borrowed.alias + joiner + borrowAsName; } - + borrowAsName = borrowAsName.replace(/^[#.]/, ""); - + if (this.hasSymbol(borrowAsAlias)) continue; var clone = borrowed.clone(); @@ -114,19 +114,19 @@ JSDOC.SymbolSet.prototype.resolveMemberOf = function() { var symbol = p.value; if (symbol.is("FILE") || symbol.is("GLOBAL")) continue; - + // the memberOf value was provided in the @memberOf tag - else if (symbol.memberOf) { + else if (symbol.memberOf) { // like foo.bar is a memberOf foo if (symbol.alias.indexOf(symbol.memberOf) == 0) { var memberMatch = new RegExp("^("+symbol.memberOf+")[.#-]?(.+)$"); var aliasParts = symbol.alias.match(memberMatch); - + if (aliasParts) { symbol.memberOf = aliasParts[1]; symbol.name = aliasParts[2]; } - + var nameParts = symbol.name.match(memberMatch); if (nameParts) { @@ -146,7 +146,7 @@ JSDOC.SymbolSet.prototype.resolveMemberOf = function() { if (parts) { symbol.memberOf = parts[1]; - symbol.name = parts[2]; + symbol.name = parts[2]; } } @@ -170,7 +170,7 @@ JSDOC.SymbolSet.prototype.resolveMemberOf = function() { break; } } - + // unowned methods and fields belong to the global object if (!symbol.is("CONSTRUCTOR") && !symbol.isNamespace && symbol.memberOf == "") { symbol.memberOf = "_global_"; @@ -190,7 +190,7 @@ JSDOC.SymbolSet.prototype.resolveMemberOf = function() { LOG.warn("Trying to document "+symbol.name +" as a member of undocumented symbol "+symbol.memberOf+"."); } } - + if (container) container.addMember(symbol); } } @@ -199,7 +199,7 @@ JSDOC.SymbolSet.prototype.resolveMemberOf = function() { JSDOC.SymbolSet.prototype.resolveAugments = function() { for (var p = this._index.first(); p; p = this._index.next()) { var symbol = p.value; - + if (symbol.alias == "_global_" || symbol.is("FILE")) continue; JSDOC.SymbolSet.prototype.walk.apply(this, [symbol]); } @@ -216,12 +216,12 @@ JSDOC.SymbolSet.prototype.walk = function(symbol) { contributer.isPrivate = false; JSDOC.Parser.addSymbol(contributer); } - - if (contributer) { + + if (contributer) { if (contributer.augments.length) { JSDOC.SymbolSet.prototype.walk.apply(this, [contributer]); } - + symbol.inheritsFrom.push(contributer.alias); //if (!isUnique(symbol.inheritsFrom)) { // LOG.warn("Can't resolve augments: Circular reference: "+symbol.alias+" inherits from "+contributer.alias+" more than once."); @@ -229,13 +229,13 @@ JSDOC.SymbolSet.prototype.walk = function(symbol) { //else { var cmethods = contributer.methods; var cproperties = contributer.properties; - + for (var ci = 0, cl = cmethods.length; ci < cl; ci++) { if (!cmethods[ci].isStatic) symbol.inherit(cmethods[ci]); } for (var ci = 0, cl = cproperties.length; ci < cl; ci++) { if (!cproperties[ci].isStatic) symbol.inherit(cproperties[ci]); - } + } //} } else LOG.warn("Can't augment contributer: "+augments[i]+", not found."); diff --git a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/TextStream.js b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/TextStream.js index ccc48a87deba51d2e0311f063b98b570e3a41fc5..b4bd1496a8cf0d5c0e6abade9330f7d52c84f0d1 100644 --- a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/TextStream.js +++ b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/TextStream.js @@ -11,7 +11,7 @@ JSDOC.TextStream = function(text) { JSDOC.TextStream.prototype.look = function(n) { if (typeof n == "undefined") n = 0; - + if (this.cursor+n < 0 || this.cursor+n >= this.text.length) { var result = new String(""); result.eof = true; @@ -23,7 +23,7 @@ JSDOC.TextStream.prototype.look = function(n) { JSDOC.TextStream.prototype.next = function(n) { if (typeof n == "undefined") n = 1; if (n < 1) return null; - + var pulled = ""; for (var i = 0; i < n; i++) { if (this.cursor+i < this.text.length) { diff --git a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Token.js b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Token.js index fb7f9d9498623eb294a7ba68698eeea5e931daee..c862d4fbed003f17c2b524d9936203b2ad629609 100644 --- a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Token.js +++ b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Token.js @@ -9,7 +9,7 @@ JSDOC.Token = function(data, type, name) { this.name = name; } -JSDOC.Token.prototype.toString = function() { +JSDOC.Token.prototype.toString = function() { return "<"+this.type+" name=\""+this.name+"\">"+this.data+"</"+this.type+">"; } diff --git a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/TokenReader.js b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/TokenReader.js index 9f658fb9f22cb701955032c1546f7788ac5e5a59..cf30da38422987e587a23a4772cfc487f7101be9 100644 --- a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/TokenReader.js +++ b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/TokenReader.js @@ -32,7 +32,7 @@ JSDOC.TokenReader.prototype.tokenize = function(/**JSDOC.TextStream*/stream) { if (this.read_newline(stream, tokens)) continue; if (this.read_space(stream, tokens)) continue; if (this.read_word(stream, tokens)) continue; - + // if execution reaches here then an error has happened tokens.push(new JSDOC.Token(stream.next(), "TOKN", "UNKNOWN_TOKEN")); } @@ -47,7 +47,7 @@ JSDOC.TokenReader.prototype.read_word = function(/**JSDOC.TokenStream*/stream, t while (!stream.look().eof && JSDOC.Lang.isWordChar(stream.look())) { found += stream.next(); } - + if (found === "") { return false; } @@ -68,7 +68,7 @@ JSDOC.TokenReader.prototype.read_punc = function(/**JSDOC.TokenStream*/stream, t while (!stream.look().eof && JSDOC.Lang.punc(found+stream.look())) { found += stream.next(); } - + if (found === "") { return false; } @@ -83,11 +83,11 @@ JSDOC.TokenReader.prototype.read_punc = function(/**JSDOC.TokenStream*/stream, t */ JSDOC.TokenReader.prototype.read_space = function(/**JSDOC.TokenStream*/stream, tokens) { var found = ""; - + while (!stream.look().eof && JSDOC.Lang.isSpace(stream.look())) { found += stream.next(); } - + if (found === "") { return false; } @@ -103,11 +103,11 @@ JSDOC.TokenReader.prototype.read_space = function(/**JSDOC.TokenStream*/stream, */ JSDOC.TokenReader.prototype.read_newline = function(/**JSDOC.TokenStream*/stream, tokens) { var found = ""; - + while (!stream.look().eof && JSDOC.Lang.isNewline(stream.look())) { found += stream.next(); } - + if (found === "") { return false; } @@ -124,11 +124,11 @@ JSDOC.TokenReader.prototype.read_newline = function(/**JSDOC.TokenStream*/stream JSDOC.TokenReader.prototype.read_mlcomment = function(/**JSDOC.TokenStream*/stream, tokens) { if (stream.look() == "/" && stream.look(1) == "*") { var found = stream.next(2); - + while (!stream.look().eof && !(stream.look(-1) == "/" && stream.look(-2) == "*")) { found += stream.next(); } - + // to start doclet we allow /** or /*** but not /**/ or /**** if (/^\/\*\*([^\/]|\*[^*])/.test(found) && this.keepDocs) tokens.push(new JSDOC.Token(found, "COMM", "JSDOC")); else if (this.keepComments) tokens.push(new JSDOC.Token(found, "COMM", "MULTI_LINE_COMM")); @@ -144,14 +144,14 @@ JSDOC.TokenReader.prototype.read_slcomment = function(/**JSDOC.TokenStream*/stre var found; if ( (stream.look() == "/" && stream.look(1) == "/" && (found=stream.next(2))) - || + || (stream.look() == "<" && stream.look(1) == "!" && stream.look(2) == "-" && stream.look(3) == "-" && (found=stream.next(4))) ) { - + while (!stream.look().eof && !JSDOC.Lang.isNewline(stream.look())) { found += stream.next(); } - + if (this.keepComments) { tokens.push(new JSDOC.Token(found, "COMM", "SINGLE_LINE_COMM")); } @@ -167,7 +167,7 @@ JSDOC.TokenReader.prototype.read_dbquote = function(/**JSDOC.TokenStream*/stream if (stream.look() == "\"") { // find terminator var string = stream.next(); - + while (!stream.look().eof) { if (stream.look() == "\\") { if (JSDOC.Lang.isNewline(stream.look(1))) { @@ -200,7 +200,7 @@ JSDOC.TokenReader.prototype.read_snquote = function(/**JSDOC.TokenStream*/stream if (stream.look() == "'") { // find terminator var string = stream.next(); - + while (!stream.look().eof) { if (stream.look() == "\\") { // escape sequence string += stream.next(2); @@ -225,13 +225,13 @@ JSDOC.TokenReader.prototype.read_numb = function(/**JSDOC.TokenStream*/stream, t if (stream.look() === "0" && stream.look(1) == "x") { return this.read_hex(stream, tokens); } - + var found = ""; - + while (!stream.look().eof && JSDOC.Lang.isNumber(found+stream.look())){ found += stream.next(); } - + if (found === "") { return false; } @@ -245,14 +245,14 @@ JSDOC.TokenReader.prototype.read_numb = function(/**JSDOC.TokenStream*/stream, t requires("../lib/JSDOC/TextStream.js"); requires("../lib/JSDOC/Token.js"); requires("../lib/JSDOC/Lang.js"); - + plan(3, "testing JSDOC.TokenReader.prototype.read_numb"); - + //// setup var src = "function foo(num){while (num+8.0 >= 0x20 && num < 0777){}}"; var tr = new JSDOC.TokenReader(); var tokens = tr.tokenize(new JSDOC.TextStream(src)); - + var hexToken, octToken, decToken; for (var i = 0; i < tokens.length; i++) { if (tokens[i].name == "HEX_DEC") hexToken = tokens[i]; @@ -260,7 +260,7 @@ JSDOC.TokenReader.prototype.read_numb = function(/**JSDOC.TokenStream*/stream, t if (tokens[i].name == "DECIMAL") decToken = tokens[i]; } //// - + is(decToken.data, "8.0", "decimal number is found in source."); is(hexToken.data, "0x20", "hexdec number is found in source (issue #99)."); is(octToken.data, "0777", "octal number is found in source."); @@ -271,7 +271,7 @@ JSDOC.TokenReader.prototype.read_numb = function(/**JSDOC.TokenStream*/stream, t */ JSDOC.TokenReader.prototype.read_hex = function(/**JSDOC.TokenStream*/stream, tokens) { var found = stream.next(2); - + while (!stream.look().eof) { if (JSDOC.Lang.isHexDec(found) && !JSDOC.Lang.isHexDec(found+stream.look())) { // done tokens.push(new JSDOC.Token(found, "NUMB", "HEX_DEC")); @@ -291,12 +291,12 @@ JSDOC.TokenReader.prototype.read_regx = function(/**JSDOC.TokenStream*/stream, t var last; if ( stream.look() == "/" - && + && ( - + ( !(last = tokens.lastSym()) // there is no last, the regex is the first symbol - || + || ( !last.is("NUMB") && !last.is("NAME") @@ -307,18 +307,18 @@ JSDOC.TokenReader.prototype.read_regx = function(/**JSDOC.TokenStream*/stream, t ) ) { var regex = stream.next(); - + while (!stream.look().eof) { if (stream.look() == "\\") { // escape sequence regex += stream.next(2); } else if (stream.look() == "/") { regex += stream.next(); - + while (/[gmi]/.test(stream.look())) { regex += stream.next(); } - + tokens.push(new JSDOC.Token(regex, "REGX", "REGX")); return true; } diff --git a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js index 1eeb44cbb4f331a592fe9f2e544af6fb92da9386..0d799069fd270cbe51bd398a7869aa7e7a54bf83 100644 --- a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js +++ b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js @@ -43,7 +43,7 @@ JSDOC.TokenStream.prototype.look = function(/**Number*/n, /**Boolean*/considerWh if (n < 0) i--; else i++; continue; } - + if (count == Math.abs(n)) { return this.tokens[i]; } @@ -82,21 +82,21 @@ JSDOC.TokenStream.prototype.next = function(/**Number*/howMany) { */ JSDOC.TokenStream.prototype.balance = function(/**String*/start, /**String*/stop) { if (!stop) stop = JSDOC.Lang.matching(start); - + var depth = 0; var got = []; var started = false; - + while ((token = this.look())) { if (token.is(start)) { depth++; started = true; } - + if (started) { got.push(token); } - + if (token.is(stop)) { depth--; if (depth == 0) return got; @@ -108,18 +108,18 @@ JSDOC.TokenStream.prototype.balance = function(/**String*/start, /**String*/stop JSDOC.TokenStream.prototype.getMatchingToken = function(/**String*/start, /**String*/stop) { var depth = 0; var cursor = this.cursor; - + if (!start) { start = JSDOC.Lang.matching(stop); depth = 1; } if (!stop) stop = JSDOC.Lang.matching(start); - + while ((token = this.tokens[cursor])) { if (token.is(start)) { depth++; } - + if (token.is(stop) && cursor) { depth--; if (depth == 0) return this.tokens[cursor]; diff --git a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Walker.js b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Walker.js index 6ecaea88174752b6848300a8ac650f079b311682..cba4b7bc48d65d83e377e15fd4fda26c833ec963 100644 --- a/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Walker.js +++ b/tests/lib/jsdoc-toolkit/app/lib/JSDOC/Walker.js @@ -18,7 +18,7 @@ JSDOC.Walker.prototype.init = function() { JSDOC.Parser.addSymbol(globalSymbol); this.lastDoc = null; this.token = null; - + /** The chain of symbols under which we are currently nested. @type Array @@ -31,7 +31,7 @@ JSDOC.Walker.prototype.walk = function(/**JSDOC.TokenStream*/ts) { this.ts = ts; while (this.token = this.ts.look()) { if (this.token.popNamescope) { - + var symbol = this.namescope.pop(); if (symbol.is("FUNCTION")) { if (this.ts.look(1).is("LEFT_PAREN") && symbol.comment.getTag("function").length == 0) { @@ -46,44 +46,44 @@ JSDOC.Walker.prototype.walk = function(/**JSDOC.TokenStream*/ts) { JSDOC.Walker.prototype.step = function() { if (this.token.is("JSDOC")) { // it's a doc comment - + var doc = new JSDOC.DocComment(this.token.data); - - + + if (doc.getTag("exports").length > 0) { var exports = doc.getTag("exports")[0]; exports.desc.match(/(\S+) as (\S+)/i); var n1 = RegExp.$1; var n2 = RegExp.$2; - + if (!n1 && n2) throw "@exports tag requires a value like: 'name as ns.name'"; - - JSDOC.Parser.rename = (JSDOC.Parser.rename || {}); + + JSDOC.Parser.rename = (JSDOC.Parser.rename || {}); JSDOC.Parser.rename[n1] = n2 } - + if (doc.getTag("lends").length > 0) { var lends = doc.getTag("lends")[0]; var name = lends.desc if (!name) throw "@lends tag requires a value."; - + var symbol = new JSDOC.Symbol(name, [], "OBJECT", doc); - + this.namescope.push(symbol); - + var matching = this.ts.getMatchingToken("LEFT_CURLY"); if (matching) matching.popNamescope = name; else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); - + this.lastDoc = null; return true; } else if (doc.getTag("name").length > 0 && doc.getTag("overview").length == 0) { // it's a virtual symbol var virtualName = doc.getTag("name")[0].desc; if (!virtualName) throw "@name tag requires a value."; - + if (doc.getTag("memberOf").length > 0) { virtualName = (doc.getTag("memberOf")[0] + "." + virtualName) .replace(/([#.])\./, "$1"); @@ -91,9 +91,9 @@ JSDOC.Walker.prototype.step = function() { } var symbol = new JSDOC.Symbol(virtualName, [], "VIRTUAL", doc); - + JSDOC.Parser.addSymbol(symbol); - + this.lastDoc = null; return true; } @@ -103,15 +103,15 @@ JSDOC.Walker.prototype.step = function() { else if (doc.meta == "nocode+") JSDOC.Parser.conf.ignoreCode = true; else if (doc.meta == "nocode-") JSDOC.Parser.conf.ignoreCode = JSDOC.opt.n; else throw "Unrecognized meta comment: "+doc.meta; - + this.lastDoc = null; return true; } else if (doc.getTag("overview").length > 0) { // it's a file overview symbol = new JSDOC.Symbol("", [], "FILE", doc); - + JSDOC.Parser.addSymbol(symbol); - + this.lastDoc = null; return true; } @@ -126,20 +126,20 @@ JSDOC.Walker.prototype.step = function() { var name = this.token.data; var doc = null; if (this.lastDoc) doc = this.lastDoc; var params = []; - + // it's inside an anonymous object if (this.ts.look(1).is("COLON") && this.ts.look(-1).is("LEFT_CURLY") && !(this.ts.look(-2).is("JSDOC") || this.namescope.last().comment.getTag("lends").length || this.ts.look(-2).is("ASSIGN") || this.ts.look(-2).is("COLON"))) { name = "$anonymous"; name = this.namescope.last().alias+"-"+name - + params = []; - + symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); JSDOC.Parser.addSymbol(symbol); - + this.namescope.push(symbol); - + var matching = this.ts.getMatchingToken(null, "RIGHT_CURLY"); if (matching) matching.popNamescope = name; else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); @@ -147,9 +147,9 @@ JSDOC.Walker.prototype.step = function() { // function foo() {} else if (this.ts.look(-1).is("FUNCTION") && this.ts.look(1).is("LEFT_PAREN")) { var isInner; - + if (this.lastDoc) doc = this.lastDoc; - + if (doc && doc.getTag("memberOf").length > 0) { name = (doc.getTag("memberOf")[0]+"."+name).replace("#.", "#"); doc.deleteTag("memberOf"); @@ -158,9 +158,9 @@ JSDOC.Walker.prototype.step = function() { name = this.namescope.last().alias+"-"+name; if (!this.namescope.last().is("GLOBAL")) isInner = true; } - + if (!this.namescope.last().is("GLOBAL")) isInner = true; - + params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN")); symbol = new JSDOC.Symbol(name, params, "FUNCTION", doc); @@ -171,11 +171,11 @@ JSDOC.Walker.prototype.step = function() { inlineReturn = inlineReturn.replace(/(^\/\*\* *| *\*\/$)/g, ""); symbol.type = inlineReturn; } - + JSDOC.Parser.addSymbol(symbol); - + this.namescope.push(symbol); - + var matching = this.ts.getMatchingToken("LEFT_CURLY"); if (matching) matching.popNamescope = name; else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); @@ -190,7 +190,7 @@ JSDOC.Walker.prototype.step = function() { isConstructor = true; } } - + var isInner; if (this.ts.look(-1).is("VAR") || this.isInner) { if (doc && doc.getTag("memberOf").length > 0) { @@ -209,12 +209,12 @@ JSDOC.Walker.prototype.step = function() { if (this.lastDoc) doc = this.lastDoc; params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN")); - + symbol = new JSDOC.Symbol(name, params, "FUNCTION", doc); if (isInner) symbol.isInner = true; if (isConstructor) symbol.isa = "CONSTRUCTOR"; - + if (this.ts.look(1).is("JSDOC")) { var inlineReturn = ""+this.ts.look(1).data; inlineReturn = inlineReturn.replace(/(^\/\*\* *| *\*\/$)/g, ""); @@ -222,9 +222,9 @@ JSDOC.Walker.prototype.step = function() { } JSDOC.Parser.addSymbol(symbol); - + this.namescope.push(symbol); - + var matching = this.ts.getMatchingToken("LEFT_CURLY"); if (matching) matching.popNamescope = name; else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); @@ -241,24 +241,24 @@ JSDOC.Walker.prototype.step = function() { } this.ts.next(3); // advance past the "new" or "(" - + if (this.lastDoc) doc = this.lastDoc; params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN")); - + symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); if (isInner) symbol.isInner = true; - + if (this.ts.look(1).is("JSDOC")) { var inlineReturn = ""+this.ts.look(1).data; inlineReturn = inlineReturn.replace(/(^\/\*\* *| *\*\/$)/g, ""); symbol.type = inlineReturn; } - + JSDOC.Parser.addSymbol(symbol); - + symbol.scopeType = "INSTANCE"; this.namescope.push(symbol); - + var matching = this.ts.getMatchingToken("LEFT_CURLY"); if (matching) matching.popNamescope = name; else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); @@ -266,13 +266,13 @@ JSDOC.Walker.prototype.step = function() { // foo: function() {} else if (this.ts.look(1).is("COLON") && this.ts.look(2).is("FUNCTION")) { name = (this.namescope.last().alias+"."+name).replace("#.", "#"); - + if (this.lastDoc) doc = this.lastDoc; params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN")); - + if (doc && doc.getTag("constructs").length) { name = name.replace(/\.prototype(\.|$)/, "#"); - + if (name.indexOf("#") > -1) name = name.match(/(^[^#]+)/)[0]; else name = this.namescope.last().alias; @@ -281,17 +281,17 @@ JSDOC.Walker.prototype.step = function() { else { symbol = new JSDOC.Symbol(name, params, "FUNCTION", doc); } - + if (this.ts.look(1).is("JSDOC")) { var inlineReturn = ""+this.ts.look(1).data; inlineReturn = inlineReturn.replace(/(^\/\*\* *| *\*\/$)/g, ""); symbol.type = inlineReturn; } - + JSDOC.Parser.addSymbol(symbol); - + this.namescope.push(symbol); - + var matching = this.ts.getMatchingToken("LEFT_CURLY"); if (matching) matching.popNamescope = name; else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); @@ -306,17 +306,17 @@ JSDOC.Walker.prototype.step = function() { else if (name.indexOf("this.") == 0) { name = this.resolveThis(name); } - + if (this.lastDoc) doc = this.lastDoc; - + symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); if (isInner) symbol.isInner = true; - - + + if (doc) JSDOC.Parser.addSymbol(symbol); this.namescope.push(symbol); - + var matching = this.ts.getMatchingToken("LEFT_CURLY"); if (matching) matching.popNamescope = name; else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); @@ -328,18 +328,18 @@ JSDOC.Walker.prototype.step = function() { if (this.ts.look(-1).is("VAR") || this.isInner) { name = this.namescope.last().alias+"-"+name if (!this.namescope.last().is("GLOBAL")) isInner = true; - + if (this.lastDoc) doc = this.lastDoc; - + symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); if (isInner) symbol.isInner = true; - - + + if (doc) JSDOC.Parser.addSymbol(symbol); } } // foo = x - else if (this.ts.look(1).is("ASSIGN")) { + else if (this.ts.look(1).is("ASSIGN")) { var isInner; if (this.ts.look(-1).is("VAR") || this.isInner) { name = this.namescope.last().alias+"-"+name @@ -348,28 +348,28 @@ JSDOC.Walker.prototype.step = function() { else if (name.indexOf("this.") == 0) { name = this.resolveThis(name); } - + if (this.lastDoc) doc = this.lastDoc; - + symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); if (isInner) symbol.isInner = true; - - + + if (doc) JSDOC.Parser.addSymbol(symbol); } // foo: {} else if (this.ts.look(1).is("COLON") && this.ts.look(2).is("LEFT_CURLY")) { name = (this.namescope.last().alias+"."+name).replace("#.", "#"); - + if (this.lastDoc) doc = this.lastDoc; - + symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); - - + + if (doc) JSDOC.Parser.addSymbol(symbol); - + this.namescope.push(symbol); - + var matching = this.ts.getMatchingToken("LEFT_CURLY"); if (matching) matching.popNamescope = name; else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); @@ -377,26 +377,26 @@ JSDOC.Walker.prototype.step = function() { // foo: x else if (this.ts.look(1).is("COLON")) { name = (this.namescope.last().alias+"."+name).replace("#.", "#");; - + if (this.lastDoc) doc = this.lastDoc; - + symbol = new JSDOC.Symbol(name, params, "OBJECT", doc); - - + + if (doc) JSDOC.Parser.addSymbol(symbol); } // foo(...) else if (this.ts.look(1).is("LEFT_PAREN")) { if (typeof JSDOC.PluginManager != "undefined") { var functionCall = {name: name}; - + var cursor = this.ts.cursor; params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN")); this.ts.cursor = cursor; - + for (var i = 0; i < params.length; i++) functionCall["arg" + (i + 1)] = params[i].name; - + JSDOC.PluginManager.run("onFunctionCall", functionCall); if (functionCall.doc) { this.ts.insertAhead(new JSDOC.Token(functionCall.doc, "COMM", "JSDOC")); @@ -411,18 +411,18 @@ JSDOC.Walker.prototype.step = function() { && !this.ts.look(1).is("NAME") ) { if (this.lastDoc) doc = this.lastDoc; - + name = "$anonymous"; name = this.namescope.last().alias+"-"+name - + params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN")); - + symbol = new JSDOC.Symbol(name, params, "FUNCTION", doc); - + JSDOC.Parser.addSymbol(symbol); - + this.namescope.push(symbol); - + var matching = this.ts.getMatchingToken("LEFT_CURLY"); if (matching) matching.popNamescope = name; else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + "."); @@ -441,7 +441,7 @@ JSDOC.Walker.prototype.resolveThis = function(name) { name.match(/^this\.(.+)$/) var nameFragment = RegExp.$1; if (!nameFragment) return name; - + var symbol = this.namescope.last(); var scopeType = symbol.scopeType || symbol.isa; @@ -449,12 +449,12 @@ JSDOC.Walker.prototype.resolveThis = function(name) { if (scopeType == "CONSTRUCTOR") { name = symbol.alias+"#"+nameFragment; } - + // if we are in an anonymous constructor function, `this` means the instance else if (scopeType == "INSTANCE") { name = symbol.alias+"."+nameFragment; } - + // if we are in a function, `this` means the container (possibly the global) else if (scopeType == "FUNCTION") { // in a method of a prototype, so `this` means the constructor @@ -480,7 +480,7 @@ JSDOC.Walker.prototype.resolveThis = function(name) { else { name = nameFragment; } - + return name; } @@ -493,7 +493,7 @@ JSDOC.Walker.onParamList = function(/**Array*/paramTokens) { for (var i = 0, l = paramTokens.length; i < l; i++) { if (paramTokens[i].is("JSDOC")) { var paramType = paramTokens[i].data.replace(/(^\/\*\* *| *\*\/$)/g, ""); - + if (paramTokens[i+1] && paramTokens[i+1].is("NAME")) { i++; params.push({type: paramType, name: paramTokens[i].data}); diff --git a/tests/lib/jsdoc-toolkit/app/main.js b/tests/lib/jsdoc-toolkit/app/main.js index f9008c8703b0a78ff60466caf4ba56ca8bb5706c..654528f29296a156d3cde1de5729528418de81c7 100644 --- a/tests/lib/jsdoc-toolkit/app/main.js +++ b/tests/lib/jsdoc-toolkit/app/main.js @@ -5,37 +5,37 @@ function main() { IO.include("lib/JSDOC.js"); IO.includeDir("plugins/"); - + // process the options - + // the -c option: options are defined in a configuration file if (JSDOC.opt.c) { eval("JSDOC.conf = " + IO.readFile(JSDOC.opt.c)); - + LOG.inform("Using configuration file at '"+JSDOC.opt.c+"'."); - + for (var c in JSDOC.conf) { if (c !== "D" && !defined(JSDOC.opt[c])) { // commandline overrules config file JSDOC.opt[c] = JSDOC.conf[c]; } } - + if (typeof JSDOC.conf["_"] != "undefined") { JSDOC.opt["_"] = JSDOC.opt["_"].concat(JSDOC.conf["_"]); } - + LOG.inform("With configuration: "); for (var o in JSDOC.opt) { LOG.inform(" "+o+": "+JSDOC.opt[o]); } } - + // be verbose if (JSDOC.opt.v) LOG.verbose = true; - + // send log messages to a file if (JSDOC.opt.o) LOG.out = IO.open(JSDOC.opt.o); - + // run the unit tests if (JSDOC.opt.T) { LOG.inform("JsDoc Toolkit running in test mode at "+new Date()+"."); @@ -50,17 +50,17 @@ function main() { if (JSDOC.opt.t && SYS.slash != JSDOC.opt.t.slice(-1)) { JSDOC.opt.t += SYS.slash; } - + // verbose messages about the options we were given LOG.inform("JsDoc Toolkit main() running at "+new Date()+"."); LOG.inform("With options: "); for (var o in JSDOC.opt) { LOG.inform(" "+o+": "+JSDOC.opt[o]); } - + // initialize and build a symbolSet from your code JSDOC.JsDoc(); - + // debugger's option: dump the entire symbolSet produced from your code if (JSDOC.opt.Z) { LOG.warn("So you want to see the data structure, eh? This might hang if you have circular refs..."); @@ -77,7 +77,7 @@ function main() { try { // a file named "publish.js" must exist in the template directory load(JSDOC.opt.t+"publish.js"); - + // and must define a function named "publish" if (!publish) { LOG.warn("No publish() function is defined in that template so nothing to do."); @@ -97,12 +97,12 @@ function main() { } } } - + // notify of any warnings if (!JSDOC.opt.q && LOG.warnings.length) { print(LOG.warnings.length+" warning"+(LOG.warnings.length != 1? "s":"")+"."); } - + // stop sending log messages to a file if (LOG.out) { LOG.out.flush(); diff --git a/tests/lib/jsdoc-toolkit/app/plugins/frameworkPrototype.js b/tests/lib/jsdoc-toolkit/app/plugins/frameworkPrototype.js index 9c417518bd185fe91e986563ed34933af61271cb..e2a0576f2dee2e5b251ade88e11bc9d12b56b154 100644 --- a/tests/lib/jsdoc-toolkit/app/plugins/frameworkPrototype.js +++ b/tests/lib/jsdoc-toolkit/app/plugins/frameworkPrototype.js @@ -7,7 +7,7 @@ JSDOC.PluginManager.registerPlugin( desc = classCreator.comment; } var insert = desc+"/** @name "+classCreator.name+"\n@constructor\n@scope "+classCreator.name+".prototype */" - + insert = insert.replace(/\*\/\/\*\*/g, "\n"); /*DEBUG*///print("insert is "+insert); classCreator.addComment.data = insert; diff --git a/tests/lib/jsdoc-toolkit/app/plugins/publishSrcHilite.js b/tests/lib/jsdoc-toolkit/app/plugins/publishSrcHilite.js index 65514f2c9acfb6dffbc01c64468294fa70d2d9c0..a3fc97ec259887bcb2ba35ad29d9ae4ceceda0b5 100644 --- a/tests/lib/jsdoc-toolkit/app/plugins/publishSrcHilite.js +++ b/tests/lib/jsdoc-toolkit/app/plugins/publishSrcHilite.js @@ -6,7 +6,7 @@ JSDOC.PluginManager.registerPlugin( return; // already generated src code } else JsHilite.cache[src.path] = true; - + try { var sourceCode = IO.readFile(src.path); } @@ -24,20 +24,20 @@ JSDOC.PluginManager.registerPlugin( function JsHilite(src, charset) { var tr = new JSDOC.TokenReader(); - + tr.keepComments = true; tr.keepDocs = true; tr.keepWhite = true; - + this.tokens = tr.tokenize(new JSDOC.TextStream(src)); - + // TODO is redefining toString() the best way? - JSDOC.Token.prototype.toString = function() { + JSDOC.Token.prototype.toString = function() { return "<span class=\""+this.type+"\">"+this.data.replace(/</g, "<")+"</span>"; } - + if (!charset) charset = "utf-8"; - + this.header = '<html><head><meta http-equiv="content-type" content="text/html; charset='+charset+'"> '+ "<style>\n\ .KEYW {color: #933;}\n\ @@ -57,6 +57,6 @@ JsHilite.prototype.hilite = function() { var hilited = this.tokens.join(""); var line = 1; if (this.showLinenumbers) hilited = hilited.replace(/(^|\n)/g, function(m){return m+"<span class='line'>"+((line<10)? " ":"")+((line<100)? " ":"")+(line++)+"</span> "}); - + return this.header+hilited+this.footer; } \ No newline at end of file diff --git a/tests/lib/jsdoc-toolkit/app/plugins/tagParamConfig.js b/tests/lib/jsdoc-toolkit/app/plugins/tagParamConfig.js index 3ea8a1be2a734e0abf004f40cce7309fec36191d..efd461a27a6c5b34d9118bdcf29331266f22be5f 100644 --- a/tests/lib/jsdoc-toolkit/app/plugins/tagParamConfig.js +++ b/tests/lib/jsdoc-toolkit/app/plugins/tagParamConfig.js @@ -5,7 +5,7 @@ JSDOC.PluginManager.registerPlugin( var currentParam = null; var tags = comment.tags; for (var i = 0, l = tags.length; i < l; i++) { - + if (tags[i].title == "param") { if (tags[i].name.indexOf(".") == -1) { currentParam = i; diff --git a/tests/lib/jsdoc-toolkit/app/plugins/tagSynonyms.js b/tests/lib/jsdoc-toolkit/app/plugins/tagSynonyms.js index 49a874f19a9d2a75ba3d46830131905d6e4fe49a..05fde166de4cb2090b47b42ebb2b4a67d59451cd 100644 --- a/tests/lib/jsdoc-toolkit/app/plugins/tagSynonyms.js +++ b/tests/lib/jsdoc-toolkit/app/plugins/tagSynonyms.js @@ -5,7 +5,7 @@ JSDOC.PluginManager.registerPlugin( comment.src = comment.src.replace(/@methodOf\b/i, "@function\n@memberOf"); comment.src = comment.src.replace(/@fieldOf\b/i, "@field\n@memberOf"); }, - + onDocCommentTags: function(comment) { for (var i = 0, l = comment.tags.length; i < l; i++) { var title = comment.tags[i].title.toLowerCase(); diff --git a/tests/lib/jsdoc-toolkit/app/run.js b/tests/lib/jsdoc-toolkit/app/run.js index 1f875cdbbf5090f094c76dd85face6945416acbd..d26929a8c5ed7a36bfdeff835684fa20ec33a883 100644 --- a/tests/lib/jsdoc-toolkit/app/run.js +++ b/tests/lib/jsdoc-toolkit/app/run.js @@ -13,7 +13,7 @@ LOG = { warn: function(msg, e) { if (JSDOC.opt.q) return; if (e) msg = e.fileName+", line "+e.lineNumber+": "+msg; - + msg = ">> WARNING: "+msg; LOG.warnings.push(msg); if (LOG.out) LOG.out.write(msg+"\n"); @@ -35,18 +35,18 @@ LOG.out = undefined; * @class Manipulate a filepath. */ function FilePath(absPath, separator) { - this.slash = separator || "/"; + this.slash = separator || "/"; this.root = this.slash; this.path = []; this.file = ""; - + var parts = absPath.split(/[\\\/]/); if (parts) { if (parts.length) this.root = parts.shift() + this.slash; if (parts.length) this.file = parts.pop() if (parts.length) this.path = parts; } - + this.path = this.resolvePath(); } @@ -119,25 +119,25 @@ SYS = { new String(System.getProperty("os.name")), new String(System.getProperty("os.version")) ].join(", "), - + /** * Which way does your slash lean. * @type string */ slash: System.getProperty("file.separator")||"/", - + /** * The path to the working directory where you ran java. * @type string */ userDir: new String(System.getProperty("user.dir")), - + /** * Where is Java's home folder. * @type string */ javaHome: new String(System.getProperty("java.home")), - + /** * The absolute path to the directory containing this script. * @type string @@ -182,7 +182,7 @@ IO = { out.flush(); out.close(); }, - + /** * @type string */ @@ -194,16 +194,16 @@ IO = { }, /** - * @param inFile + * @param inFile * @param outDir * @param [fileName=The original filename] */ copyFile: function(/**string*/ inFile, /**string*/ outDir, /**string*/ fileName) { if (fileName == null) fileName = FilePath.fileName(inFile); - + var inFile = new File(inFile); var outFile = new File(outDir+SYS.slash+fileName); - + var bis = new Packages.java.io.BufferedInputStream(new Packages.java.io.FileInputStream(inFile), 4096); var bos = new Packages.java.io.BufferedOutputStream(new Packages.java.io.FileOutputStream(outFile), 4096); var theChar; @@ -227,7 +227,7 @@ IO = { } } }, - + /** * Creates a directory at the given path. */ @@ -248,15 +248,15 @@ IO = { } if (_path.length == 0) return _allFiles; if (recurse === undefined) recurse = 1; - + dir = new File(dir); if (!dir.directory) return [String(dir)]; var files = dir.list(); - + for (var f = 0; f < files.length; f++) { var file = String(files[f]); if (file.match(/^\.[^\.\/\\]/)) continue; // skip dot files - + if ((new File(_path.join(SYS.slash)+SYS.slash+file)).list()) { // it's a directory _path.push(file); if (_path.length-1 < recurse) IO.ls(_path.join(SYS.slash), recurse, _allFiles, _path); @@ -266,7 +266,7 @@ IO = { _allFiles.push((_path.join(SYS.slash)+SYS.slash+file).replace(SYS.slash+SYS.slash, SYS.slash)); } } - + return _allFiles; }, @@ -275,7 +275,7 @@ IO = { */ exists: function(/**string*/ path) { file = new File(path); - + if (file.isDirectory()){ return true; } @@ -289,7 +289,7 @@ IO = { }, /** - * + * */ open: function(/**string*/ path, /**string*/ append) { var append = true; @@ -322,21 +322,21 @@ IO = { * @private */ encoding: "utf-8", - + /** * Load the given script. */ include: function(relativePath) { load(SYS.pwd+relativePath); }, - + /** * Loads all scripts from the given directory path. */ includeDir: function(path) { if (!path) return; - - for (var lib = IO.ls(SYS.pwd+path), i = 0; i < lib.length; i++) + + for (var lib = IO.ls(SYS.pwd+path), i = 0; i < lib.length; i++) if (/\.js$/i.test(lib[i])) load(lib[i]); } } diff --git a/tests/lib/jsdoc-toolkit/app/t/TestDoc.js b/tests/lib/jsdoc-toolkit/app/t/TestDoc.js index c0768b71c63bc916aa528722debc15d6ad44887a..1f4977ad9424e389e2988e58fb6f653eb41bfe82 100644 --- a/tests/lib/jsdoc-toolkit/app/t/TestDoc.js +++ b/tests/lib/jsdoc-toolkit/app/t/TestDoc.js @@ -23,16 +23,16 @@ TestDoc.prove = function(filePath) { TestDoc.run = function(src) { try { eval(src); } catch(e) { print("# ERROR! "+e); } - + var chunks = src.split(/\/\*t:/); - + var run = function(chunk) { // local shortcuts var is = TestDoc.assertEquals; var isnt = TestDoc.assertNotEquals; var plan = TestDoc.plan; var requires = TestDoc.requires; - + try { eval(chunk); } catch(e) { print("# ERROR! "+e); } } for (var start = -1, end = 0; (start = src.indexOf("/*t:", end)) > end; start = end) { @@ -54,7 +54,7 @@ TestDoc.Result.prototype.toString = function() { if (typeof this.verdict == "boolean") { return (this.verdict? "ok" : "not ok") + " " + (++TestDoc.report.counter) + " - " + this.message; } - + return "# " + this.message; } @@ -111,25 +111,25 @@ TestDoc.readFile = (function(){ else { return function(url) { var httpRequest; - + if (window.XMLHttpRequest) { // Mozilla, Safari, etc httpRequest = new XMLHttpRequest(); - } + } else if (window.ActiveXObject) { // IE try { httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); - } + } catch (e) { try { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); - } + } catch (e) { } } } - + if (!httpRequest) { throw "Cannot create HTTP Request."; } - + httpRequest.open('GET', url, false); httpRequest.send(''); if (httpRequest.readyState == 4) { @@ -137,7 +137,7 @@ TestDoc.readFile = (function(){ throw "The HTTP Request returned an error code: "+httpRequest.status; } } - + return httpRequest.responseText || ""; } } diff --git a/tests/lib/jsdoc-toolkit/app/test.js b/tests/lib/jsdoc-toolkit/app/test.js index 8b2dc8b17fd443da220b5dd740c5dd19246b6023..8fbf87c61a1ac35122d51d8006e6aa833202604f 100644 --- a/tests/lib/jsdoc-toolkit/app/test.js +++ b/tests/lib/jsdoc-toolkit/app/test.js @@ -8,8 +8,8 @@ function symbolize(opt) { var testCases = [ function() { symbolize({a:true, p:true, _: [SYS.pwd+"test/overview.js"]}); - //print(Dumper.dump(symbols)); - is('symbols.getSymbolByName("My Cool Library").name', 'My Cool Library', 'File overview can be found by alias.'); + //print(Dumper.dump(symbols)); + is('symbols.getSymbolByName("My Cool Library").name', 'My Cool Library', 'File overview can be found by alias.'); } , function() { @@ -35,7 +35,7 @@ var testCases = [ , function() { symbolize({a:true, _: [SYS.pwd+"test/prototype_oblit.js"]}); - + is('symbols.getSymbol("Article").name', "Article", 'Oblit set to constructor prototype name is found.'); is('typeof symbols.getSymbol("Article.prototype")', "undefined", 'The prototype oblit is not a symbol.'); is('symbols.getSymbol("Article#getTitle").name', "getTitle", 'The nonstatic method name of prototype oblit is correct.'); @@ -50,7 +50,7 @@ var testCases = [ , function() { symbolize({a:true, p:true, _: [SYS.pwd+"test/prototype_oblit_constructor.js"]}); - + is('symbols.getSymbol("Article").name', "Article", 'Oblit set to constructor prototype with inner constructor name is found.'); is('symbols.getSymbol("Article#init").name', "init", 'The initializer method name of prototype oblit is correct.'); is('symbols.getSymbol("Article").hasMember("pages")', true, 'Property set by initializer method "this" is on the outer constructor.'); @@ -62,7 +62,7 @@ var testCases = [ , function() { symbolize({a:true, p:true, _: [SYS.pwd+"test/inner.js"]}); - + is('symbols.getSymbol("Outer").name', "Outer", 'Outer constructor prototype name is found.'); is('symbols.getSymbol("Outer").methods.length', 1, 'Inner function doesnt appear as a method of the outer.'); is('symbols.getSymbol("Outer").hasMethod("open")', true, 'Outer constructors methods arent affected by inner function.'); @@ -71,12 +71,12 @@ var testCases = [ is('symbols.getSymbol("Outer-Inner").memberOf', "Outer", 'The memberOf of inner function is found.'); is('symbols.getSymbol("Outer-Inner").name', "Inner", 'The name of inner function is found.'); is('symbols.getSymbol("Outer-Inner#name").name', "name", 'A member of the inner function constructor, attached to "this" is found on inner.'); - is('symbols.getSymbol("Outer-Inner#name").memberOf', "Outer-Inner", 'The memberOf of an inner function member is found.'); + is('symbols.getSymbol("Outer-Inner#name").memberOf', "Outer-Inner", 'The memberOf of an inner function member is found.'); } , function() { symbolize({a:true, _: [SYS.pwd+"test/prototype_nested.js"]}); - + is('symbols.getSymbol("Word").name', "Word", 'Base constructor name is found.'); is('symbols.getSymbol("Word").hasMethod("reverse")', true, 'Base constructor method is found.'); is('symbols.getSymbol("Word").methods.length', 1, 'Base constructor has only one method.'); @@ -89,19 +89,19 @@ var testCases = [ , function() { symbolize({a:true, _: [SYS.pwd+"test/namespace_nested.js"]}); - + is('symbols.getSymbol("ns1").name', "ns1", 'Base namespace name is found.'); is('symbols.getSymbol("ns1").memberOf', "", 'Base namespace memberOf is empty (its a constructor).'); is('symbols.getSymbol("ns1.ns2").name', "ns2", 'Nested namespace name is found.'); is('symbols.getSymbol("ns1.ns2").alias', "ns1.ns2", 'Nested namespace alias is found.'); is('symbols.getSymbol("ns1.ns2").memberOf', "ns1", 'Nested namespace memberOf is found.'); is('symbols.getSymbol("ns1.ns2.Function1").name', "Function1", 'Method of nested namespace name is found.'); - is('symbols.getSymbol("ns1.ns2.Function1").memberOf', "ns1.ns2", 'Constructor of nested namespace memberOf is found.'); + is('symbols.getSymbol("ns1.ns2.Function1").memberOf', "ns1.ns2", 'Constructor of nested namespace memberOf is found.'); } , function() { symbolize({a:true, p:true, _: [SYS.pwd+"test/functions_nested.js"]}); - + is('symbols.getSymbol("Zop").name', "Zop", 'Any constructor name is found.'); is('symbols.getSymbol("Zop").isa', "CONSTRUCTOR", 'It isa constructor.'); is('symbols.getSymbol("Zop").hasMethod("zap")', true, 'Its method name, set later, is in methods array.'); @@ -120,7 +120,7 @@ var testCases = [ , function() { symbolize({a:true, _: [SYS.pwd+"test/memberof_constructor.js"]}); - + is('symbols.getSymbol("Circle#Tangent").name', "Tangent", 'Constructor set on prototype using @member has correct name.'); is('symbols.getSymbol("Circle#Tangent").memberOf', "Circle", 'Constructor set on prototype using @member has correct memberOf.'); is('symbols.getSymbol("Circle#Tangent").alias', "Circle#Tangent", 'Constructor set on prototype using @member has correct alias.'); @@ -135,7 +135,7 @@ var testCases = [ , function() { symbolize({a:true, p: true, _: [SYS.pwd+"test/memberof.js"]}); - + is('symbols.getSymbol("pack.install").alias', "pack.install", 'Using @memberOf sets alias, when parent name is in memberOf tag.'); is('symbols.getSymbol("pack.install.overwrite").name', "install.overwrite", 'Using @memberOf sets name, even if the name is dotted.'); is('symbols.getSymbol("pack.install.overwrite").memberOf', "pack", 'Using @memberOf sets memberOf.'); @@ -144,7 +144,7 @@ var testCases = [ , function() { symbolize({a:true, p: true, _: [SYS.pwd+"test/memberof2.js"]}); - + is('symbols.getSymbol("Foo#bar").alias', "Foo#bar", 'An inner function can be documented as an instance method.'); is('symbols.getSymbol("Foo.zip").alias', "Foo.zip", 'An inner function can be documented as a static method.'); is('symbols.getSymbol("Foo.Fiz").alias', "Foo.Fiz", 'An inner function can be documented as a static constructor.'); @@ -154,7 +154,7 @@ var testCases = [ , function() { symbolize({a:true, p: true, _: [SYS.pwd+"test/memberof3.js"]}); - + is('symbols.getSymbol("Foo#bar").alias', "Foo#bar", 'A virtual field can be documented as an instance method.'); is('symbols.getSymbol("Foo2#bar").alias', "Foo2#bar", 'A virtual field with the same name can be documented as an instance method.'); } @@ -165,45 +165,45 @@ var testCases = [ is('symbols.getSymbol("Layout").name', "Layout", 'Constructor can be found.'); is('symbols.getSymbol("Layout").hasMethod("init")', true, 'Constructor method name can be found.'); is('symbols.getSymbol("Layout").hasMember("orientation")', true, 'Constructor property name can be found.'); - + is('symbols.getSymbol("Page").hasMethod("reset")', true, 'Second constructor method name can be found.'); is('symbols.getSymbol("Page").hasMember("orientation")', true, 'Second constructor borrowed property name can be found in properties.'); is('symbols.getSymbol("Page#orientation").memberOf', "Page", 'Second constructor borrowed property memberOf can be found.'); is('symbols.getSymbol("Page-getInnerElements").alias', "Page-getInnerElements", 'Can borrow an inner function and it is still inner.'); is('symbols.getSymbol("Page.units").alias', "Page.units", 'Can borrow a static function and it is still static.'); - + is('symbols.getSymbol("ThreeColumnPage#init").alias', "ThreeColumnPage#init", 'Third constructor method can be found even though method with same name is borrowed.'); is('symbols.getSymbol("ThreeColumnPage#reset").alias', "ThreeColumnPage#reset", 'Borrowed method can be found.'); is('symbols.getSymbol("ThreeColumnPage#orientation").alias', "ThreeColumnPage#orientation", 'Twice borrowed method can be found.'); - + } , function() { symbolize({a:true, p:true, _: [SYS.pwd+"test/borrows2.js"]}); - is('symbols.getSymbol("Foo").hasMethod("my_zop")', true, 'Borrowed method can be found.'); + is('symbols.getSymbol("Foo").hasMethod("my_zop")', true, 'Borrowed method can be found.'); is('symbols.getSymbol("Bar").hasMethod("my_zip")', true, 'Second borrowed method can be found.'); } , function() { symbolize({a:true, p:true, _: [SYS.pwd+"test/constructs.js"]}); - is('symbols.getSymbol("Person").hasMethod("say")', true, 'The constructs tag creates a class that lends can add a method to.'); + is('symbols.getSymbol("Person").hasMethod("say")', true, 'The constructs tag creates a class that lends can add a method to.'); } , function() { symbolize({a: true, _: [SYS.pwd+"test/augments.js", SYS.pwd+"test/augments2.js"]}); - + is('symbols.getSymbol("Page").augments[0]', "Layout", 'An augmented class can be found.'); is('symbols.getSymbol("Page#reset").alias', "Page#reset", 'Method of augmenter can be found.'); is('symbols.getSymbol("Page").hasMethod("Layout#init")', true, 'Method from augmented can be found.'); is('symbols.getSymbol("Page").hasMember("Layout#orientation")', true, 'Property from augmented can be found.'); is('symbols.getSymbol("Page").methods.length', 3, 'Methods of augmented class are included in methods array.'); - + is('symbols.getSymbol("ThreeColumnPage").augments[0]', "Page", 'The extends tag is a synonym for augments.'); is('symbols.getSymbol("ThreeColumnPage").hasMethod("ThreeColumnPage#init")', true, 'Local method overrides augmented method of same name.'); is('symbols.getSymbol("ThreeColumnPage").methods.length', 3, 'Local method count is right.'); - + is('symbols.getSymbol("NewsletterPage").augments[0]', "ThreeColumnPage", 'Can augment across file boundaries.'); is('symbols.getSymbol("NewsletterPage").augments.length', 2, 'Multiple augments are supported.'); is('symbols.getSymbol("NewsletterPage").inherits[0].alias', "Junkmail#annoy", 'Inherited method with augments.'); @@ -213,11 +213,11 @@ var testCases = [ , function() { symbolize({a:true, _: [SYS.pwd+"test/static_this.js"]}); - + is('symbols.getSymbol("box.holder").name', "holder", 'Static namespace name can be found.'); is('symbols.getSymbol("box.holder.foo").name', "foo", 'Static namespace method name can be found.'); is('symbols.getSymbol("box.holder").isStatic', true, 'Static namespace method is static.'); - + is('symbols.getSymbol("box.holder.counter").name', "counter", 'Instance namespace property name set on "this" can be found.'); is('symbols.getSymbol("box.holder.counter").alias', "box.holder.counter", 'Instance namespace property alias set on "this" can be found.'); is('symbols.getSymbol("box.holder.counter").memberOf', "box.holder", 'Static namespace property memberOf set on "this" can be found.'); @@ -230,16 +230,16 @@ var testCases = [ is('symbols.getSymbol("Person").hasMethod("initialize")', true, 'Lent instance method name can be found.'); is('symbols.getSymbol("Person").hasMethod("say")', true, 'Second instance method can be found.'); is('symbols.getSymbol("Person#sing").isStatic', false, 'Instance method is known to be not static.'); - + is('symbols.getSymbol("Person.getCount").name', "getCount", 'Static method name from second lend comment can be found.'); is('symbols.getSymbol("Person.getCount").isStatic', true, 'Static method from second lend comment is known to be static.'); - + is('LOG.warnings.filter(function($){if($.indexOf("notok") > -1) return $}).length', 1, 'A warning is emitted when lending to an undocumented parent.'); } , function() { symbolize({a:true, _: [SYS.pwd+"test/param_inline.js"]}); - + is('symbols.getSymbol("Layout").params[0].type', "int", 'Inline param name is set.'); is('symbols.getSymbol("Layout").params[0].desc', "The number of columns.", 'Inline param desc is set from comment.'); is('symbols.getSymbol("Layout#getElement").params[0].name', "id", 'User defined param documentation takes precedence over parser defined.'); @@ -270,11 +270,11 @@ var testCases = [ is('symbols.getSymbol("Contact").params[1].name', 'person.name', 'The name of a param set with a dot name is found.'); is('symbols.getSymbol("Contact").params[2].name', 'person.age', 'The name of a second param set with a dot name is found.'); is('symbols.getSymbol("Contact").params[4].name', 'connection', 'The name of a param after config is found.'); - + is('symbols.getSymbol("Family").params[0].name', 'persons', 'Another name of a param is found.'); is('symbols.getSymbol("Family").params[1].name', 'persons.Father', 'The name of a param+config is found.'); is('symbols.getSymbol("Family").params[2].name', 'persons.Mother', 'The name of a second param+config is found.'); - is('symbols.getSymbol("Family").params[3].name', 'persons.Children', 'The name of a third param+config is found.'); + is('symbols.getSymbol("Family").params[3].name', 'persons.Children', 'The name of a third param+config is found.'); } , function() { diff --git a/tests/lib/jsdoc-toolkit/app/test/anon_inner.js b/tests/lib/jsdoc-toolkit/app/test/anon_inner.js index 227eeee55e2ce7eb29350d7084a2030fcda16778..e1b4bfa9d42f707b46122f5f2f47e3521fd0ed7c 100644 --- a/tests/lib/jsdoc-toolkit/app/test/anon_inner.js +++ b/tests/lib/jsdoc-toolkit/app/test/anon_inner.js @@ -2,7 +2,7 @@ * @name bar * @namespace */ - + new function() { /** * @name bar-foo diff --git a/tests/lib/jsdoc-toolkit/app/test/augments.js b/tests/lib/jsdoc-toolkit/app/test/augments.js index 12e706ebc7b19297e78ee4983877ff9d3ea8c721..d5e10d5517f565ba61689353c07ba767f1aed695 100644 --- a/tests/lib/jsdoc-toolkit/app/test/augments.js +++ b/tests/lib/jsdoc-toolkit/app/test/augments.js @@ -4,10 +4,10 @@ function Layout(p) { this.init = function(p) { } - + this.getId = function() { } - + /** @type Page */ this.orientation = "landscape"; } diff --git a/tests/lib/jsdoc-toolkit/app/test/borrows.js b/tests/lib/jsdoc-toolkit/app/test/borrows.js index a5d8ea4aab47c37044e5bcb93f9e7705a966d7cd..23996fcb91f9d54239ac0dd53cfaaced07990156 100644 --- a/tests/lib/jsdoc-toolkit/app/test/borrows.js +++ b/tests/lib/jsdoc-toolkit/app/test/borrows.js @@ -5,14 +5,14 @@ function Layout(p) { /** initilize 1 */ this.init = function(p) { } - + /** get the id */ this.getId = function() { } - + /** @type string */ this.orientation = "landscape"; - + function getInnerElements(elementSecretId){ } } diff --git a/tests/lib/jsdoc-toolkit/app/test/borrows2.js b/tests/lib/jsdoc-toolkit/app/test/borrows2.js index c0d5ea21f45637d1391ec373579202f3b2ef4871..cb76c226fa2dd5a0531958ae5a86ec02f37a2f5d 100644 --- a/tests/lib/jsdoc-toolkit/app/test/borrows2.js +++ b/tests/lib/jsdoc-toolkit/app/test/borrows2.js @@ -7,7 +7,7 @@ function Foo() { /** this is a zip. */ this.zip = function() {} - + this.my_zop = new Bar().zop; } @@ -18,6 +18,6 @@ function Foo() { function Bar() { /** this is a zop. */ this.zop = function() {} - + this.my_zip = new Foo().zip; } \ No newline at end of file diff --git a/tests/lib/jsdoc-toolkit/app/test/event.js b/tests/lib/jsdoc-toolkit/app/test/event.js index 7e41d6f638c6f80f1bccc10dce9305d526c24800..4c7098b78d16a08dce66de367d131a68dc65e565 100644 --- a/tests/lib/jsdoc-toolkit/app/test/event.js +++ b/tests/lib/jsdoc-toolkit/app/test/event.js @@ -23,7 +23,7 @@ * @function * @fires Kitchen#event:cakeEaten */ - + /** * @name Bakery * @constructor diff --git a/tests/lib/jsdoc-toolkit/app/test/exports.js b/tests/lib/jsdoc-toolkit/app/test/exports.js index 63a87cb4d07fb1f1adaaa25a1d0b16ade33be9c5..566e5c8ba165ea9f7fa12b091dadcf1d57076f33 100644 --- a/tests/lib/jsdoc-toolkit/app/test/exports.js +++ b/tests/lib/jsdoc-toolkit/app/test/exports.js @@ -1,13 +1,13 @@ /** @namespace */ var mxn = {}; -(function(){ +(function(){ /** @exports Map as mxn.Map */ var Map = /** @constructor */ mxn.Map = function() { }; - + /** A method. */ Map.prototype.doThings = function() { }; diff --git a/tests/lib/jsdoc-toolkit/app/test/functions_anon.js b/tests/lib/jsdoc-toolkit/app/test/functions_anon.js index e9dd6c1bee034258c804103eda3cefc82ec3b3a1..0fdf7c89adc2726b2e34de4ba70e8516fbd78d37 100644 --- a/tests/lib/jsdoc-toolkit/app/test/functions_anon.js +++ b/tests/lib/jsdoc-toolkit/app/test/functions_anon.js @@ -30,7 +30,7 @@ bar2 = new function Zoola2() { module = (function () { /** won't appear in documentation */ var priv = 1; - + /** @scope module */ return { /** will appear as a property of module */ diff --git a/tests/lib/jsdoc-toolkit/app/test/functions_nested.js b/tests/lib/jsdoc-toolkit/app/test/functions_nested.js index f044fafeea8924e1483ad6ba57a3d46402eb4ee4..abff69990a8565fc9aa8aa723e13bfa45e23956c 100644 --- a/tests/lib/jsdoc-toolkit/app/test/functions_nested.js +++ b/tests/lib/jsdoc-toolkit/app/test/functions_nested.js @@ -12,12 +12,12 @@ Foo = function(id) { Foo.prototype.methodOne = function(bar) { alert(bar); }; - + // same again Foo.prototype.methodTwo = function(bar2) { alert(bar2); }; - + // and these are only executed if the enclosing function is actually called // and who knows if that will ever happen? Bar = function(pez) { @@ -26,7 +26,7 @@ Foo = function(id) { Zop.prototype.zap = function(p){ alert(p); }; - + // but this is only visible inside Foo function inner() { } diff --git a/tests/lib/jsdoc-toolkit/app/test/globals.js b/tests/lib/jsdoc-toolkit/app/test/globals.js index 3f83fb1f95fd8a0d8e0ee9cea4ec7ca188c09c9d..a61824879d7ad456250ed45f0235bf172f96c1e6 100644 --- a/tests/lib/jsdoc-toolkit/app/test/globals.js +++ b/tests/lib/jsdoc-toolkit/app/test/globals.js @@ -1,10 +1,10 @@ function example(/**Circle*/a, b) { /** a global defined in function */ var number = a; - + var hideNumber = function(){ } - + setNumber = function(){ } alert('You have chosen: ' + b); diff --git a/tests/lib/jsdoc-toolkit/app/test/jsdoc_test.js b/tests/lib/jsdoc-toolkit/app/test/jsdoc_test.js index 081771285e3d452d7effd696a1cce1c651b02c39..120a1861020c7630a2f4679342c00ec669fff9dd 100644 --- a/tests/lib/jsdoc-toolkit/app/test/jsdoc_test.js +++ b/tests/lib/jsdoc-toolkit/app/test/jsdoc_test.js @@ -1,27 +1,27 @@ -/** +/** * @fileoverview This file is to be used for testing the JSDoc parser * It is not intended to be an example of good JavaScript OO-programming, - * nor is it intended to fulfill any specific purpose apart from - * demonstrating the functionality of the + * nor is it intended to fulfill any specific purpose apart from + * demonstrating the functionality of the * <a href='http://sourceforge.net/projects/jsdoc'>JSDoc</a> parser * * @author Gabriel Reid gab_reid@users.sourceforge.net - * @version 0.1 + * @version 0.1 */ /** * Construct a new Shape object. - * @class This is the basic Shape class. + * @class This is the basic Shape class. * It can be considered an abstract class, even though no such thing * really existing in JavaScript * @constructor - * @throws MemoryException if there is no more memory + * @throws MemoryException if there is no more memory * @throws GeneralShapeException rarely (if ever) * @return {Shape|Coordinate} A new shape. */ function Shape(){ - + /** * This is an example of a function that is not given as a property * of a prototype, but instead it is assigned within a constructor. @@ -34,7 +34,7 @@ function Shape(){ return "Shape"; } - /** + /** * This is an inner method, just used here as an example * @since version 0.5 * @author Sue Smart @@ -42,14 +42,14 @@ function Shape(){ function addReference(){ // Do nothing... } - + } /** * Create a new Hexagon instance. * @extends Shape - * @class Hexagon is a class that is a <i>logical</i> sublcass of - * {@link Shape} (thanks to the <code>@extends</code> tag), but in + * @class Hexagon is a class that is a <i>logical</i> sublcass of + * {@link Shape} (thanks to the <code>@extends</code> tag), but in * reality it is completely unrelated to Shape. * @param {int} sideLength The length of one side for the new Hexagon * @example @@ -66,8 +66,8 @@ function Hexagon(sideLength) { /** * This is an unattached (static) function that adds two integers together. - * @param {int} One The first number to add - * @param {int} Two The second number to add + * @param {int} One The first number to add + * @param {int} Two The second number to add * @author Gabriel Reid * @deprecated So you shouldn't use it anymore! Use {@link Shape#getClassName} instead. */ @@ -83,7 +83,7 @@ function Add(One, Two){ Shape.prototype.color = null; /** - * The border of this shape. + * The border of this shape. * @field * @type int */ @@ -146,7 +146,7 @@ Shape.prototype.clone = function(){ } /** - * Create a new Rectangle instance. + * Create a new Rectangle instance. * @class A basic rectangle class, inherits from Shape. * This class could be considered a concrete implementation class * @constructor @@ -157,7 +157,7 @@ Shape.prototype.clone = function(){ * @augments Shape * @hilited */ -function Rectangle(width, // This is the width +function Rectangle(width, // This is the width height // This is the height ){ if (width){ @@ -174,7 +174,7 @@ Rectangle.prototype = new Shape(); /** * Value to represent the width of the Rectangle. - * <br>Text in <b>bold</b> and <i>italic</i> and a + * <br>Text in <b>bold</b> and <i>italic</i> and a * link to <a href="http://sf.net">SourceForge</a> * @private * @type int @@ -189,7 +189,7 @@ Rectangle.prototype.width = 0; Rectangle.prototype.height = 0; /** - * Get the type of this object. + * Get the type of this object. * @type String */ Rectangle.prototype.getClassName= function(){ @@ -207,8 +207,8 @@ Rectangle.prototype.getWidth = function(){ /** * Get the value of the height for the Rectangle. - * Another getter is the {@link Shape#getColor} method in the - * {@link Shape} base class. + * Another getter is the {@link Shape#getColor} method in the + * {@link Shape} base class. * @return The height of this Rectangle * @type int * @see Rectangle#setHeight @@ -258,8 +258,8 @@ function Square(width, height){ if (height){ this.height = height; } - } - + } + } /* Square is a subclass of Rectangle */ @@ -275,7 +275,7 @@ Square.prototype.setWidth = function(width){ } /** - * Set the height value for this Shape + * Set the height value for this Shape * Sets the {@link Rectangle#height} attribute in the Rectangle. * @param {int} height The height value to be set */ @@ -301,14 +301,14 @@ function Circle(radius){ /* Circle inherits from {@link Shape} */ Circle.prototype = new Shape(); -/** - * The radius value for this Circle +/** + * The radius value for this Circle * @private * @type int */ Circle.prototype.radius = 0; -/** +/** * A very simple class (static) field that is also a constant * @final * @type float @@ -324,7 +324,7 @@ Circle.prototype.getRadius = function(){ return this.radius; } -/** +/** * Set the radius value for this Circle * @param {int} radius The {@link Circle#radius} value to set * @see #getRadius @@ -333,7 +333,7 @@ Circle.prototype.setRadius = function(radius){ this.radius = radius; } -/** +/** * An example of a class (static) method that acts as a factory for Circle * objects. Given a radius value, this method creates a new Circle. * @param {int} radius The radius value to use for the new Circle. @@ -359,16 +359,16 @@ function Coordinate(x, y){ } } -/** - * The x portion of the Coordinate +/** + * The x portion of the Coordinate * @type int * @see #getX * @see #setX */ Coordinate.prototype.x = 0; -/** - * The y portion of the Coordinate +/** + * The y portion of the Coordinate * @type int * @see #getY * @see #setY @@ -384,7 +384,7 @@ Coordinate.prototype.getX = function(){ return this.x; } -/** +/** * Get the y portion of the Coordinate. * @type int * @see #setY @@ -402,7 +402,7 @@ Coordinate.prototype.setX = function(x){ this.x = x; } -/** +/** * Sets the y portion of the Coordinate. * @param {int} y The y value to set * @see #getY @@ -419,7 +419,7 @@ function ShapeFactory(){ } ShapeFactory.prototype = { - /** + /** * Creates a new {@link Shape} instance. * @return A new {@link Shape} * @type Shape @@ -441,37 +441,37 @@ MySingletonShapeFactory = function(){ * @type Shape * @return A new {@link Shape} */ - this.getShape = function(){ - return null; + this.getShape = function(){ + return null; } } -/** +/** * Create a new Foo instance. * @class This is the Foo class. It exists to demonstrate 'nested' classes. - * @constructor + * @constructor * @see Foo.Bar */ function Foo(){} -/** +/** * Creates a new instance of Bar. * @class This class exists to demonstrate 'nested' classes. - * @constructor + * @constructor * @see Foo.Bar */ function Bar(){} -/** +/** * Nested class - * @constructor + * @constructor */ Foo.Bar = function(){ /** The x. */ this.x = 2; } Foo.Bar.prototype = new Bar(); -/** The y. */ +/** The y. */ Foo.Bar.prototype.y = '3'; diff --git a/tests/lib/jsdoc-toolkit/app/test/memberof.js b/tests/lib/jsdoc-toolkit/app/test/memberof.js index 883bbdeb0d2952f7950e047a99a007362b2e748e..cf1404ecafd340d33f911c9b5bd01cbe5345bd35 100644 --- a/tests/lib/jsdoc-toolkit/app/test/memberof.js +++ b/tests/lib/jsdoc-toolkit/app/test/memberof.js @@ -3,7 +3,7 @@ pack = function() { this.init = function(){} function config(){} } - + pack.build = function(task) {}; /** @memberOf pack */ diff --git a/tests/lib/jsdoc-toolkit/app/test/memberof2.js b/tests/lib/jsdoc-toolkit/app/test/memberof2.js index bc3d9d8f491fa31f891580115fef15872d18202f..77942ae8998665fd970596ccb46c899bef540092 100644 --- a/tests/lib/jsdoc-toolkit/app/test/memberof2.js +++ b/tests/lib/jsdoc-toolkit/app/test/memberof2.js @@ -7,19 +7,19 @@ function Foo() { */ function bar(a, b) { } - + /** @memberOf Foo */ var zip = function(p, q) { } - + /** @memberOf Foo */ function zop( x,y ) { } - + /** @memberOf Foo @constructor diff --git a/tests/lib/jsdoc-toolkit/app/test/namespace_nested.js b/tests/lib/jsdoc-toolkit/app/test/namespace_nested.js index 46cafa2fa4c94853d72c714eb968a592c50f1a99..394447c029b8cec4c5df90560ef581e0d74758c3 100644 --- a/tests/lib/jsdoc-toolkit/app/test/namespace_nested.js +++ b/tests/lib/jsdoc-toolkit/app/test/namespace_nested.js @@ -1,9 +1,9 @@ -/** +/** @namespace This is the first namespace. */ ns1 = {}; -/** +/** This is the second namespace. @namespace */ diff --git a/tests/lib/jsdoc-toolkit/app/test/nocode.js b/tests/lib/jsdoc-toolkit/app/test/nocode.js index 1cf99bc982e7f532f0d36d44b8f1e0c3daf1eb0e..22b02ccc48f9664cea7a6928f5c68734e62afd3b 100644 --- a/tests/lib/jsdoc-toolkit/app/test/nocode.js +++ b/tests/lib/jsdoc-toolkit/app/test/nocode.js @@ -4,7 +4,7 @@ @function */ function blahblah() { - + } /**#nocode-*/ diff --git a/tests/lib/jsdoc-toolkit/app/test/oblit_anon.js b/tests/lib/jsdoc-toolkit/app/test/oblit_anon.js index 8d9e9413e9345266efe91c316e751f75a27842f2..aa79f99d967dd4992f55c9d4acc7451538a2ee66 100644 --- a/tests/lib/jsdoc-toolkit/app/test/oblit_anon.js +++ b/tests/lib/jsdoc-toolkit/app/test/oblit_anon.js @@ -1,6 +1,6 @@ /** the options */ opt = Opt.get( - arguments, + arguments, { d: "directory", c: "conf", diff --git a/tests/lib/jsdoc-toolkit/app/test/overview.js b/tests/lib/jsdoc-toolkit/app/test/overview.js index 1dfc09b1fc1f62b869fadfcddf44128517d27ee4..8e3eda7492ebb3c029b9e10e4ab39f71e1a93603 100644 --- a/tests/lib/jsdoc-toolkit/app/test/overview.js +++ b/tests/lib/jsdoc-toolkit/app/test/overview.js @@ -1,5 +1,5 @@ /** - * @overview This "library" contains a + * @overview This "library" contains a * lot of classes and functions. * @example <pre> @@ -8,11 +8,11 @@ </pre> * @name My Cool Library * @author Joe Smith jsmith@company.com - * @version 0.1 + * @version 0.1 */ - -/** - * Gets the current foo + +/** + * Gets the current foo * @param {String} fooId The unique identifier for the foo. * @return {Object} Returns the current foo. */ diff --git a/tests/lib/jsdoc-toolkit/app/test/param_inline.js b/tests/lib/jsdoc-toolkit/app/test/param_inline.js index 09845b28315018c9c8080228c2fe0769004071c3..d457238270e6be991c53f5fc3989858cbda272dc 100644 --- a/tests/lib/jsdoc-toolkit/app/test/param_inline.js +++ b/tests/lib/jsdoc-toolkit/app/test/param_inline.js @@ -12,19 +12,19 @@ function Layout(/**int*/columns){ /** number|string */ id ) { }; - - /** + + /** @constructor */ this.Canvas = function(top, left, /**int*/width, height) { /** Is it initiated yet? */ this.initiated = true; } - + this.rotate = function(/**nothing*/) { } - - /** + + /** @param x @param y @param {zoppler} z*/ diff --git a/tests/lib/jsdoc-toolkit/app/test/prototype.js b/tests/lib/jsdoc-toolkit/app/test/prototype.js index 114700837fcf49e1aa3aa28489a616bf5fde5651..a161ed7ec3eaab569a935b2c5cb9d6db42db2536 100644 --- a/tests/lib/jsdoc-toolkit/app/test/prototype.js +++ b/tests/lib/jsdoc-toolkit/app/test/prototype.js @@ -5,7 +5,7 @@ function Article() { Article.prototype.init = function(title) { /** the instance title */ this.title = title; - + /** the static counter */ Article.counter = 1; } diff --git a/tests/lib/jsdoc-toolkit/app/test/prototype_oblit_constructor.js b/tests/lib/jsdoc-toolkit/app/test/prototype_oblit_constructor.js index 9248248644249a7031798ecce00a59bd4d82280f..13ec6ef18034eb6bc002329a635019e0d9365494 100644 --- a/tests/lib/jsdoc-toolkit/app/test/prototype_oblit_constructor.js +++ b/tests/lib/jsdoc-toolkit/app/test/prototype_oblit_constructor.js @@ -8,7 +8,7 @@ Article.prototype = { /** the value of the Title instance */ this.title = title; }, - + init: function(pages) { /** the value of the pages of the Article instance */ this.pages = pages; diff --git a/tests/lib/jsdoc-toolkit/app/test/shared.js b/tests/lib/jsdoc-toolkit/app/test/shared.js index e1c277a6fcb9e292f4466c928d582ebc05afdc59..7fb4cd3027cf89b60ad21cc1beeddff94ae57880 100644 --- a/tests/lib/jsdoc-toolkit/app/test/shared.js +++ b/tests/lib/jsdoc-toolkit/app/test/shared.js @@ -4,13 +4,13 @@ * @class * @name Array */ - + /**#@+ * Extension to builtin array. * @memberOf Array * @method */ - + /** * @returns Boolen if some array members... */ diff --git a/tests/lib/jsdoc-toolkit/app/test/shortcuts.js b/tests/lib/jsdoc-toolkit/app/test/shortcuts.js index f738f1e1cdd3bb9d91a89d89a1b5d626e112d5fb..abbcfdfdb4939328be1aa9e9ec5c8fb49cb53791 100644 --- a/tests/lib/jsdoc-toolkit/app/test/shortcuts.js +++ b/tests/lib/jsdoc-toolkit/app/test/shortcuts.js @@ -6,17 +6,17 @@ // */ // var D = Date.prototype, // $N = Number; -// +// // D.locale = function(){ // }; -// +// // /** // @return {string} The cardinal number string. // */ // $N.nth = function(n){ // }; -// +// // LOAD.file = function(){ // } -// +// // /**#=-*/ \ No newline at end of file diff --git a/tests/lib/jsdoc-toolkit/app/test/synonyms.js b/tests/lib/jsdoc-toolkit/app/test/synonyms.js index 09066b98f5bda7cf281b30951801553e4823c595..8068f7a01581e0332ee267cc0c64ac2b798a29e8 100644 --- a/tests/lib/jsdoc-toolkit/app/test/synonyms.js +++ b/tests/lib/jsdoc-toolkit/app/test/synonyms.js @@ -5,7 +5,7 @@ function Foo() { /** this is a zip. */ this.zip = function() {} - + /** from Bar */ this.my_zop = new Bar().zop; } @@ -17,7 +17,7 @@ function Foo() { function Bar() { /** this is a zop. */ this.zop = function() {} - + /** from Foo */ this.my_zip = new Foo().zip; } diff --git a/tests/lib/jsdoc-toolkit/app/test/variable_redefine.js b/tests/lib/jsdoc-toolkit/app/test/variable_redefine.js index 2c07da09a94f851bfe9710103cb468de4fcb4135..e76c42131573046ff1853814a1c7c8efdf669a35 100644 --- a/tests/lib/jsdoc-toolkit/app/test/variable_redefine.js +++ b/tests/lib/jsdoc-toolkit/app/test/variable_redefine.js @@ -2,10 +2,10 @@ function Foo() { var bar = 1; bar = 2; // redefining a private - + this.baz = 1; baz = 2; // global - + /** a private */ var blap = { /** in here */ diff --git a/tests/lib/jsdoc-toolkit/changes.txt b/tests/lib/jsdoc-toolkit/changes.txt index b0acbab775682616ae76ec491a8c2c275e471efd..dea28c492265432c80983d8bfab972dff381cf8d 100644 --- a/tests/lib/jsdoc-toolkit/changes.txt +++ b/tests/lib/jsdoc-toolkit/changes.txt @@ -4,7 +4,7 @@ * Added support for the -m option to suppress warnings for multiple docs. * Added patch by brownsea42 to support quoted user variables on the command line. ( issue #281 ) * Fixed bug that sometimes caused links to events to be incorrect. ( issue #292 ) - + == 2.3.3 == * Fixed bug that made all fields declared with the @property tag static. ( issue #262 ) @@ -14,7 +14,7 @@ * Applied patch from kunhualqk, fix for bug where @link to borrowed member did not resolve to parent class. ( issue #218 ) * Fix for @requires not linking back to the required class * Added experimental support for @constructs to have an argument, the class name, when applied to a function assignment. - + == 2.3.2 == * Minor update to the usage notes and corrected the version number displayed in the output. @@ -33,7 +33,7 @@ * Fixed bug that caused parens around a function to make it to be unrecognized. ( issue #213 ) * Fixed bug prevented explicit links to named anchors from working (thanks katgao.pku). ( issue #215 ) * Fixed bug that prevented full description from appearing in file overview. ( issue #224 ) - + == 2.2.1 == * Fixed bug with class template, where sorting of methods was accidentally removed (thanks dezfowler). @@ -46,7 +46,7 @@ * Modified @borrows tag experimentally to allow for missing "as ..." clause. * Added support for the @exports tag, to allow one symbol to be documented as another. * Added support for the -S option to document code following the Secure Modules pattern. - + == 2.1.0 == * Added support for the @event tag. @@ -121,4 +121,3 @@ * Underscored symbols are now treated as if they have a @private tag by default. * Improved support for anonymous constructors. * Added support for the nocode meta tag. - \ No newline at end of file diff --git a/tests/lib/jsdoc-toolkit/conf/sample.conf b/tests/lib/jsdoc-toolkit/conf/sample.conf index ad0f08e658ed05e93d3c0e8f9403a2927755738f..c28347b0ebccf7d8d89e959b3128956ca0ad2ab9 100644 --- a/tests/lib/jsdoc-toolkit/conf/sample.conf +++ b/tests/lib/jsdoc-toolkit/conf/sample.conf @@ -4,7 +4,7 @@ you frequently reuse the same options. Note that you don't need to define every option in this file, you can combine a configuration file with additional options on the commandline if your wish. - + You would include this configuration file by running JsDoc Toolkit like so: java -jar jsrun.jar app/run.js -c=conf/sample.conf @@ -13,19 +13,19 @@ { // source files to use _: ['app/test/jsdoc_test.js'], - + // document all functions, even uncommented ones a: true, - + // including those marked @private p: true, - + // some extra variables I want to include D: {generatedBy: "Michael Mathews", copyright: "2008"}, - + // use this directory as the output directory d: "docs", - + // use this template t: "templates/jsdoc" } \ No newline at end of file diff --git a/tests/lib/jsdoc-toolkit/java/build.xml b/tests/lib/jsdoc-toolkit/java/build.xml index bb845ce3a0ee1a30ab069ca375a85dd24cf9c1af..078fa8aaf393045da7a87109285152c633d0fde0 100644 --- a/tests/lib/jsdoc-toolkit/java/build.xml +++ b/tests/lib/jsdoc-toolkit/java/build.xml @@ -5,7 +5,7 @@ <target name="compile"> <mkdir dir="build/classes"/> - <javac + <javac srcdir="src" destdir="build/classes" classpath="./classes/js.jar" /> @@ -20,7 +20,7 @@ </manifest> </jar> </target> - + <target name="debugjar"> <mkdir dir="build/jar"/> <jar destfile="build/jar/jsdebug.jar" basedir="build/classes"> diff --git a/tests/lib/jsdoc-toolkit/java/build_1.4.xml b/tests/lib/jsdoc-toolkit/java/build_1.4.xml index ab408a4c44ada3f8d9ede68723d44ccc9b3d7fe6..06201e7888ecc7f64f5f383b49ec8a419df98fc1 100644 --- a/tests/lib/jsdoc-toolkit/java/build_1.4.xml +++ b/tests/lib/jsdoc-toolkit/java/build_1.4.xml @@ -5,7 +5,7 @@ <target name="compile"> <mkdir dir="build/classes"/> - <javac + <javac srcdir="src" destdir="build/classes" classpath="./classes/js.jar" /> @@ -20,7 +20,7 @@ </manifest> </jar> </target> - + <target name="debugjar"> <mkdir dir="build/jar"/> <jar jarfile="build/jar/jsdebug.jar" basedir="build/classes"> diff --git a/tests/lib/jsdoc-toolkit/java/src/JsDebugRun.java b/tests/lib/jsdoc-toolkit/java/src/JsDebugRun.java index 319a5c67bc9cfc1b9774865cef3f69f85a5dd8b8..8959011d91c7e3c919b7112a50bb1c8434993df9 100755 --- a/tests/lib/jsdoc-toolkit/java/src/JsDebugRun.java +++ b/tests/lib/jsdoc-toolkit/java/src/JsDebugRun.java @@ -1,9 +1,9 @@ /** * A trivial bootstrap class that simply adds the path to the * .js file as an argument to the Rhino call. This little hack - * allows the code in the .js file to have access to it's own - * path via the Rhino arguments object. This is necessary to - * allow the .js code to find resource files in a location + * allows the code in the .js file to have access to it's own + * path via the Rhino arguments object. This is necessary to + * allow the .js code to find resource files in a location * relative to itself. * * USAGE: java -jar jsdebug.jar path/to/file.js @@ -11,7 +11,7 @@ public class JsDebugRun { public static void main(String[] args) { String[] jsargs = {"-j="+args[0]}; - + String[] allArgs = new String[jsargs.length + args.length]; System.arraycopy(args, 0, allArgs, 0, args.length); System.arraycopy(jsargs, 0, allArgs, args.length ,jsargs.length); diff --git a/tests/lib/jsdoc-toolkit/java/src/JsRun.java b/tests/lib/jsdoc-toolkit/java/src/JsRun.java index 25f519a95e53f0aae68fb1dc624cd26c8aaca792..0f82b3b6b1da76c5e4b8541592c90739254a25a7 100644 --- a/tests/lib/jsdoc-toolkit/java/src/JsRun.java +++ b/tests/lib/jsdoc-toolkit/java/src/JsRun.java @@ -1,9 +1,9 @@ /** * A trivial bootstrap class that simply adds the path to the * .js file as an argument to the Rhino call. This little hack - * allows the code in the .js file to have access to it's own - * path via the Rhino arguments object. This is necessary to - * allow the .js code to find resource files in a location + * allows the code in the .js file to have access to it's own + * path via the Rhino arguments object. This is necessary to + * allow the .js code to find resource files in a location * relative to itself. * * USAGE: java -jar jsrun.jar path/to/file.js @@ -11,7 +11,7 @@ public class JsRun { public static void main(String[] args) { String[] jsargs = {"-j="+args[0]}; - + String[] allArgs = new String[jsargs.length + args.length]; System.arraycopy(args, 0, allArgs, 0, args.length); System.arraycopy(jsargs, 0, allArgs, args.length ,jsargs.length); diff --git a/tests/lib/jsdoc-toolkit/templates/jsdoc/allfiles.tmpl b/tests/lib/jsdoc-toolkit/templates/jsdoc/allfiles.tmpl index a5d2c40e463d1c29f48eed4b9d0f81b97ef1ab9d..7f31f55cbe6a72fd7c8164e6e1a04074bc5a6f04 100644 --- a/tests/lib/jsdoc-toolkit/templates/jsdoc/allfiles.tmpl +++ b/tests/lib/jsdoc-toolkit/templates/jsdoc/allfiles.tmpl @@ -5,22 +5,22 @@ {! Link.base = ""; /* all generated links will be relative to this */ !} <title>JsDoc Reference - File Index</title> <meta name="generator" content="JsDoc Toolkit" /> - + <style type="text/css"> {+include("static/default.css")+} </style> </head> - + <body> {+include("static/header.html")+} - + <div id="index"> {+publish.classesIndex+} </div> - + <div id="content"> <h1 class="classTitle">File Index</h1> - + <for each="item" in="data"> <div> <h2>{+new Link().toSrc(item.alias).withText(item.name)+}</h2> @@ -45,7 +45,7 @@ </div> <hr /> </for> - + </div> <div class="fineprint" style="clear:both"> <if test="JSDOC.opt.D.copyright">©{+JSDOC.opt.D.copyright+}<br /></if> diff --git a/tests/lib/jsdoc-toolkit/templates/jsdoc/class.tmpl b/tests/lib/jsdoc-toolkit/templates/jsdoc/class.tmpl index 4f980d426970f47a09b9c738782f68ae3b64458e..eb1f4681e26bb3c37e3d9f4dafc11d23c5fb95dd 100644 --- a/tests/lib/jsdoc-toolkit/templates/jsdoc/class.tmpl +++ b/tests/lib/jsdoc-toolkit/templates/jsdoc/class.tmpl @@ -12,7 +12,7 @@ </head> <body> -<!-- ============================== header ================================= --> +<!-- ============================== header ================================= --> <!-- begin static/header.html --> {+include("static/header.html")+} <!-- end static/header.html --> @@ -23,17 +23,17 @@ {+publish.classesIndex+} <!-- end publish.classesIndex --> </div> - + <div id="content"> <!-- ============================== class title ============================ --> <h1 class="classTitle"> {! var classType = ""; - + if (data.isBuiltin()) { classType += "Built-In "; } - + if (data.isNamespace) { if (data.is('FUNCTION')) { classType += "Function "; @@ -47,7 +47,7 @@ {+classType+}{+data.alias+} </h1> -<!-- ============================== class summary ========================== --> +<!-- ============================== class summary ========================== --> <p class="description"> <if test="data.version"><br />Version {+ data.version +}.<br /> @@ -62,15 +62,15 @@ .join(", ") +}.<br /> </if> - + {+resolveLinks(data.classDesc)+} - + <if test="!data.isBuiltin()">{# isn't defined in any file #} <br /><i>Defined in: </i> {+new Link().toSrc(data.srcFile)+}. </if> </p> -<!-- ============================== constructor summary ==================== --> +<!-- ============================== constructor summary ==================== --> <if test="!data.isBuiltin() && (data.isNamespace || data.is('CONSTRUCTOR'))"> <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class {+data.alias+}."> <caption>{+classType+}Summary</caption> @@ -129,12 +129,12 @@ </tbody> </table> </if> - + <if test="data.inheritsFrom.length"> <dl class="inheritsList"> {! var borrowedMembers = data.properties.filter(function($) {return $.memberOf != data.alias}); - + var contributers = []; borrowedMembers.map(function($) {if (contributers.indexOf($.memberOf) < 0) contributers.push($.memberOf)}); for (var i = 0, l = contributers.length; i < l; i++) { @@ -189,7 +189,7 @@ </tbody> </table> </if> - + <if test="data.inheritsFrom.length"> <dl class="inheritsList"> {! @@ -213,7 +213,7 @@ + "</dd>"; } - + !} </dl> </if> @@ -248,7 +248,7 @@ </tbody> </table> </if> - + <if test="data.inheritsFrom.length"> <dl class="inheritsList"> {! @@ -272,38 +272,38 @@ + "</dd>"; } - + !} </dl> </if> </if> -<!-- ============================== constructor details ==================== --> +<!-- ============================== constructor details ==================== --> <if test="!data.isBuiltin() && (data.isNamespace || data.is('CONSTRUCTOR'))"> <div class="details"><a name="constructor"> </a> <div class="sectionTitle"> {+classType+}Detail </div> - + <div class="fixedFont">{! if (data.isPrivate) output += "<private> "; if (data.isInner) output += "<inner> "; !} <b>{+ data.alias +}</b><if test="classType != 'Namespace '">{+ makeSignature(data.params) +}</if> </div> - + <div class="description"> {+resolveLinks(data.desc)+} <if test="data.author"><br /><i>Author: </i>{+data.author+}.</if> </div> - + <if test="data.example.length"> <for each="example" in="data.example"> <pre class="code">{+example+}</pre> </for> </if> - - + + <if test="data.params.length"> <dl class="detailList"> <dt class="heading">Parameters:</dt> @@ -369,7 +369,7 @@ </div> </if> -<!-- ============================== field details ========================== --> +<!-- ============================== field details ========================== --> <if test="defined(ownProperties) && ownProperties.length"> <div class="sectionTitle"> Field Detail @@ -382,10 +382,10 @@ if (member.isStatic) output += "<static> "; if (member.isConstant) output += "<constant> "; !} - + <if test="member.type"><span class="light">{{+new Link().toSymbol(member.type)+}}</span></if> <if test="member.isStatic && member.memberOf != '_global_'"><span class="light">{+member.memberOf+}.</span></if><b>{+member.name+}</b> - + </div> <div class="description"> {+resolveLinks(member.desc)+} @@ -395,7 +395,7 @@ </if> <if test="member.author"><br /><i>Author: </i>{+member.author+}.</if> </div> - + <if test="member.example.length"> <for each="example" in="member.example"> <pre class="code">{+example+}</pre> @@ -437,7 +437,7 @@ </for> </if> -<!-- ============================== method details ========================= --> +<!-- ============================== method details ========================= --> <if test="defined(ownMethods) && ownMethods.length"> <div class="sectionTitle"> Method Detail @@ -449,10 +449,10 @@ if (member.isInner) output += "<inner> "; if (member.isStatic) output += "<static> "; !} - + <if test="member.type"><span class="light">{{+new Link().toSymbol(member.type)+}}</span></if> <if test="member.isStatic && member.memberOf != '_global_'"><span class="light">{+member.memberOf+}.</span></if><b>{+member.name.replace(/\^\d+$/, '')+}</b>{+makeSignature(member.params)+} - + </div> <div class="description"> {+resolveLinks(member.desc)+} @@ -462,13 +462,13 @@ </if> <if test="member.author"><br /><i>Author: </i>{+member.author+}.</if> </div> - + <if test="member.example.length"> <for each="example" in="member.example"> <pre class="code">{+example+}</pre> </for> </if> - + <if test="member.params.length"> <dl class="detailList"> <dt class="heading">Parameters:</dt> @@ -535,8 +535,8 @@ <if test="!$member_last"><hr /></if> </for> </if> - -<!-- ============================== event details ========================= --> + +<!-- ============================== event details ========================= --> <if test="defined(ownEvents) && ownEvents.length"> <div class="sectionTitle"> Event Detail @@ -548,10 +548,10 @@ if (member.isInner) output += "<inner> "; if (member.isStatic) output += "<static> "; !} - + <if test="member.type"><span class="light">{{+new Link().toSymbol(member.type)+}}</span></if> <if test="member.isStatic && member.memberOf != '_global_'"><span class="light">{+member.memberOf+}.</span></if><b>{+member.name+}</b>{+makeSignature(member.params)+} - + </div> <div class="description"> {+resolveLinks(member.desc)+} @@ -561,13 +561,13 @@ </if> <if test="member.author"><br /><i>Author: </i>{+member.author+}.</if> </div> - + <if test="member.example.length"> <for each="example" in="member.example"> <pre class="code">{+example+}</pre> </for> </if> - + <if test="member.params.length"> <dl class="detailList"> <dt class="heading">Parameters:</dt> @@ -634,11 +634,11 @@ <if test="!$member_last"><hr /></if> </for> </if> - + <hr /> </div> - + <!-- ============================== footer ================================= --> <div class="fineprint" style="clear:both"> <if test="JSDOC.opt.D.copyright">©{+JSDOC.opt.D.copyright+}<br /></if> diff --git a/tests/lib/jsdoc-toolkit/templates/jsdoc/index.tmpl b/tests/lib/jsdoc-toolkit/templates/jsdoc/index.tmpl index 06960ec7991344de9ac015e9de96fc3a7880b0a2..3d4f3e43cc90808839a021a029376870000c804c 100644 --- a/tests/lib/jsdoc-toolkit/templates/jsdoc/index.tmpl +++ b/tests/lib/jsdoc-toolkit/templates/jsdoc/index.tmpl @@ -2,25 +2,25 @@ <html lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset={+IO.encoding+}" /> - + <title>JsDoc Reference - Index</title> <meta name="generator" content="JsDoc Toolkit" /> - + <style type="text/css"> {+include("static/default.css")+} </style> </head> - + <body> {+include("static/header.html")+} - + <div id="index"> {+publish.classesIndex+} </div> - + <div id="content"> <h1 class="classTitle">Class Index</h1> - + <for each="thisClass" in="data"> <div> <h2>{+(new Link().toSymbol(thisClass.alias))+}</h2> @@ -28,7 +28,7 @@ </div> <hr /> </for> - + </div> <div class="fineprint" style="clear:both"> <if test="JSDOC.opt.D.copyright">©{+JSDOC.opt.D.copyright+}<br /></if> diff --git a/tests/lib/jsdoc-toolkit/templates/jsdoc/publish.js b/tests/lib/jsdoc-toolkit/templates/jsdoc/publish.js index 42300f4b4f0f55c3544a9872f7bfb90cbc0bf169..f716f1abc8d3e575be131594bc9392c00a7fcaf3 100644 --- a/tests/lib/jsdoc-toolkit/templates/jsdoc/publish.js +++ b/tests/lib/jsdoc-toolkit/templates/jsdoc/publish.js @@ -7,17 +7,17 @@ function publish(symbolSet) { symbolsDir: "symbols/", srcDir: "symbols/src/" }; - + // is source output is suppressed, just display the links to the source file if (JSDOC.opt.s && defined(Link) && Link.prototype._makeSrcLink) { Link.prototype._makeSrcLink = function(srcFilePath) { return "<"+srcFilePath+">"; } } - + // create the folders and subfolders to hold the output IO.mkPath((publish.conf.outDir+"symbols/src").split("/")); - + // used to allow Link to check the details of things being linked to Link.symbolSet = symbolSet; @@ -30,15 +30,15 @@ function publish(symbolSet) { print("Couldn't create the required templates: "+e); quit(); } - + // some ustility filters function hasNoParent($) {return ($.memberOf == "")} function isaFile($) {return ($.is("FILE"))} function isaClass($) {return ($.is("CONSTRUCTOR") || $.isNamespace)} - + // get an array version of the symbolset, useful for filtering var symbols = symbolSet.toArray(); - + // create the hilited source code files var files = JSDOC.opt.srcFiles; for (var i = 0, l = files.length; i < l; i++) { @@ -46,76 +46,76 @@ function publish(symbolSet) { var srcDir = publish.conf.outDir + "symbols/src/"; makeSrcFile(file, srcDir); } - + // get a list of all the classes in the symbolset var classes = symbols.filter(isaClass).sort(makeSortby("alias")); - + // create a filemap in which outfiles must be to be named uniquely, ignoring case if (JSDOC.opt.u) { var filemapCounts = {}; Link.filemap = {}; for (var i = 0, l = classes.length; i < l; i++) { var lcAlias = classes[i].alias.toLowerCase(); - + if (!filemapCounts[lcAlias]) filemapCounts[lcAlias] = 1; else filemapCounts[lcAlias]++; - - Link.filemap[classes[i].alias] = + + Link.filemap[classes[i].alias] = (filemapCounts[lcAlias] > 1)? lcAlias+"_"+filemapCounts[lcAlias] : lcAlias; } } - + // create a class index, displayed in the left-hand column of every class page Link.base = "../"; publish.classesIndex = classesTemplate.process(classes); // kept in memory - + // create each of the class pages for (var i = 0, l = classes.length; i < l; i++) { var symbol = classes[i]; - + symbol.events = symbol.getEvents(); // 1 order matters symbol.methods = symbol.getMethods(); // 2 - + Link.currentSymbol= symbol; var output = ""; output = classTemplate.process(symbol); - + IO.saveFile(publish.conf.outDir+"symbols/", ((JSDOC.opt.u)? Link.filemap[symbol.alias] : symbol.alias) + publish.conf.ext, output); } - + // regenerate the index with different relative links, used in the index pages Link.base = ""; publish.classesIndex = classesTemplate.process(classes); - + // create the class index page try { var classesindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"index.tmpl"); } catch(e) { print(e.message); quit(); } - + var classesIndex = classesindexTemplate.process(classes); IO.saveFile(publish.conf.outDir, "index"+publish.conf.ext, classesIndex); classesindexTemplate = classesIndex = classes = null; - + // create the file index page try { var fileindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allfiles.tmpl"); } catch(e) { print(e.message); quit(); } - + var documentedFiles = symbols.filter(isaFile); // files that have file-level docs var allFiles = []; // not all files have file-level docs, but we need to list every one - + for (var i = 0; i < files.length; i++) { allFiles.push(new JSDOC.Symbol(files[i], [], "FILE", new JSDOC.DocComment("/** */"))); } - + for (var i = 0; i < documentedFiles.length; i++) { var offset = files.indexOf(documentedFiles[i].alias); allFiles[offset] = documentedFiles[i]; } - + allFiles = allFiles.sort(makeSortby("name")); // output the file index page @@ -153,14 +153,14 @@ function include(path) { /** Turn a raw source file into a code-hilited page in the docs. */ function makeSrcFile(path, srcDir, name) { if (JSDOC.opt.s) return; - + if (!name) { name = path.replace(/\.\.?[\\\/]/g, "").replace(/[\\\/]/g, "_"); name = name.replace(/\:/g, "_"); } - + var src = {path: path, name:name, charset: IO.encoding, hilited: ""}; - + if (defined(JSDOC.PluginManager)) { JSDOC.PluginManager.run("onPublishSrc", src); } @@ -196,6 +196,6 @@ function resolveLinks(str, from) { return new Link().toSymbol(symbolName); } ); - + return str; } diff --git a/tests/lib/jsdoc-toolkit/templates/jsdoc/static/default.css b/tests/lib/jsdoc-toolkit/templates/jsdoc/static/default.css index 7481a2e8020af9ea966d3be94c2e8d9f050d8c02..7e4bfd6a05ed24755fa7283d236f1488be962bd6 100644 --- a/tests/lib/jsdoc-toolkit/templates/jsdoc/static/default.css +++ b/tests/lib/jsdoc-toolkit/templates/jsdoc/static/default.css @@ -136,7 +136,7 @@ ul.inheritsList } .detailList { - margin-left: 20px; + margin-left: 20px; line-height: 15px; } .detailList dt { margin-left: 20px; } diff --git a/tests/lib/jsdoc-toolkit/templates/jsdoc/symbol.tmpl b/tests/lib/jsdoc-toolkit/templates/jsdoc/symbol.tmpl index f8f4bd1f6f27ccd9658fdabcf1c4f97f53d1d8e6..549ab6e3f345ac006f2c17e15cda278a3bf00276 100644 --- a/tests/lib/jsdoc-toolkit/templates/jsdoc/symbol.tmpl +++ b/tests/lib/jsdoc-toolkit/templates/jsdoc/symbol.tmpl @@ -5,7 +5,7 @@ <isa>{+data.isa+}</isa> <desc>{+data.desc+}</desc> <classDesc>{+data.classDesc+}</classDesc> - + <methods><for each="method" in="data.methods"> <method> <name>{+method.name+}</name> @@ -22,7 +22,7 @@ </params> </method></for> </methods> - + <properties><for each="property" in="data.properties"> <property> <name>{+property.name+}</name> diff --git a/tests/lib/mocha-1.17.1/lib/browser/progress.js b/tests/lib/mocha-1.17.1/lib/browser/progress.js index 90526f72b8a64b36534c2831751555ca6d88712d..b30e5179ea49de84c4431669d4645ce2daf6c9bb 100644 --- a/tests/lib/mocha-1.17.1/lib/browser/progress.js +++ b/tests/lib/mocha-1.17.1/lib/browser/progress.js @@ -94,28 +94,28 @@ Progress.prototype.draw = function(ctx){ , y = half , rad = half - 1 , fontSize = this._fontSize; - + ctx.font = fontSize + 'px ' + this._font; - + var angle = Math.PI * 2 * (percent / 100); ctx.clearRect(0, 0, size, size); - + // outer circle ctx.strokeStyle = '#9f9f9f'; ctx.beginPath(); ctx.arc(x, y, rad, 0, angle, false); ctx.stroke(); - + // inner circle ctx.strokeStyle = '#eee'; ctx.beginPath(); ctx.arc(x, y, rad - 1, 0, angle, true); ctx.stroke(); - + // text var text = this._text || (percent | 0) + '%' , w = ctx.measureText(text).width; - + ctx.fillText( text , x - w / 2 + 1 diff --git a/tests/lib/mocha-1.17.1/mocha.js b/tests/lib/mocha-1.17.1/mocha.js index 3dcdae6c1bdc3efd8c3b62045c6f95118016b424..ca536c6468acd321840bb39a069e01031029e9c2 100644 --- a/tests/lib/mocha-1.17.1/mocha.js +++ b/tests/lib/mocha-1.17.1/mocha.js @@ -700,28 +700,28 @@ Progress.prototype.draw = function(ctx){ , y = half , rad = half - 1 , fontSize = this._fontSize; - + ctx.font = fontSize + 'px ' + this._font; - + var angle = Math.PI * 2 * (percent / 100); ctx.clearRect(0, 0, size, size); - + // outer circle ctx.strokeStyle = '#9f9f9f'; ctx.beginPath(); ctx.arc(x, y, rad, 0, angle, false); ctx.stroke(); - + // inner circle ctx.strokeStyle = '#eee'; ctx.beginPath(); ctx.arc(x, y, rad - 1, 0, angle, true); ctx.stroke(); - + // text var text = this._text || (percent | 0) + '%' , w = ctx.measureText(text).width; - + ctx.fillText( text , x - w / 2 + 1 diff --git a/tests/lib/mocha-1.17.1/test/hook.err.js b/tests/lib/mocha-1.17.1/test/hook.err.js index f28ecdd501c4fd4c65ed23b84fa0bcf94cd83012..873147ac02494f30107b515a9f4ed2daaf37b012 100644 --- a/tests/lib/mocha-1.17.1/test/hook.err.js +++ b/tests/lib/mocha-1.17.1/test/hook.err.js @@ -195,7 +195,7 @@ describe('hook error handling', function(){ after(function(){ calls.push("1.2 after"); }); - }); + }); afterEach(function() { calls.push('1 after each') @@ -244,7 +244,7 @@ describe('hook error handling', function(){ after(function(){ calls.push("2.2 after"); }); - }); + }); afterEach(function() { calls.push('2 after each') diff --git a/tests/resources/extractSearchEngineInformationFromUrlTests.yml b/tests/resources/extractSearchEngineInformationFromUrlTests.yml index b4b4f51b8c330443654eb80d2c6aa73af50e66d5..e845d0d44bcaf5bafb2d8e41745436dc7dd28ecf 100644 --- a/tests/resources/extractSearchEngineInformationFromUrlTests.yml +++ b/tests/resources/extractSearchEngineInformationFromUrlTests.yml @@ -30,7 +30,7 @@ - url: 'http://www.google.fr/search?hl=en&q=%3C%3E+%26test%3B+piwik+%26quot%3B&ei=GcXJSb-VKoKEsAPmnIjzBw&sa=X&oi=revisions_inline&ct=unquoted-query-link' engine: 'Google' keywords: '<> &test; piwik "' - + # testing Baidu special case (several variable names possible, and custom encoding) # see https://github.com/piwik/piwik/issues/589 diff --git a/tests/resources/lipsum.txt b/tests/resources/lipsum.txt index 2f2c9e1f04a9a5de1fd857ad621ff68da3665975..5392243d386da8c7a7c63e6c42ecebe124042e8d 100644 --- a/tests/resources/lipsum.txt +++ b/tests/resources/lipsum.txt @@ -36,4 +36,4 @@ Aenean lorem massa, bibendum eget commodo a, dignissim congue est. Aenean enim n Proin facilisis venenatis sapien ut tincidunt. Nam mollis ultrices turpis et molestie. Quisque sollicitudin erat sed tortor fringilla id placerat eros bibendum. Curabitur dictum metus eu urna consequat sed lobortis lectus scelerisque. Nunc ullamcorper porttitor velit a suscipit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed eget iaculis purus. Fusce ullamcorper risus sed mauris sagittis mollis. Etiam tellus tortor, dictum at vehicula id, suscipit placerat ligula. Aenean ipsum nisi, porta at cursus commodo, imperdiet eu metus. Vestibulum diam lorem, viverra eget faucibus non, molestie ut nibh. Mauris rhoncus mollis elit tristique egestas. Vivamus in nisi ante. Sed eu tellus et augue imperdiet rhoncus. -In aliquam porttitor eros, ultrices lacinia nunc tincidunt dictum. Sed vel erat lectus. Etiam tortor metus, pharetra sed hendrerit ac, egestas at mi. Nullam varius, dui id ultricies varius, turpis nisl dapibus leo, sed eleifend dolor neque vitae justo. Donec commodo, erat ut auctor semper, neque libero malesuada tellus, at faucibus quam ante non ante. Aenean dapibus consequat tincidunt. Cras nisl dolor, imperdiet eget adipiscing vitae, cursus eu lectus. Nulla est ipsum, semper sit amet rhoncus eget, ornare a libero. Integer aliquam sem justo. Quisque gravida hendrerit facilisis. Morbi ipsum velit, sodales non semper eu, dictum vitae mi. Maecenas et ante a elit ultricies interdum. Sed suscipit, elit id pellentesque posuere, nunc augue eleifend dui, nec rutrum mi diam at felis. Mauris vulputate risus a dui semper viverra. Nullam et justo lacus, sed cursus dolor. Donec non ligula ut nisl semper convallis et sit amet risus. Proin a dui ut erat adipiscing lobortis. Cras commodo ante ac neque ornare ac egestas augue volutpat. Integer sapien metus, pharetra sit amet sodales ac, tincidunt a nulla. \ No newline at end of file +In aliquam porttitor eros, ultrices lacinia nunc tincidunt dictum. Sed vel erat lectus. Etiam tortor metus, pharetra sed hendrerit ac, egestas at mi. Nullam varius, dui id ultricies varius, turpis nisl dapibus leo, sed eleifend dolor neque vitae justo. Donec commodo, erat ut auctor semper, neque libero malesuada tellus, at faucibus quam ante non ante. Aenean dapibus consequat tincidunt. Cras nisl dolor, imperdiet eget adipiscing vitae, cursus eu lectus. Nulla est ipsum, semper sit amet rhoncus eget, ornare a libero. Integer aliquam sem justo. Quisque gravida hendrerit facilisis. Morbi ipsum velit, sodales non semper eu, dictum vitae mi. Maecenas et ante a elit ultricies interdum. Sed suscipit, elit id pellentesque posuere, nunc augue eleifend dui, nec rutrum mi diam at felis. Mauris vulputate risus a dui semper viverra. Nullam et justo lacus, sed cursus dolor. Donec non ligula ut nisl semper convallis et sit amet risus. Proin a dui ut erat adipiscing lobortis. Cras commodo ante ac neque ornare ac egestas augue volutpat. Integer sapien metus, pharetra sit amet sodales ac, tincidunt a nulla. \ No newline at end of file diff --git a/tests/resources/overlay-test-site/index.html b/tests/resources/overlay-test-site/index.html index 6a7ff8e1397a65d51954747ca7e5fb56e507ef16..c6911af4db808a9d58e2555e2a274116df245570 100644 --- a/tests/resources/overlay-test-site/index.html +++ b/tests/resources/overlay-test-site/index.html @@ -85,7 +85,7 @@ try { var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 3); piwikTracker.setCookieDomain('*.piwik.org'); - + piwikTracker.trackPageView(); piwikTracker.enableLinkTracking(); } catch( err ) {} diff --git a/tests/resources/overlay-test-site/page-1.html b/tests/resources/overlay-test-site/page-1.html index c5440529e7e0ebdb2b1fc4dc75233c366164231f..47ef313d3a2af9033c6129803203fa9cc84938aa 100644 --- a/tests/resources/overlay-test-site/page-1.html +++ b/tests/resources/overlay-test-site/page-1.html @@ -85,7 +85,7 @@ try { var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 3); piwikTracker.setCookieDomain('*.piwik.org'); - + piwikTracker.trackPageView(); piwikTracker.enableLinkTracking(); } catch( err ) {} diff --git a/tests/resources/overlay-test-site/page-2.html b/tests/resources/overlay-test-site/page-2.html index 003a16f12db926fd9ef0aa789883f66325eae2e8..b2671380f4a341ada66c92b70ceafa625893e549 100644 --- a/tests/resources/overlay-test-site/page-2.html +++ b/tests/resources/overlay-test-site/page-2.html @@ -85,7 +85,7 @@ try { var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 3); piwikTracker.setCookieDomain('*.piwik.org'); - + piwikTracker.trackPageView(); piwikTracker.enableLinkTracking(); } catch( err ) {} diff --git a/tests/resources/overlay-test-site/page-3.html b/tests/resources/overlay-test-site/page-3.html index a93c54c80b051c104e8897d270bf61641b8bb669..361b3afecec61953caddb3fb8bcdcb6101d92056 100644 --- a/tests/resources/overlay-test-site/page-3.html +++ b/tests/resources/overlay-test-site/page-3.html @@ -85,7 +85,7 @@ try { var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 3); piwikTracker.setCookieDomain('*.piwik.org'); - + piwikTracker.trackPageView(); piwikTracker.enableLinkTracking(); } catch( err ) {} diff --git a/tests/resources/overlay-test-site/page-4.html b/tests/resources/overlay-test-site/page-4.html index ec4ad8b67b8ae3467370b4b5d83abd07b19eb61a..72c5f7aee7e15ebea2545d27bacc71e928f2b1f9 100644 --- a/tests/resources/overlay-test-site/page-4.html +++ b/tests/resources/overlay-test-site/page-4.html @@ -85,7 +85,7 @@ try { var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 3); piwikTracker.setCookieDomain('*.piwik.org'); - + piwikTracker.trackPageView(); piwikTracker.enableLinkTracking(); } catch( err ) {} diff --git a/tests/resources/overlay-test-site/page-5.html b/tests/resources/overlay-test-site/page-5.html index 35b8414657c695b81bab38e6826d4e853853a4a7..5b9ac655ed19de2aa09ebda872d43adef55a8c55 100644 --- a/tests/resources/overlay-test-site/page-5.html +++ b/tests/resources/overlay-test-site/page-5.html @@ -85,7 +85,7 @@ try { var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 3); piwikTracker.setCookieDomain('*.piwik.org'); - + piwikTracker.trackPageView(); piwikTracker.enableLinkTracking(); } catch( err ) {} diff --git a/tests/resources/overlay-test-site/page-6.html b/tests/resources/overlay-test-site/page-6.html index be42f72e3c1de15994143e4f7f321d2d4b740842..ed2c35dd76a2f0f8980f10e11d14e0bc32f540f3 100644 --- a/tests/resources/overlay-test-site/page-6.html +++ b/tests/resources/overlay-test-site/page-6.html @@ -85,7 +85,7 @@ try { var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 3); piwikTracker.setCookieDomain('*.piwik.org'); - + piwikTracker.trackPageView(); piwikTracker.enableLinkTracking(); } catch( err ) {}