Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--LEGALNOTICE4
-rw-r--r--README.md12
-rw-r--r--config/global.ini.php8
-rw-r--r--core/API/Proxy.php40
-rw-r--r--core/API/Request.php40
-rw-r--r--core/Access.php8
-rw-r--r--core/Archive.php100
-rw-r--r--core/ArchiveProcessor.php42
-rw-r--r--core/ArchiveProcessor/Parameters.php2
-rw-r--r--core/ArchiveProcessor/Rules.php2
-rw-r--r--core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php4
-rw-r--r--core/CliMulti/CliPhp.php4
-rw-r--r--core/CliMulti/Process.php2
-rw-r--r--core/Common.php38
-rw-r--r--core/Config.php12
-rw-r--r--core/Console.php2
-rw-r--r--core/CronArchive.php8
-rw-r--r--core/DataAccess/LogAggregator.php60
-rwxr-xr-xcore/DataFiles/Socials.php2
-rw-r--r--core/DataTable.php178
-rw-r--r--core/DataTable/BaseFilter.php8
-rw-r--r--core/DataTable/Filter/AddColumnsProcessedMetrics.php14
-rw-r--r--core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php12
-rw-r--r--core/DataTable/Filter/AddSummaryRow.php6
-rw-r--r--core/DataTable/Filter/BeautifyRangeLabels.php6
-rw-r--r--core/DataTable/Filter/BeautifyTimeRangeLabels.php6
-rwxr-xr-xcore/DataTable/Filter/CalculateEvolutionFilter.php4
-rwxr-xr-xcore/DataTable/Filter/ColumnCallbackAddColumn.php8
-rw-r--r--core/DataTable/Filter/ColumnCallbackAddColumnPercentage.php4
-rw-r--r--core/DataTable/Filter/ColumnCallbackAddColumnQuotient.php8
-rw-r--r--core/DataTable/Filter/ColumnCallbackAddMetadata.php8
-rw-r--r--core/DataTable/Filter/ColumnCallbackDeleteRow.php6
-rw-r--r--core/DataTable/Filter/ColumnCallbackReplace.php10
-rw-r--r--core/DataTable/Filter/ColumnDelete.php8
-rw-r--r--core/DataTable/Filter/ExcludeLowPopulation.php10
-rwxr-xr-xcore/DataTable/Filter/GroupBy.php4
-rw-r--r--core/DataTable/Filter/Limit.php4
-rw-r--r--core/DataTable/Filter/MetadataCallbackAddMetadata.php6
-rw-r--r--core/DataTable/Filter/MetadataCallbackReplace.php6
-rw-r--r--core/DataTable/Filter/Pattern.php8
-rw-r--r--core/DataTable/Filter/PatternRecursive.php8
-rw-r--r--core/DataTable/Filter/ReplaceColumnNames.php14
-rw-r--r--core/DataTable/Filter/ReplaceSummaryRowLabel.php12
-rw-r--r--core/DataTable/Filter/SafeDecodeLabel.php2
-rw-r--r--core/DataTable/Filter/Sort.php4
-rw-r--r--core/DataTable/Filter/Truncate.php16
-rw-r--r--core/DataTable/Map.php30
-rw-r--r--core/DataTable/Row.php20
-rw-r--r--core/DataTable/Row/DataTableSummaryRow.php6
-rw-r--r--core/DataTable/Simple.php4
-rw-r--r--core/Date.php20
-rw-r--r--core/Db.php56
-rw-r--r--core/Filesystem.php8
-rw-r--r--core/FrontController.php40
-rw-r--r--core/Http.php22
-rw-r--r--core/IP.php2
-rw-r--r--core/Log.php46
-rw-r--r--core/Menu/MenuAbstract.php4
-rw-r--r--core/Menu/MenuAdmin.php4
-rw-r--r--core/Menu/MenuTop.php4
-rwxr-xr-xcore/Menu/MenuUser.php4
-rw-r--r--core/Metrics.php2
-rw-r--r--core/MetricsFormatter.php4
-rw-r--r--core/Nonce.php12
-rw-r--r--core/Notification.php50
-rw-r--r--core/Notification/Manager.php6
-rw-r--r--core/Option.php16
-rw-r--r--core/Period.php32
-rw-r--r--core/Piwik.php10
-rw-r--r--core/Plugin.php40
-rw-r--r--core/Plugin/API.php16
-rw-r--r--core/Plugin/Archiver.php34
-rw-r--r--core/Plugin/ConsoleCommand.php4
-rw-r--r--core/Plugin/Controller.php52
-rw-r--r--core/Plugin/ControllerAdmin.php4
-rw-r--r--core/Plugin/Dimension/VisitDimension.php2
-rw-r--r--core/Plugin/Manager.php4
-rw-r--r--core/Plugin/Settings.php12
-rw-r--r--core/Plugin/ViewDataTable.php84
-rw-r--r--core/Plugin/Visualization.php52
-rw-r--r--core/RankingQuery.php4
-rw-r--r--core/ScheduledTask.php22
-rw-r--r--core/ScheduledTime.php12
-rw-r--r--core/ScheduledTime/Weekly.php2
-rw-r--r--core/Segment.php28
-rw-r--r--core/Settings/Setting.php42
-rw-r--r--core/Settings/SystemSetting.php6
-rw-r--r--core/Settings/UserSetting.php4
-rw-r--r--core/SettingsPiwik.php34
-rw-r--r--core/SettingsServer.php4
-rw-r--r--core/Singleton.php2
-rw-r--r--core/Site.php46
-rw-r--r--core/TaskScheduler.php24
-rw-r--r--core/Tracker/Action.php2
-rw-r--r--core/Tracker/Cache.php18
-rw-r--r--core/Tracker/Db/Mysqli.php12
-rw-r--r--core/Tracker/Db/Pdo/Mysql.php4
-rw-r--r--core/Tracker/GoalManager.php8
-rw-r--r--core/Tracker/Request.php4
-rw-r--r--core/Tracker/Settings.php8
-rw-r--r--core/Tracker/VisitInterface.php6
-rw-r--r--core/Translate.php16
-rwxr-xr-xcore/Twig.php4
-rw-r--r--core/Updates/0.9.1.php6
-rw-r--r--core/Updates/1.2-rc1.php6
-rw-r--r--core/Updates/1.5-b1.php4
-rw-r--r--core/Updates/1.8.4-b1.php2
-rw-r--r--core/Url.php24
-rw-r--r--core/UrlHelper.php6
-rw-r--r--core/View.php38
-rw-r--r--core/View/RenderTokenParser.php2
-rw-r--r--core/View/ReportsByDimension.php4
-rw-r--r--core/ViewDataTable/Config.php52
-rw-r--r--core/ViewDataTable/Factory.php14
-rw-r--r--core/ViewDataTable/Manager.php8
-rw-r--r--core/ViewDataTable/RequestConfig.php38
-rw-r--r--core/WidgetsList.php8
-rw-r--r--core/testMinimumPhpVersion.php2
-rw-r--r--js/LICENSE.txt46
-rw-r--r--js/README.md4
-rw-r--r--js/piwik.js2
-rw-r--r--misc/log-analytics/README.md2
-rwxr-xr-xmisc/log-analytics/import_logs.py12
-rw-r--r--misc/log-analytics/tests/tests.py38
-rw-r--r--misc/others/ExamplePiwikTracker.php2
-rw-r--r--misc/others/api_rest_call.php2
-rw-r--r--misc/others/phpstorm-codestyles/README.md2
-rw-r--r--misc/others/uninstall-delete-piwik-directory.php2
-rw-r--r--misc/package/WebAppGallery/parameters.xml14
-rw-r--r--misc/proxy-hide-piwik-url/README.md2
-rw-r--r--plugins/API/API.php12
-rw-r--r--plugins/API/ProcessedReport.php24
-rw-r--r--plugins/Actions/Columns/DestinationPage.php2
-rw-r--r--plugins/Actions/Columns/Keyword.php2
-rw-r--r--plugins/Actions/Columns/KeywordwithNoSearchResult.php2
-rw-r--r--plugins/Actions/Columns/SearchCategory.php2
-rw-r--r--plugins/Actions/javascripts/actionsDataTable.js16
-rw-r--r--plugins/CoreAdminHome/Controller.php2
-rw-r--r--plugins/CoreAdminHome/javascripts/jsTrackingGenerator.js2
-rw-r--r--plugins/CoreConsole/Commands/GeneratePluginBase.php2
-rw-r--r--plugins/CoreHome/javascripts/broadcast.js12
-rw-r--r--plugins/CoreHome/javascripts/color_manager.js28
-rw-r--r--plugins/CoreHome/javascripts/notification.js2
-rw-r--r--plugins/CoreHome/javascripts/popover.js6
-rw-r--r--plugins/CoreHome/javascripts/require.js4
-rw-r--r--plugins/CoreHome/javascripts/sparkline.js4
-rw-r--r--plugins/CoreHome/javascripts/top_controls.js2
-rw-r--r--plugins/CoreHome/javascripts/uiControl.js10
-rw-r--r--plugins/CoreHome/stylesheets/zen-mode.less2
-rw-r--r--plugins/CorePluginsAdmin/Marketplace.php2
-rw-r--r--plugins/CoreUpdater/CoreUpdater.php8
-rw-r--r--plugins/CoreVisualizations/JqplotDataGenerator/Chart.php2
-rw-r--r--plugins/CoreVisualizations/javascripts/jqplot.js10
-rw-r--r--plugins/CoreVisualizations/javascripts/jqplotEvolutionGraph.js4
-rw-r--r--plugins/CoreVisualizations/javascripts/seriesPicker.js24
-rw-r--r--plugins/CustomVariables/Columns/CustomVariableName.php2
-rw-r--r--plugins/CustomVariables/Columns/CustomVariableValue.php2
-rw-r--r--plugins/CustomVariables/Commands/Info.php2
-rw-r--r--plugins/CustomVariables/Commands/SetNumberOfCustomVariables.php2
-rw-r--r--plugins/Dashboard/DashboardManagerControl.php2
-rw-r--r--plugins/Dashboard/DashboardSettingsControlBase.php2
-rw-r--r--plugins/Dashboard/javascripts/dashboard.js2
-rw-r--r--plugins/Events/Columns/EventAction.php2
-rw-r--r--plugins/Events/Columns/EventCategory.php2
-rw-r--r--plugins/Events/Columns/EventName.php2
-rw-r--r--plugins/Goals/Columns/DaysToConversion.php2
-rw-r--r--plugins/Goals/Columns/ProductCategory.php2
-rw-r--r--plugins/Goals/Columns/ProductName.php2
-rw-r--r--plugins/Goals/Columns/ProductSku.php2
-rw-r--r--plugins/Goals/Columns/VisitsUntilConversion.php2
-rw-r--r--plugins/Insights/Visualizations/Insight.php2
-rw-r--r--plugins/Insights/javascripts/insightsDataTable.js2
-rw-r--r--plugins/Installation/templates/finished.twig2
-rw-r--r--plugins/Live/VisitorFactory.php2
-rw-r--r--plugins/Live/VisitorInterface.php2
-rw-r--r--plugins/Live/javascripts/visitorLog.js2
-rw-r--r--plugins/Live/javascripts/visitorProfile.js8
-rw-r--r--plugins/Live/stylesheets/visitor_profile.less2
-rw-r--r--plugins/Login/stylesheets/login.css8
-rw-r--r--plugins/MobileMessaging/templates/SMSReport.twig6
-rw-r--r--plugins/MobileMessaging/templates/index.twig4
-rw-r--r--plugins/Morpheus/javascripts/ajaxHelper.js6
-rw-r--r--plugins/Morpheus/javascripts/piwikHelper.js4
-rw-r--r--plugins/Morpheus/stylesheets/general/_admin.less2
-rw-r--r--plugins/Morpheus/stylesheets/general/_forms.less8
-rw-r--r--plugins/Morpheus/stylesheets/general/_typography.less4
-rw-r--r--plugins/Morpheus/stylesheets/simple_structure.css6
-rw-r--r--plugins/Morpheus/stylesheets/theme.less20
-rw-r--r--plugins/Morpheus/stylesheets/ui/_components.less16
-rw-r--r--plugins/Morpheus/stylesheets/ui/_map.less2
-rw-r--r--plugins/Morpheus/stylesheets/ui/_popups.less4
-rw-r--r--plugins/Morpheus/stylesheets/uibase/_languageSelect.less2
-rw-r--r--plugins/Morpheus/templates/dashboard.twig2
-rw-r--r--plugins/Morpheus/templates/genericForm.twig2
-rw-r--r--plugins/MultiSites/Columns/Website.php2
-rw-r--r--plugins/MultiSites/angularjs/dashboard/dashboard-model.js2
-rw-r--r--plugins/Overlay/API.php10
-rw-r--r--plugins/Overlay/client/followingpages.js14
-rw-r--r--plugins/Overlay/client/linktags.eps508
-rw-r--r--plugins/PrivacyManager/DoNotTrackHeaderChecker.php4
-rw-r--r--plugins/Provider/Columns/Provider.php2
-rw-r--r--plugins/Referrers/Columns/Referrer.php2
-rw-r--r--plugins/Referrers/Columns/SearchEngine.php2
-rw-r--r--plugins/Referrers/Columns/SocialNetwork.php2
-rw-r--r--plugins/Referrers/Columns/Website.php2
-rw-r--r--plugins/Referrers/Columns/WebsitePage.php2
-rw-r--r--plugins/SEO/templates/getRank.twig2
-rw-r--r--plugins/ScheduledReports/API.php38
-rw-r--r--plugins/SegmentEditor/javascripts/Segmentation.js6
-rw-r--r--plugins/SitesManager/API.php4
-rw-r--r--plugins/Transitions/stylesheets/_transitionColors.less4
-rw-r--r--plugins/UserCountry/Columns/City.php2
-rw-r--r--plugins/UserCountry/Columns/Country.php2
-rw-r--r--plugins/UserCountry/Columns/Provider.php2
-rw-r--r--plugins/UserCountry/Columns/Region.php2
-rwxr-xr-xplugins/UserCountry/GeoIPAutoUpdater.php4
-rwxr-xr-xplugins/UserCountry/templates/_updaterManage.twig2
-rw-r--r--plugins/UserSettings/Columns/BrowserFamily.php2
-rw-r--r--plugins/UserSettings/Columns/BrowserVersion.php2
-rw-r--r--plugins/UserSettings/Columns/Configuration.php2
-rw-r--r--plugins/UserSettings/Columns/MobilevsDesktop.php2
-rw-r--r--plugins/UserSettings/Columns/Operatingsystem.php2
-rw-r--r--plugins/UserSettings/Columns/OperatingsystemFamily.php2
-rw-r--r--plugins/UserSettings/Columns/Plugin.php2
-rw-r--r--plugins/UserSettings/Columns/PluginCookie.php2
-rw-r--r--plugins/UserSettings/Columns/PluginDirector.php2
-rw-r--r--plugins/UserSettings/Columns/PluginFlash.php2
-rw-r--r--plugins/UserSettings/Columns/PluginGears.php2
-rw-r--r--plugins/UserSettings/Columns/PluginJava.php2
-rw-r--r--plugins/UserSettings/Columns/PluginPdf.php2
-rw-r--r--plugins/UserSettings/Columns/PluginQuickTime.php2
-rw-r--r--plugins/UserSettings/Columns/PluginRealPlayer.php2
-rw-r--r--plugins/UserSettings/Columns/PluginSilverlight.php2
-rw-r--r--plugins/UserSettings/Columns/PluginWindowsMedia.php2
-rw-r--r--plugins/UserSettings/Columns/Resolution.php2
-rw-r--r--plugins/UserSettings/Columns/TypeOfScreen.php2
-rw-r--r--plugins/UsersManager/API.php4
-rw-r--r--plugins/UsersManager/Model.php2
-rw-r--r--plugins/VisitTime/Columns/DayOfTheWeek.php2
-rw-r--r--plugins/VisitTime/Columns/LocalTime.php2
-rw-r--r--plugins/VisitTime/Columns/ServerTime.php2
-rw-r--r--plugins/VisitorInterest/Columns/PagesPerVisit.php2
-rw-r--r--plugins/VisitorInterest/Columns/VisitDuration.php2
-rw-r--r--plugins/VisitorInterest/Columns/VisitsbyVisitNumber.php2
-rw-r--r--plugins/VisitsSummary/Reports/Get.php2
-rw-r--r--tests/PHPUnit/Benchmarks/ArchiveQueryBenchmark.php6
-rw-r--r--tests/PHPUnit/Benchmarks/Fixtures/ManyThousandSitesOneVisitEach.php10
-rw-r--r--tests/PHPUnit/Benchmarks/Fixtures/OneSiteThousandsOfDistinctUrlsOverMonth.php12
-rw-r--r--tests/PHPUnit/Benchmarks/MultiSitesBenchmark.php4
-rw-r--r--tests/PHPUnit/Benchmarks/README.md4
-rw-r--r--tests/PHPUnit/Core/AssetManagerTest.php2
-rw-r--r--tests/PHPUnit/Core/CookieTest.php4
-rw-r--r--tests/PHPUnit/Core/DataTableTest.php6
-rw-r--r--tests/PHPUnit/Core/DateTest.php2
-rw-r--r--tests/PHPUnit/Core/HttpTest.php4
-rw-r--r--tests/PHPUnit/Core/IPTest.php12
-rw-r--r--tests/PHPUnit/Core/Period/RangeTest.php4
-rw-r--r--tests/PHPUnit/Core/RankingQueryTest.php10
-rw-r--r--tests/PHPUnit/Core/ScheduledTaskTest.php2
-rw-r--r--tests/PHPUnit/Core/ScheduledTime/WeeklyTest.php4
-rw-r--r--tests/PHPUnit/Core/TaskSchedulerTest.php10
-rw-r--r--tests/PHPUnit/Core/UrlTest.php2
-rw-r--r--tests/PHPUnit/FakeAccess.php4
-rw-r--r--tests/PHPUnit/Fixture.php2
-rw-r--r--tests/PHPUnit/Fixtures/ManySitesImportedLogs.php12
-rw-r--r--tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php4
-rw-r--r--tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php8
-rw-r--r--tests/PHPUnit/Fixtures/OmniFixture.php2
-rw-r--r--tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php6
-rw-r--r--tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php12
-rw-r--r--tests/PHPUnit/Fixtures/TwoVisitsNoKeywordWithBot.php2
-rw-r--r--tests/PHPUnit/Fixtures/UITestFixture.php14
-rwxr-xr-xtests/PHPUnit/Integration/BlobReportLimitingTest.php22
-rw-r--r--tests/PHPUnit/Integration/Core/ArchiveProcessingTest.php6
-rw-r--r--tests/PHPUnit/Integration/Core/LogTest.php12
-rw-r--r--tests/PHPUnit/Integration/Core/SegmentTest.php2
-rw-r--r--tests/PHPUnit/Integration/Core/Tracker/ActionTest.php4
-rw-r--r--tests/PHPUnit/Integration/Core/Tracker/VisitTest.php4
-rwxr-xr-xtests/PHPUnit/Integration/ImportLogsTest.php2
-rwxr-xr-xtests/PHPUnit/Integration/OneVisitorTwoVisitsTest.php2
-rw-r--r--tests/PHPUnit/Integration/Plugins/SitesManagerTest.php4
-rw-r--r--tests/PHPUnit/Integration/Plugins/UsersManagerTest.php2
-rw-r--r--tests/PHPUnit/Integration/PrivacyManagerTest.php2
-rwxr-xr-xtests/PHPUnit/Integration/RowEvolutionTest.php8
-rw-r--r--tests/PHPUnit/Integration/TransitionsTest.php4
-rwxr-xr-xtests/PHPUnit/IntegrationTestCase.php2
-rw-r--r--tests/PHPUnit/Plugins/UserCountryTest.php4
-rw-r--r--tests/PHPUnit/TestingEnvironment.php2
-rw-r--r--tests/PHPUnit/config.ini.travis.php4
-rw-r--r--tests/README.md10
-rw-r--r--tests/README.screenshots.md6
-rw-r--r--tests/README.troubleshooting.md2
-rw-r--r--tests/README.xhprof.md10
-rw-r--r--tests/angularjs/README.md4
-rw-r--r--tests/javascript/frameworks/dojo/dojo-1.0.3.js794
-rw-r--r--tests/javascript/frameworks/dojo/dojo-1.1.2.js920
-rw-r--r--tests/javascript/frameworks/dojo/dojo-1.3.3.js1180
-rw-r--r--tests/javascript/frameworks/dojo/dojo-1.4.3.js856
-rw-r--r--tests/javascript/frameworks/dojo/dojo-1.5.0.js802
-rw-r--r--tests/javascript/frameworks/dojo/dojo-1.6.0.js106
-rw-r--r--tests/javascript/frameworks/ext/ext-all-2.3.0.js2
-rw-r--r--tests/javascript/frameworks/ext/ext-all-3.3.1.js4
-rw-r--r--tests/javascript/frameworks/ext/ext-base-2.3.0.js2
-rw-r--r--tests/javascript/frameworks/ext/ext-core-3.0.0.js4
-rw-r--r--tests/javascript/frameworks/ext/ext-core-3.1.0.js2
-rw-r--r--tests/javascript/frameworks/jquery/jquery-1.0.4.js164
-rw-r--r--tests/javascript/frameworks/jquery/jquery-1.1.4.js298
-rw-r--r--tests/javascript/frameworks/jquery/jquery-1.2.6.js8
-rw-r--r--tests/javascript/frameworks/jquery/jquery-1.3.2.js158
-rw-r--r--tests/javascript/frameworks/jquery/jquery-1.4.4.js248
-rw-r--r--tests/javascript/frameworks/jquery/jquery-1.5.1.js78
-rw-r--r--tests/javascript/frameworks/jquery/jquery.json-2.2.js64
-rw-r--r--tests/javascript/frameworks/mootools/mootools-1.1.2.js2
-rw-r--r--tests/javascript/frameworks/mootools/mootools-1.2.5.js78
-rw-r--r--tests/javascript/frameworks/mootools/mootools-1.3.1.js58
-rw-r--r--tests/javascript/frameworks/yui/yui-3.3.0.js14
-rw-r--r--tests/javascript/jash/Jash.css10
-rw-r--r--tests/javascript/jash/Jash.js324
-rw-r--r--tests/lib/chai-1.9.0/History.md84
-rw-r--r--tests/lib/chai-1.9.0/ReleaseNotes.md118
-rw-r--r--tests/lib/jsdoc-toolkit/README.txt6
-rw-r--r--tests/lib/jsdoc-toolkit/app/frame/Chain.js2
-rw-r--r--tests/lib/jsdoc-toolkit/app/frame/Dumper.js34
-rw-r--r--tests/lib/jsdoc-toolkit/app/frame/Hash.js2
-rw-r--r--tests/lib/jsdoc-toolkit/app/frame/Link.js36
-rw-r--r--tests/lib/jsdoc-toolkit/app/frame/Namespace.js2
-rw-r--r--tests/lib/jsdoc-toolkit/app/frame/Opt.js30
-rw-r--r--tests/lib/jsdoc-toolkit/app/frame/String.js30
-rw-r--r--tests/lib/jsdoc-toolkit/app/frame/Testrun.js16
-rw-r--r--tests/lib/jsdoc-toolkit/app/handlers/FOODOC.js2
-rwxr-xr-xtests/lib/jsdoc-toolkit/app/handlers/XMLDOC.js6
-rw-r--r--tests/lib/jsdoc-toolkit/app/lib/JSDOC.js16
-rw-r--r--tests/lib/jsdoc-toolkit/app/lib/JSDOC/DocComment.js48
-rw-r--r--tests/lib/jsdoc-toolkit/app/lib/JSDOC/DocTag.js90
-rw-r--r--tests/lib/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js30
-rw-r--r--tests/lib/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js12
-rw-r--r--tests/lib/jsdoc-toolkit/app/lib/JSDOC/Lang.js10
-rw-r--r--tests/lib/jsdoc-toolkit/app/lib/JSDOC/Parser.js36
-rw-r--r--tests/lib/jsdoc-toolkit/app/lib/JSDOC/PluginManager.js4
-rw-r--r--tests/lib/jsdoc-toolkit/app/lib/JSDOC/Symbol.js144
-rw-r--r--tests/lib/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js40
-rw-r--r--tests/lib/jsdoc-toolkit/app/lib/JSDOC/TextStream.js4
-rw-r--r--tests/lib/jsdoc-toolkit/app/lib/JSDOC/Token.js2
-rw-r--r--tests/lib/jsdoc-toolkit/app/lib/JSDOC/TokenReader.js56
-rw-r--r--tests/lib/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js16
-rw-r--r--tests/lib/jsdoc-toolkit/app/lib/JSDOC/Walker.js174
-rw-r--r--tests/lib/jsdoc-toolkit/app/main.js30
-rw-r--r--tests/lib/jsdoc-toolkit/app/plugins/frameworkPrototype.js2
-rw-r--r--tests/lib/jsdoc-toolkit/app/plugins/publishSrcHilite.js16
-rw-r--r--tests/lib/jsdoc-toolkit/app/plugins/tagParamConfig.js2
-rw-r--r--tests/lib/jsdoc-toolkit/app/plugins/tagSynonyms.js2
-rw-r--r--tests/lib/jsdoc-toolkit/app/run.js46
-rw-r--r--tests/lib/jsdoc-toolkit/app/t/TestDoc.js22
-rw-r--r--tests/lib/jsdoc-toolkit/app/test.js58
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/anon_inner.js2
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/augments.js4
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/borrows.js6
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/borrows2.js4
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/event.js2
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/exports.js4
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/functions_anon.js2
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/functions_nested.js6
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/globals.js4
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/jsdoc_test.js88
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/memberof.js2
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/memberof2.js6
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/namespace_nested.js4
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/nocode.js2
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/oblit_anon.js2
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/overview.js10
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/param_inline.js10
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/prototype.js2
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/prototype_oblit_constructor.js2
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/shared.js4
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/shortcuts.js8
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/synonyms.js4
-rw-r--r--tests/lib/jsdoc-toolkit/app/test/variable_redefine.js4
-rw-r--r--tests/lib/jsdoc-toolkit/changes.txt9
-rw-r--r--tests/lib/jsdoc-toolkit/conf/sample.conf12
-rw-r--r--tests/lib/jsdoc-toolkit/java/build.xml4
-rw-r--r--tests/lib/jsdoc-toolkit/java/build_1.4.xml4
-rwxr-xr-xtests/lib/jsdoc-toolkit/java/src/JsDebugRun.java8
-rw-r--r--tests/lib/jsdoc-toolkit/java/src/JsRun.java8
-rw-r--r--tests/lib/jsdoc-toolkit/templates/jsdoc/allfiles.tmpl12
-rw-r--r--tests/lib/jsdoc-toolkit/templates/jsdoc/class.tmpl74
-rw-r--r--tests/lib/jsdoc-toolkit/templates/jsdoc/index.tmpl14
-rw-r--r--tests/lib/jsdoc-toolkit/templates/jsdoc/publish.js56
-rw-r--r--tests/lib/jsdoc-toolkit/templates/jsdoc/static/default.css2
-rw-r--r--tests/lib/jsdoc-toolkit/templates/jsdoc/symbol.tmpl4
-rw-r--r--tests/lib/mocha-1.17.1/lib/browser/progress.js12
-rw-r--r--tests/lib/mocha-1.17.1/mocha.js12
-rw-r--r--tests/lib/mocha-1.17.1/test/hook.err.js4
-rw-r--r--tests/resources/extractSearchEngineInformationFromUrlTests.yml2
-rw-r--r--tests/resources/lipsum.txt2
-rw-r--r--tests/resources/overlay-test-site/index.html2
-rw-r--r--tests/resources/overlay-test-site/page-1.html2
-rw-r--r--tests/resources/overlay-test-site/page-2.html2
-rw-r--r--tests/resources/overlay-test-site/page-3.html2
-rw-r--r--tests/resources/overlay-test-site/page-4.html2
-rw-r--r--tests/resources/overlay-test-site/page-5.html2
-rw-r--r--tests/resources/overlay-test-site/page-6.html2
401 files changed, 5631 insertions, 5632 deletions
diff --git a/LEGALNOTICE b/LEGALNOTICE
index 93c2f03493..3b79580ed6 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 b626829498..c3d72af4a3 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 19fbef68bc..c47fd385b4 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 43d57bcb38..d3e1fbad3f 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 5c796a067d..d1944ea2ac 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 a1b823a2cc..bd3dbbb6a1 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 c7407c0af0..63f0a61dc8 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 10374f18c4..cd3fc0138c 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 b6aa1c63f9..79cb1c7196 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 dec40d7568..03b26acf2f 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 11d6a633af..de0f5f1ffa 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 b4c3d376a1..df82e05376 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 907d178e40..1b77dc152a 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 511f1ca61f..3b49dc9bd9 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 0c56f95b0c..f71baa710a 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 d03fe0501f..e0e9a3a32c 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 ae5c6fd8f9..1549392876 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 e790bab458..d52ff8b7a0 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 41f7f565c0..ffd8511c6b 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 796bcd8ce4..3f112edb1f 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 7e8f1c4dd4..fb2dc009f9 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 8ad329e610..f3d8191b1f 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 7f828a1f62..742f1aef6d 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 09f6725db0..9cb4b3e2f1 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 7f60bdd714..534f484bff 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 1841d94f48..aed7af7d8d 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 28022952e0..80f789919e 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 0084fd076b..27746c4f28 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 de1e5e950a..056c129440 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 d82599be5c..5cc83d8e3d 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 1a2b9b27f7..e89000f8fd 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 f5883d1b6a..189fbd3b81 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 bec7d683f5..e33dfa9a14 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 7631c7a9c2..976519c6fa 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 e346ea28fc..ee135b59d6 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 d783db8bca..8633fb2e9d 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 c06bac49c5..5cf848a50e 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 0f7af76a29..7f6aaef123 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 50e773c98e..cb04cdb164 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 94893e6d9e..832fb856a2 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 10bf918f68..697403c2e3 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 4dd3218902..27875db41a 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 23a5926691..3c1e31e2d0 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 8922482398..f2629618b1 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 e11749a0e4..6ba2cd1ff0 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 13d2a619c0..192d85b82f 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 028c40b480..dd8bec7ca5 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 18a7228359..3612cbe96a 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 480631f2b8..7d477a304c 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 f21aa62b9d..018818c203 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 09205abac7..7af59e1f2a 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 427ce1cd31..e0393f6a3c 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 bcf36d29e1..ca0a30d5e2 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 4de8eb4379..dc10f72e94 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 7eb9ea94f9..6645edfb22 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 ca9d2702af..52f5f7c23f 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 3436497884..db3961923d 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 3c3fd4e013..baf5c659cb 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 cff021bb56..5c814b6706 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 2901c82fe6..86fc1ab0c6 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 6cbd9be7fe..ad9b195d46 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 3d6e8b84f7..8ac04a9a39 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 049850496a..8c58215e30 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 825b9aea56..3937c4f94b 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 fcf1357a78..b7c576eba0 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 54727fcfb6..921dc3fb82 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 1c403547d9..c2c7816bba 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 fd99954021..bff447dc5e 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 c3be1d7c19..c723c541ca 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 d646b26866..389e85a6f6 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 58de9e6461..cc16cfb64c 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 fa79d07b26..7cc9fe26f5 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 8db956df45..adb2c33a49 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 729e7da0f6..5521eaf0c2 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 714f3ce464..e37cd7b11b 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 594791f920..d906bd804f 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 8d3153377d..994aabc6e7 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 ff21452968..54e5b05653 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 fe603b159d..14b2f979f7 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 e86274c5ea..1c5a7a3bd8 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 0f4db68ab4..f40ae1273e 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 18cb2aa94e..15b702dab8 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 6035f830ff..f221a82a43 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 e5715b5fd0..5ae499b9eb 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 99d2382ef8..01e056bf68 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 41cffbe526..2b8e53bf26 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 f26c979ae1..935aec1388 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 8f56f7104d..fa29269707 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 c096182b73..4e83190e70 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 679a00192d..6c172c3ecf 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 e2a0d60569..1dff87db5f 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 a0b728b035..7efeee77ef 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 d2ddec3238..602c1987a6 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 d092622563..b3ca851f61 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 77f9d37689..0217b175de 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 66521b120b..2cd5e5f141 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 a4d148e415..a2f5a79b2c 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 0b8f6be107..c7e55747d3 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 ccd044320d..98057f6ccc 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 2d8299581d..836d03650a 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 66bd37becc..a7022072b8 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 c128fd672a..34bd35ba12 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 7fa19ef247..b0707350c4 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 db81f8d14d..9d49a906e6 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 31d8ba58bc..e268ad8570 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 9a8ed9653d..4157a8c115 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 efd5e8b76c..272eb08498 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 dfbf2dfd88..bf1e267e10 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&param2=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&param2[]=1&param2[]=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 9262ec392d..485b5ec7bf 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 e7207d7beb..d9cbfe0b9c 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 60547d4d99..2800beab8b 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 e520f382f9..e1cb058459 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 8fbdf85321..093f28b254 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 52c74933d1..9ac90a1723 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 0559661d44..19e2335ce1 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 d4856bebe4..ad77df8824 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 d9ae1f4eb6..e67f6b1b77 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 7f03b02479..1be348e570 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 76258a846d..29e718b4c5 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 478fea68d7..dc4220836e 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 a7ef9f24fc..975ad1b9cd 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 880133730b..fe7c963fa2 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 f986e580b4..90366304be 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 5499a509bd..5d42e51797 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 f787a0847a..5daa2d7701 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 d158454e24..c85d5c193e 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 5f910b0a5d..ce4f8e94bb 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 e05f70259c..97030daa48 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 692cd832b7..14498146ce 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*&quot;([^&quot;]*)&quot;"
+ match="host\s*=\s*&quot;([^&quot;]*)&quot;"
/>
</parameter>
-
+
<!-- Database name -->
<parameter
name="DbName"
@@ -71,7 +71,7 @@
<parameterEntry
type="TextFile"
scope="config\\config.ini.php"
- match="dbname\s*=\s*&quot;([^&quot;]*)&quot;"
+ match="dbname\s*=\s*&quot;([^&quot;]*)&quot;"
/>
</parameter>
@@ -98,7 +98,7 @@
<parameterEntry
type="TextFile"
scope="config\\config.ini.php"
- match="username\s*=\s*&quot;([^&quot;]*)&quot;"
+ match="username\s*=\s*&quot;([^&quot;]*)&quot;"
/>
</parameter>
@@ -127,7 +127,7 @@
match="password\s*=\s*&quot;([^&quot;]{6,20})&quot;"
/>
</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 016bbe1536..a5344beda3 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 b72ab0ee86..9ce0742a25 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 ef1fcf6182..b496004bab 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 76ea3e3fae..e47b7195be 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 71c93bd648..3d7051c451 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 b7a19726a7..d6ffaf2044 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 7073c105fb..6dc3c0b11b 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 b0ab7873d0..d3bfa7a919 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 7de5be31d0..f1f0f5f1bd 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 8300bb1440..b8a48de1d9 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 5cfc506ac8..d96051e88c 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 544cd8d70a..8453b81c47 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 e538de953d..cffff2c7be 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 f3f16bd74f..7bd92042a5 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 84c8319cf5..bbe1dc2420 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 5313c375c7..30ad17eb68 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 5d4d54bc62..b4062f9897 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 8a843d4206..62ce3cecca 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 c06f610e7d..cd2d985ea4 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 30d2788951..42a166e8f5 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 d0e5ec6c0a..b9238fd158 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 05bb59d538..bb4700e299 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 22cd1dd374..d54de973d0 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 66cef5a96e..f7d43f107d 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 9de41405e3..a422dd79e2 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 c961e662f8..2e4f968a14 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 a9a0139447..1ad4d214fa 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 4591e14ea3..ef6908042e 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 9c907b1599..bf300e357a 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 f769951cd6..29addaa12d 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 ff82763b95..fb119e0083 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 3f8f29e1e6..7275224082 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 24e8b3bd0d..238aca5197 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 26a460c985..79b3b5867b 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 eae0ff906d..7c6b5fd02a 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 e027136943..e672d316a3 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 d6eef4970c..e1bd941d6b 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 27565bfb2c..8a34edf0e1 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 50a30f259d..ed3d545543 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 85742f82e5..b44a37ec0b 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 390f75ba75..13f54e9dd7 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 7ff7c96a13..a22206d698 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 3df7928812..42572ef93f 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 2f30910cd0..1a9fb66dcc 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 }} &raquo;</a>
-
+
</p>
{% endblock %}
diff --git a/plugins/Live/VisitorFactory.php b/plugins/Live/VisitorFactory.php
index cb64bff968..30e22ef948 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 4d816215fd..4f4bbefece 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 3f30f9e9ab..e6eeb79dba 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 3ce97a23ad..3ebf569d25 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 71477794b0..940d89dd2c 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 f24a1982da..e504be1b6a 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 6bd52bbc78..6c0d38f2cd 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 6875a64f14..17b5bbb435 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 9099637f67..d2ac8568e7 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 ddc94f8a39..29b36a8f3f 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 0d25749f24..0a3b21cd88 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 0932f598a2..cf31fb6925 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 956f5cc68b..bb22742844 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 34e5ae18fb..65e6d276b7 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 582d3c4d58..820c8d3953 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 0bad34c66f..fe427fc545 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 c5baf76f15..0446610c2d 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 72ff9f4088..7cd8d6b1af 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 ee07212b7f..032516350e 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 8948410331..4235cacdd0 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 &rsaquo; {% 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 963684af59..b7e564c88c 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 7bdb1c3e09..b53244d484 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 52c66bd687..f2c46c61d4 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 ecc25b0466..39e16985b1 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 015c79ea02..0ec8c6fef6 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 b9279b8a95..40be171a1b 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 b8e37a4771..b857debf85 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 2c33969cb9..c20b75ac9c 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 ac22e6f5c9..5d1daf16ba 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 4c2a0740e8..c314a801af 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 62ce964c37..66478d167f 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 e0ce2b2845..53b143d693 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 5ac2bc63f3..963c83414b 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 f513609c0a..08839997b3 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 cf02d1eb0f..3ea8a05c28 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 3a11eb4003..3e965e4767 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 c44a269b91..d55c40686e 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 e74d16b341..07ad7c3b9b 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 3f97a0b7c8..3521768f4d 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 f2b5872e2e..31e2839a54 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 d361fa18c6..98c5bf97ca 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 78dacb4974..5b749673cf 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 a581e4ca3a..035f2fcd11 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 2bd6d9df6d..f094d5ee9f 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 1de0c4be8d..4893ded787 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 29c753ba60..ea30ea0781 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 c0b636d4cd..7577c06495 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 98a0ad9799..79721238b7 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 0476fdf114..82a00aa8c4 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 cdec387d19..7f8ed89a96 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 dd047f9479..a6ecef0c29 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 f8b93dbfc1..8af841ca52 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 20a6599295..58019826ce 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 058429edbf..d691d200a4 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 08161fa9fe..edf024877e 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 0cc6bdcd23..0db9b81778 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 e9b1ac396b..c50f92c53e 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 dae6250849..ea2f85ad0b 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 d1b904e5af..b8e17c605c 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 95c7789de2..f917c3d296 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 1643a553bb..02e7088ce0 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 511c946186..35aaf4a23e 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 640eb35ea4..cdbc796ab2 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 3fff901c38..5eb0df261f 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 d5668b19ea..872d693ee6 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 b6e39310ab..7728c07061 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 ade984c1f1..abe27d777b 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 f7c1c6c3d0..5ee82706a5 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 a64e7e28fd..0d4bbe1a18 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 68311a013c..d0286bedd2 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 2d16fa5a5d..7993fb1c24 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 83b74d987d..926967875a 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 63307ec667..05e14b02fd 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 6a89c57a90..f399b9ffa7 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 c719d7bfa3..cab9278adb 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 54dc180f53..249b006251 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 ce750f6918..d82892cfaa 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 e26443f8b3..ca77a609f7 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 d173e60f4c..9b77aeddaf 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 97d53e860e..656df66a90 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 f208e90c28..fbff27519e 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 5589a5c358..ae5ecb96ec 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 c80af0c201..cbf0c59816 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 2a70eb00d5..6d87dffb10 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 17d3cdd2c6..7941c25d35 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 6cdbebbc35..5a131521ff 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 b1956f570b..2f6df0230a 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 f11b7e2745..3ec8781df7 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 3bf4a3e41d..f30508186c 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 d576da702f..be97babff0 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 255153e367..d9c213f01a 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 33e13f7999..2ddc236f0c 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 4ed24f8573..70f2d07ca5 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 b53d88d25f..aee0adbba9 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 406deb77bc..197939904d 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 53db8ca2f5..3d43cb159b 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 1791b43750..52845bc0b8 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 eb48a6bd61..fcbb864bfb 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 453a0c7d10..a65b0bc1f0 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 8010501886..b0aa0731a2 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 3a522ee0cc..d67e899c1a 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 3e9a2cf64d..a2ef5b5502 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 17667bf59c..79f1273a23 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 f180db3a86..1498e67578 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 9ddf6647e4..1aef6fc6ea 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 83b1da785a..a08750d128 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 94f8f79153..0de2982ad3 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 3c9b6042bc..65d520337c 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 cbcb6da860..5b4e162c4e 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 336361b31c..f0d044c709 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 6fac424f54..268692df7e 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 7bb55b9f56..613e66dd45 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 961aa7ab13..2678196801 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 7ca0709a1c..72f9e7bfce 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 ca17163585..dae74b4a3c 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 40ca106158..185973d488 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 8cfdf0ef7f..cabef0a92a 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 b8f54c0263..6203313f71 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 882ff9c7d7..a82c84a3da 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 81a6a3f1f2..b7856f4f5d 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 40437418c1..53c2b611e5 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 da6e171f67..793be17a79 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 b2a110c017..a0749918f6 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 a20d4ab2af..3919209708 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 13a76674bc..c88a90843d 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 07593d88e0..8b7cc207f3 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 4f47e7dacd..9c763d4fe2 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 2e00aaef43..90fde1bd39 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 342138fd08..51a87b9902 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,"&amp;").replace(/>/g,"&gt;").replace(/</g,"&lt;").replace(/"/g,"&quot;")},htmlDecode:function(value){return !value?value:String(value).replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&quot;/g,'"').replace(/&amp;/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:"&#160;"},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}">&#160;</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:"&#160;"});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:"&#160;",id:this.panel.id+"-xsplit"});if(this.collapseMode=="mini"){this.miniSplitEl=this.splitEl.createChild({cls:"x-layout-mini x-layout-mini-"+d,html:"&#160;"});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}">&#160;</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">&#160;</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:"&#160;OK&#160;",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,'">&#160;</a></td><td class="x-date-middle" align="center"></td><td class="x-date-right"><a href="#" title="',this.nextText,'">&#160;</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:"&#160;",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>&#160;</div>","</div>","</div>",'<div class="{cls}-text {cls}-text-back">',"<div>&#160;</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||"&#160;";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&gt;1"><{root}></tpl><tpl for="records"><{parent.record}><tpl for="."><{name}>{value}</{name}></tpl></{parent.record}></tpl><tpl if="records.length&gt;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:"&#160;"},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:"&#160;"});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+" ":"&#160;");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||"&#160;");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||"&#160;");C.setTitle(b.title||"&#160;");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:"&#160;",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:"&#160;"}]});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>&#160;</i></td><td class="x-btn-tc"></td><td class="x-btn-tr"><i>&#160;</i></td></tr>','<tr><td class="x-btn-ml"><i>&#160;</i></td><td class="x-btn-mc"><em class="{2}" unselectable="on"><button type="{0}"></button></em></td><td class="x-btn-mr"><i>&#160;</i></td></tr>','<tr><td class="x-btn-bl"><i>&#160;</i></td><td class="x-btn-bc"></td><td class="x-btn-br"><i>&#160;</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||"&#160;");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("&#160;")}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:"&#160;"}),bottom:this.el.createChild({tag:"div",cls:"x-menu-scroller x-menu-scroller-bottom",html:"&#160;"})};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="&#160;";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||"&#160;",altText:this.altText||""}},setText:function(a){this.text=a||"&#160;";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+="&#160;";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:"&#160;\n&#160;",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="&#160;&#160;"}else{a+=this.growAppend;if(Ext.isIE){a=a.replace(/\n/g,"&#160;<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:"&#160;",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)?"&#160;":"&#8203;",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("&nbsp;&nbsp;&nbsp;&nbsp;");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","&nbsp;&nbsp;&nbsp;&nbsp;");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">&#160;</div>','<div class="x-grid3-resize-proxy">&#160;</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="&#160;"}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()||"&#160;";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:"&#160;"}),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()||"&#160;";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="&#160;"}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="&#160;"}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">&#160;</div>','<div class="x-grid3-resize-proxy">&#160;</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:"&#160;"}),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:"&#160;"},true);this.proxyBottom=Ext.DomHelper.append(document.body,{cls:"col-move-bottom",html:"&#160;"},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"&#160;"}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:"&#160;",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:"&#160;",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">&#160;</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">&#160;</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==="&#160;"){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 56fa97e525..148fffa0bd 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 0735c672b6..1d77c6b2ee 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 9fc67279e3..66af9d80e5 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 9f056ed6ae..4eaf428449 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 a0702cf6ee..da07368fb8 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 88e661eec8..2c04438968 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 926357433e..de34b8197b 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 a4f114586c..c53482c802 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 78fcfa469b..7932fc7019 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 87f5d0157c..04c3689596 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 e473cbde76..365d2efc77 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 384c39392f..40dcdc1903 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 9c83aa130a..76f0c41c50 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 8fcf8ea315..78b00d855a 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 a9d3838926..4bb5a50c0b 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 f3ef8abc5e..45fb379deb 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 09cce25adb..c769a56a61 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 322cabd636..e8ec49f562 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 3782da88da..763e803925 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 506469d185..f830796801 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 d8b007b1d9..731cd33453 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 62cfad646a..fa60d87476 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 1e6241bfbf..f0020a13ea 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 fa1e41d100..9ea2adb197 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 352f159030..bca4ee7ab3 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 c183c27d56..837a36623e 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 a33bb41403..ac2c961282 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 b208f55b1a..c845b1859f 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 40f87b3559..e777d03e7f 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 5de7b9efd5..9f14c5c166 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 4b21cd7176..b99a08317e 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 77ec07cacd..42605fc297 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 02275a6910..c199a40d52 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 bcaebc9c55..ba59e413e6 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 62919d7d83..4091c75b89 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 e489c61d6b..90889b0dee 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 9c91193100..857353265a 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 1aa44da8b3..088496eb9d 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 8e3a2ebf69..8afd4066cf 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 ccc48a87de..b4bd1496a8 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 fb7f9d9498..c862d4fbed 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 9f658fb9f2..cf30da3842 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 1eeb44cbb4..0d799069fd 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 6ecaea8817..cba4b7bc48 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 f9008c8703..654528f292 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 9c417518bd..e2a0576f2d 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 65514f2c9a..a3fc97ec25 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, "&lt;")+"</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 3ea8a1be2a..efd461a27a 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 49a874f19a..05fde166de 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 1f875cdbbf..d26929a8c5 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 c0768b71c6..1f4977ad94 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 8b2dc8b17f..8fbf87c61a 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 227eeee55e..e1b4bfa9d4 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 12e706ebc7..d5e10d5517 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 a5d8ea4aab..23996fcb91 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 c0d5ea21f4..cb76c226fa 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 7e41d6f638..4c7098b78d 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 63a87cb4d0..566e5c8ba1 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 e9dd6c1bee..0fdf7c89ad 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 f044fafeea..abff69990a 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 3f83fb1f95..a61824879d 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 081771285e..120a186102 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>&#64;extends</code> tag), but in
+ * @class Hexagon is a class that is a <i>logical</i> sublcass of
+ * {@link Shape} (thanks to the <code>&#64;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 883bbdeb0d..cf1404ecaf 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 bc3d9d8f49..77942ae899 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 46cafa2fa4..394447c029 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 1cf99bc982..22b02ccc48 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 8d9e9413e9..aa79f99d96 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 1dfc09b1fc..8e3eda7492 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 09845b2831..d457238270 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 114700837f..a161ed7ec3 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 9248248644..13ec6ef180 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 e1c277a6fc..7fb4cd3027 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 f738f1e1cd..abbcfdfdb4 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 09066b98f5..8068f7a015 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 2c07da09a9..e76c421315 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 b0acbab775..dea28c4922 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 ad0f08e658..c28347b0eb 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 bb845ce3a0..078fa8aaf3 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 ab408a4c44..06201e7888 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 319a5c67bc..8959011d91 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 25f519a95e..0f82b3b6b1 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 a5d2c40e46..7f31f55cbe 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">&copy;{+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 4f980d4269..eb1f4681e2 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 += "&lt;private&gt; ";
if (data.isInner) output += "&lt;inner&gt; ";
!}
<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 += "&lt;static&gt; ";
if (member.isConstant) output += "&lt;constant&gt; ";
!}
-
+
<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 += "&lt;inner&gt; ";
if (member.isStatic) output += "&lt;static&gt; ";
!}
-
+
<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 += "&lt;inner&gt; ";
if (member.isStatic) output += "&lt;static&gt; ";
!}
-
+
<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">&copy;{+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 06960ec799..3d4f3e43cc 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">&copy;{+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 42300f4b4f..f716f1abc8 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 "&lt;"+srcFilePath+"&gt;";
}
}
-
+
// 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 7481a2e802..7e4bfd6a05 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 f8f4bd1f6f..549ab6e3f3 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 90526f72b8..b30e5179ea 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 3dcdae6c1b..ca536c6468 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 f28ecdd501..873147ac02 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 b4b4f51b8c..e845d0d44b 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 &quot;'
-
+
# 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 2f2c9e1f04..5392243d38 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 6a7ff8e139..c6911af4db 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 c5440529e7..47ef313d3a 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 003a16f12d..b2671380f4 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 a93c54c80b..361b3afece 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 ec4ad8b67b..72c5f7aee7 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 35b8414657..5b9ac655ed 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 be42f72e3c..ed2c35dd76 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 ) {}