diff --git a/apidocs/toc.yml b/apidocs/toc.yml index 6817825066..23e2f3b8e1 100644 --- a/apidocs/toc.yml +++ b/apidocs/toc.yml @@ -1,5 +1,5 @@ - name: Umbraco.Core Documentation - href: https://our.umbraco.org/apidocs/csharp/api/Umbraco.Core.html + href: https://our.umbraco.com/apidocs/csharp/api/Umbraco.Core.html - name: Umbraco.Web Documentation - href: https://our.umbraco.org/apidocs/csharp/api/Umbraco.Web.html \ No newline at end of file + href: https://our.umbraco.com/apidocs/csharp/api/Umbraco.Web.html \ No newline at end of file diff --git a/build/InstallGit.cmd b/build/InstallGit.cmd deleted file mode 100644 index 4daa2f45d9..0000000000 --- a/build/InstallGit.cmd +++ /dev/null @@ -1,63 +0,0 @@ -@ECHO OFF -SETLOCAL -REM SETLOCAL is on, so changes to the path not persist to the actual user's path - -git.exe --version -IF %ERRORLEVEL%==9009 GOTO :trydefaultpath -REM OK, DONE -GOTO :EOF - -:trydefaultpath -PATH=C:\Program Files (x86)\Git\cmd;C:\Program Files\Git\cmd;%PATH% -git.exe --version -IF %ERRORLEVEL%==9009 GOTO :showerror -REM OK, DONE -GOTO :EOF - -:showerror -ECHO Git is not in your path and could not be found in C:\Program Files (x86)\Git\cmd nor in C:\Program Files\Git\cmd -SET /p install=" Do you want to install Git through Chocolatey [y/n]? " %=% -IF %install%==y ( - :: Create a temporary batch file to execute either after elevating to admin or as-is when the user is already admin - ECHO @ECHO OFF > "%temp%\ChocoInstallGit.cmd" - ECHO SETLOCAL >> "%temp%\ChocoInstallGit.cmd" - ECHO ECHO Installing Chocolatey first >> "%temp%\ChocoInstallGit.cmd" - ECHO @powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" >> "%temp%\ChocoInstallGit.cmd" - ECHO SET PATH=%%PATH%%;%%ALLUSERSPROFILE%%\chocolatey\bin >> "%temp%\ChocoInstallGit.cmd" - ECHO choco install git -y >> "%temp%\ChocoInstallGit.cmd" - - GOTO :installgit -) ELSE ( - GOTO :cantcontinue -) - -:cantcontinue -ECHO Can't complete the build without Git being in the path. Please add it to be able to continue. -GOTO :EOF - -:installgit -pushd %~dp0 - :: Running prompt elevated - -:: --> Check for permissions ->nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" - -:: --> If error flag set, we do not have admin. -IF '%errorlevel%' NEQ '0' ( - GOTO UACPrompt -) ELSE ( GOTO gotAdmin ) - -:UACPrompt - ECHO You're not currently running this with admin privileges, we'll now try to execute the install of Git through Chocolatey after elevating to admin privileges - ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" - ECHO UAC.ShellExecute "%temp%\ChocoInstallGit.cmd", "", "", "runas", 1 >> "%temp%\getadmin.vbs" - - "%temp%\getadmin.vbs" - EXIT /B - -:gotAdmin - IF EXIST "%temp%\getadmin.vbs" ( DEL "%temp%\getadmin.vbs" ) - pushd "%CD%" - CD /D "%~dp0" - - CALL "%temp%\ChocoInstallGit.cmd" \ No newline at end of file diff --git a/build/Modules/Umbraco.Build/Build-UmbracoDocs.ps1 b/build/Modules/Umbraco.Build/Build-UmbracoDocs.ps1 index b620542463..c5da6605cb 100644 --- a/build/Modules/Umbraco.Build/Build-UmbracoDocs.ps1 +++ b/build/Modules/Umbraco.Build/Build-UmbracoDocs.ps1 @@ -42,7 +42,7 @@ function Build-UmbracoDocs #get-content .\build.tmp\belle-docs.log | %{ if ($_ -match "build") { write $_}} # change baseUrl - $baseUrl = "https://our.umbraco.org/apidocs/ui/" + $baseUrl = "https://our.umbraco.com/apidocs/ui/" $indexPath = "$src/Umbraco.Web.UI.Client/docs/api/index.html" (Get-Content $indexPath).Replace("origin + location.href.substr(origin.length).replace(rUrl, indexFile)", "'$baseUrl'") ` | Set-Content $indexPath diff --git a/build/NuSpecs/tools/Readme.txt b/build/NuSpecs/tools/Readme.txt index b6b55c1c4f..aa648caaaa 100644 --- a/build/NuSpecs/tools/Readme.txt +++ b/build/NuSpecs/tools/Readme.txt @@ -20,7 +20,7 @@ Publish this won't affect you. The following items will now be automatically included when creating a deploy package or publishing to the file system: umbraco, umbraco_client, config\splashes and global.asax. -Please read the release notes on our.umbraco.org: -http://our.umbraco.org/contribute/releases +Please read the release notes on our.umbraco.com: +http://our.umbraco.com/contribute/releases - Umbraco \ No newline at end of file diff --git a/build/NuSpecs/tools/ReadmeUpgrade.txt b/build/NuSpecs/tools/ReadmeUpgrade.txt index 2b6da733a1..ff5c80b1c2 100644 --- a/build/NuSpecs/tools/ReadmeUpgrade.txt +++ b/build/NuSpecs/tools/ReadmeUpgrade.txt @@ -11,7 +11,7 @@ *** IMPORTANT NOTICE FOR UPGRADES FROM VERSIONS BELOW 7.7.0 *** Be sure to read the version specific upgrade information before proceeding: -https://our.umbraco.org/documentation/Getting-Started/Setup/Upgrading/version-specific#version-7-7-0 +https://our.umbraco.com/documentation/Getting-Started/Setup/Upgrading/version-specific#version-7-7-0 Depending on the version you are upgrading from, you may need to make some changes to your web.config and you will need to be aware of the breaking changes listed there to see if these affect your installation. @@ -33,7 +33,7 @@ Publish this won't affect you. The following items will now be automatically included when creating a deploy package or publishing to the file system: umbraco, umbraco_client, config\splashes and global.asax. -Please read the release notes on our.umbraco.org: -http://our.umbraco.org/contribute/releases +Please read the release notes on our.umbraco.com: +http://our.umbraco.com/contribute/releases - Umbraco \ No newline at end of file diff --git a/build/NuSpecs/tools/Views.Web.config.install.xdt b/build/NuSpecs/tools/Views.Web.config.install.xdt index a5797232b8..4d660301a8 100644 --- a/build/NuSpecs/tools/Views.Web.config.install.xdt +++ b/build/NuSpecs/tools/Views.Web.config.install.xdt @@ -1,42 +1,32 @@ - - -
-
- - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + +
+
+ + + + + + + + + + + + + + + + + + + + + diff --git a/build/NuSpecs/tools/Web.config.install.xdt b/build/NuSpecs/tools/Web.config.install.xdt index 5ee5ed32c6..a381a58c3e 100644 --- a/build/NuSpecs/tools/Web.config.install.xdt +++ b/build/NuSpecs/tools/Web.config.install.xdt @@ -1,419 +1,420 @@ - - -
-
-
+ + +
+
+
- -
- - - -
-
-
-
-
- - + +
+ + + +
+
+
+
+
+ + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - + - - - > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + - - - - - + + + + + + + + - - - - - - - - - - + + + + + - - - - - - - - + + + + + + + + + + - - - - - - - - - - - + + + + + + + + - - - - + + + + + + + + + + + - - - - - + + + + - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/NuSpecs/tools/trees.config.install.xdt b/build/NuSpecs/tools/trees.config.install.xdt index 5a549e3fd8..59360041e1 100644 --- a/build/NuSpecs/tools/trees.config.install.xdt +++ b/build/NuSpecs/tools/trees.config.install.xdt @@ -46,7 +46,7 @@ - ^^ >..\src\Umbraco.Web.UI\App_Data\packages\installed\installedPackages.config - -echo Removing plugin cache files -del ..\src\Umbraco.Web.UI\App_Data\TEMP\PluginCache\*.* - -echo Removing cache files and examine index -del ..\src\Umbraco.Web.UI\App_Data\TEMP\*.* - -echo Removing log files -del ..\src\Umbraco.Web.UI\App_Data\Logs\*.* - -echo Removing packages -del ..\src\Umbraco.Web.UI\App_Data\packages\*.* - -echo Removing previews -del ..\src\Umbraco.Web.UI\App_Data\preview\*.* - -echo Removing app code files (typically added by starterkits) -del ..\src\Umbraco.Web.UI\App_Code\*.* - -echo Removing xslt files -del ..\src\Umbraco.Web.UI\xslt\*.* - -echo Removing user control files -del ..\src\Umbraco.Web.UI\UserControls\*.* - -echo Removing masterpage files -del ..\src\Umbraco.Web.UI\masterpages\*.* - -echo Removing razor files -del ..\src\Umbraco.Web.UI\macroScripts\*.* - -echo Removing media files -del ..\src\Umbraco.Web.UI\media\*.* - -echo Removing script files -del ..\src\Umbraco.Web.UI\scripts\*.* - -echo Removing css files -del ..\src\Umbraco.Web.UI\css\*.* - -echo "Umbraco install reverted to clean install" -pause -exit - - - -:auto - -echo Current folder: %CD% - -echo Removing sqlce database -del ..\src\Umbraco.Web.UI\App_Data\Umbraco.sdf - -echo Resetting installedPackages.config -echo ^^^ >..\src\Umbraco.Web.UI\App_Data\packages\installed\installedPackages.config - -echo Removing plugin cache files -FOR %%A IN (..\src\Umbraco.Web.UI\App_Data\TEMP\PluginCache\*.*) DO DEL %%A - -echo Removing cache files and examine index -FOR %%A IN (..\src\Umbraco.Web.UI\App_Data\TEMP\*.*) DO DEL %%A - -echo Removing log files -FOR %%A IN (..\src\Umbraco.Web.UI\App_Data\Logs\*.*) DO DEL %%A - -echo Removing packages -FOR %%A IN (..\src\Umbraco.Web.UI\App_Data\packages\*.*) DO DEL %%A - -echo Removing previews -FOR %%A IN (..\src\Umbraco.Web.UI\App_Data\preview\*.*) DO DEL %%A - -echo Removing app code files (typically added by starterkits) -FOR %%A IN (..\src\Umbraco.Web.UI\App_Code\*.*) DO DEL %%A - -echo Removing xslt files -FOR %%A IN (..\src\Umbraco.Web.UI\xslt\*.*) DO DEL %%A - -echo Removing masterpage files -FOR %%A IN (..\src\Umbraco.Web.UI\masterpages\*.*) DO DEL %%A - -echo Removing user control files -FOR %%A IN (..\src\Umbraco.Web.UI\usercontrols\*.*) DO DEL %%A - -echo Removing view files -ATTRIB +H ..\src\Umbraco.Web.UI\Views\Partials\Grid\*.cshtml /S -FOR %%A IN (..\src\Umbraco.Web.UI\Views\) DO DEL /Q /S *.cshtml -H -ATTRIB -H ..\src\Umbraco.Web.UI\Views\Partials\Grid\*.cshtml /S - -echo Removing razor files -FOR %%A IN (..\src\Umbraco.Web.UI\macroScripts\*.*) DO DEL %%A - -echo Removing media files -FOR %%A IN (..\src\Umbraco.Web.UI\media\*.*) DO DEL %%A - -echo Removing script files -FOR %%A IN (..\src\Umbraco.Web.UI\scripts\*.*) DO DEL %%A - -echo Removing css files -FOR %%A IN (..\src\Umbraco.Web.UI\css\*.*) DO DEL %%A - -echo "Umbraco install reverted to clean install" -pause -exit - - - -:exit -exit \ No newline at end of file diff --git a/build/RevertToEmptyInstall.bat b/build/RevertToEmptyInstall.bat deleted file mode 100644 index b8abe4e64e..0000000000 --- a/build/RevertToEmptyInstall.bat +++ /dev/null @@ -1,163 +0,0 @@ -@ECHO OFF - -:choice -set /P c=WARNING! Are you sure you want to continue, this will remove all package files, view files, sqlce database, etc... Press 'Y' to auto-remove all files/folders, 'N' to cancel or 'C' to prompt for each folder removal? -if /I "%c%" EQU "C" goto :prompt -if /I "%c%" EQU "Y" goto :auto -if /I "%c%" EQU "N" goto :exit -goto :choice - - -:prompt - -echo Current folder: %CD% - -echo Regenerating SQL CE database -SET buildfolder=%CD% -CD ..\tools\RegenerateUmbracoSQLCEDatabase\ -RegenerateUmbracoSQLCEDatabase.exe %CD%\..\..\src\Umbraco.Web.UI -CD %buildfolder% - -echo Removing bin files -del ..\src\Umbraco.Web.UI\bin\*.* - -echo Building solution -%windir%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe ..\src\umbraco.sln /t:Clean,Build - -echo Resetting installedPackages.config -echo ^^^ >..\src\Umbraco.Web.UI\App_Data\packages\installed\installedPackages.config - -echo Removing plugin cache files -del ..\src\Umbraco.Web.UI\App_Data\TEMP\PluginCache\*.* - -echo Removing cache files and examine index -del ..\src\Umbraco.Web.UI\App_Data\TEMP\*.* - -echo Removing log files -del ..\src\Umbraco.Web.UI\App_Data\Logs\*.* - -echo Removing packages -del ..\src\Umbraco.Web.UI\App_Data\packages\*.* - -echo Removing previews -del ..\src\Umbraco.Web.UI\App_Data\preview\*.* - -echo Removing app code files (typically added by starterkits) -del ..\src\Umbraco.Web.UI\App_Code\*.* - -echo Removing xslt files -del ..\src\Umbraco.Web.UI\xslt\*.* - -echo Removing user control files -del ..\src\Umbraco.Web.UI\UserControls\*.* - -echo Removing masterpage files -del ..\src\Umbraco.Web.UI\masterpages\*.* - -echo Removing razor files -del ..\src\Umbraco.Web.UI\macroScripts\*.* - -echo Removing media files -del ..\src\Umbraco.Web.UI\media\*.* - -echo Removing script files -del ..\src\Umbraco.Web.UI\scripts\*.* - -echo Removing css files -del ..\src\Umbraco.Web.UI\css\*.* - -echo "Umbraco install reverted to clean install" -pause -exit - - - -:auto - -echo Current folder: %CD% - -echo Regenerating SQL CE database -SET buildfolder=%CD% -CD ..\tools\RegenerateUmbracoSQLCEDatabase\ -RegenerateUmbracoSQLCEDatabase.exe %CD%\..\..\src\Umbraco.Web.UI -CD %buildfolder% - -echo Removing bin files - FOR %%A IN (..\src\Umbraco.Web.UI\bin\*.*) DO DEL %%A - -echo Building solution -%windir%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe ..\src\umbraco.sln /t:Clean,Build - -echo Resetting installedPackages.config -echo ^^^ >..\src\Umbraco.Web.UI\App_Data\packages\installed\installedPackages.config - -echo Removing plugin cache files -FOR %%A IN (..\src\Umbraco.Web.UI\App_Data\TEMP\PluginCache\*.*) DO DEL %%A - -echo Removing cache files and examine index -FOR %%A IN (..\src\Umbraco.Web.UI\App_Data\TEMP\*.*) DO DEL %%A - -echo Removing log files -FOR %%A IN (..\src\Umbraco.Web.UI\App_Data\Logs\*.*) DO DEL %%A - -echo Removing packages -FOR %%A IN (..\src\Umbraco.Web.UI\App_Data\packages\*.*) DO DEL %%A - -echo Removing previews -FOR %%A IN (..\src\Umbraco.Web.UI\App_Data\preview\*.*) DO DEL %%A - -echo Removing app code files (typically added by starterkits) -FOR %%A IN (..\src\Umbraco.Web.UI\App_Code\*.*) DO DEL %%A - -echo Removing xslt files -FOR %%A IN (..\src\Umbraco.Web.UI\xslt\*.*) DO DEL %%A - -echo Removing masterpage files -FOR %%A IN (..\src\Umbraco.Web.UI\masterpages\*.*) DO DEL %%A - -echo Removing user control files -FOR %%A IN (..\src\Umbraco.Web.UI\usercontrols\*.*) DO DEL %%A - -echo Removing view files -ATTRIB +H ..\src\Umbraco.Web.UI\Views\Partials\Grid\*.cshtml /S -FOR %%A IN (..\src\Umbraco.Web.UI\Views\) DO DEL /Q /S *.cshtml -H -ATTRIB -H ..\src\Umbraco.Web.UI\Views\Partials\Grid\*.cshtml /S - -echo Removing razor files -FOR %%A IN (..\src\Umbraco.Web.UI\macroScripts\*.*) DO DEL %%A - -echo Removing media files -FOR %%A IN (..\src\Umbraco.Web.UI\media\*.*) DO DEL %%A - -echo Removing script files -FOR %%A IN (..\src\Umbraco.Web.UI\scripts\*.*) DO DEL %%A - -echo Removing css files -FOR %%A IN (..\src\Umbraco.Web.UI\css\*.*) DO DEL %%A - -echo Removing Courier files -del ..\src\Umbraco.Web.UI\config\courier.config -del ..\src\Umbraco.Web.UI\umbraco\images\tray\courier.jpg -rmdir "..\src\Umbraco.Web.UI\umbraco\plugins\courier\" /S /Q - -echo Removing Contour files -del ..\src\Umbraco.Web.UI\umbraco\images\tray\contour.png -FOR %%A IN (..\src\Umbraco.Web.UI\umbraco\images\umbraco\icon_*.*) DO DEL %%A -rmdir "..\src\Umbraco.Web.UI\umbraco\plugins\umbracoContour\" /S /Q -del ..\src\Umbraco.Web.UI\umbraco\xslt\templates\UmbracoContour*.* /S /Q -rmdir "..\src\Umbraco.Web.UI\usercontrols\umbracoContour\" /S /Q - -echo Start with a clean web.config -copy ..\src\Umbraco.Web.UI\web.Template.config ..\src\Umbraco.Web.UI\web.config /Y - -echo Start with a clean web.config -copy ..\src\Umbraco.Web.UI\web.Template.config ..\src\Umbraco.Web.UI\web.config /Y - -echo "Umbraco install reverted to clean install" -pause -exit - - - -:exit -exit \ No newline at end of file diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index e59fad239f..c257600769 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -1,4 +1,4 @@ -_Looking for Umbraco version 8? [Click here](https://github.com/umbraco/Umbraco-CMS/blob/temp8/CONTRIBUTING.md) to go to the v8 branch_ +_Looking for Umbraco version 8? [Click here](https://github.com/umbraco/Umbraco-CMS/blob/temp8/docs/CONTRIBUTING.md) to go to the v8 branch_ # Contributing to Umbraco CMS 👍🎉 First off, thanks for taking the time to contribute! 🎉👍 diff --git a/docs/README.md b/docs/README.md index 64282ea2e8..7e22e4710f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -17,26 +17,26 @@ Umbraco is a free open source Content Management System built on the ASP.NET pla ## Umbraco - The Friendly CMS -For the first time on the Microsoft platform, there is a free user and developer friendly CMS that makes it quick and easy to create websites - or a breeze to build complex web applications. Umbraco has award-winning integration capabilities and supports ASP.NET MVC or Web Forms, including User and Custom Controls, out of the box. +For the first time on the Microsoft platform, there is a free user and developer friendly CMS that makes it quick and easy to create websites - or a breeze to build complex web applications. Umbraco has award-winning integration capabilities and supports ASP.NET MVC or Web Forms, including User and Custom Controls, out of the box. Umbraco is not only loved by developers, but is a content editors dream. Enjoy intuitive editing tools, media management, responsive views and approval workflows to send your content live. -Used by more than 443,000 active websites including Carlsberg, Segway, Amazon and Heinz and **The Official ASP.NET and IIS.NET website from Microsoft** ([https://asp.net](https://asp.net) / [https://iis.net](https://iis.net)), you can be sure that the technology is proven, stable and scales. Backed by the team at Umbraco HQ, and supported by a dedicated community of over 220,000 craftspeople globally, you can trust that Umbraco is a safe choice and is here to stay. +Used by more than 443,000 active websites including Carlsberg, Segway, Amazon and Heinz and **The Official ASP.NET and IIS.NET website from Microsoft** ([https://asp.net](https://asp.net) / [https://iis.net](https://iis.net)), you can be sure that the technology is proven, stable and scales. Backed by the team at Umbraco HQ, and supported by a dedicated community of over 220,000 craftspeople globally, you can trust that Umbraco is a safe choice and is here to stay. -To view more examples, please visit [https://umbraco.com/why-umbraco/#caseStudies](https://umbraco.com/why-umbraco/#caseStudies) +To view more examples, please visit [https://umbraco.com/case-studies-testimonials/](https://umbraco.com/case-studies-testimonials/) ## Why Open Source? As an Open Source platform, Umbraco is more than just a CMS. We are transparent with our roadmap for future versions, our incremental sprint planning notes are publicly accessible and community contributions and packages are available for all to use. ## Trying out Umbraco CMS -[Umbraco Cloud](https://umbraco.com) is the easiest and fastest way to use Umbraco yet with full support for all your custom .NET code and intergrations. You're up and running in less than a minute and your life will be made easier with automated upgrades and a built-in deployment engine. We offer a free 14 day trial, no credit card needed. +[Umbraco Cloud](https://umbraco.com/cloud) is the easiest and fastest way to use Umbraco yet with full support for all your custom .NET code and intergrations. You're up and running in less than a minute and your life will be made easier with automated upgrades and a built-in deployment engine. We offer a free 14 day trial, no credit card needed. -If you want to DIY you can [download Umbraco](https://our.umbraco.org/download) either as a ZIP file or via NuGet. It's the same version of Umbraco CMS that powers Umbraco Cloud, but you'll need to find a place to host yourself and handling deployments and upgrades is all down to you. +If you want to DIY you can [download Umbraco](https://our.umbraco.com/download) either as a ZIP file or via NuGet. It's the same version of Umbraco CMS that powers Umbraco Cloud, but you'll need to find a place to host yourself and handling deployments and upgrades is all down to you. ## Community -Our friendly community is available 24/7 at the community hub we call ["Our Umbraco"](https://our.umbraco.org). Our Umbraco feature forums for questions and answers, documentation, downloadable plugins for Umbraco and a rich collection of community resources. +Our friendly community is available 24/7 at the community hub we call ["Our Umbraco"](https://our.umbraco.com). Our Umbraco feature forums for questions and answers, documentation, downloadable plugins for Umbraco and a rich collection of community resources. ## Contribute to Umbraco @@ -44,6 +44,6 @@ Umbraco is contribution focused and community driven. If you want to contribute ## Found a bug? -Another way you can contribute to Umbraco is by providing issue reports. For information on how to submit an issue report refer to our [online guide for reporting issues](https://our.umbraco.org/contribute/report-an-issue-or-request-a-feature). +Another way you can contribute to Umbraco is by providing issue reports. For information on how to submit an issue report refer to our [online guide for reporting issues](https://github.com/umbraco/Umbraco-CMS/blob/dev-v7/docs/CONTRIBUTING.md). To view existing issues, please visit [http://issues.umbraco.org](http://issues.umbraco.org). diff --git a/src/SolutionInfo.cs b/src/SolutionInfo.cs index a3a3080dd3..163fea0a70 100644 --- a/src/SolutionInfo.cs +++ b/src/SolutionInfo.cs @@ -11,5 +11,5 @@ using System.Resources; [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyFileVersion("7.11.0")] -[assembly: AssemblyInformationalVersion("7.11.0")] \ No newline at end of file +[assembly: AssemblyFileVersion("7.13.0")] +[assembly: AssemblyInformationalVersion("7.13.0")] \ No newline at end of file diff --git a/src/Umbraco.Core/ApplicationContext.cs b/src/Umbraco.Core/ApplicationContext.cs index 82ef562bc1..b16eb18256 100644 --- a/src/Umbraco.Core/ApplicationContext.cs +++ b/src/Umbraco.Core/ApplicationContext.cs @@ -1,8 +1,8 @@ -using System; -using System.Collections.Generic; +using Semver; +using System; +using System.Collections.Concurrent; using System.Configuration; using System.Threading; -using Semver; using Umbraco.Core.Configuration; using Umbraco.Core.Logging; using Umbraco.Core.ObjectResolution; @@ -13,7 +13,7 @@ using Umbraco.Core.Sync; namespace Umbraco.Core { - /// + /// /// the Umbraco Application context /// /// @@ -270,7 +270,7 @@ namespace Umbraco.Core return _umbracoApplicationUrl; } } - + /// /// Resets the url. /// @@ -280,10 +280,10 @@ namespace Umbraco.Core } // ReSharper disable once InconsistentNaming - internal string _umbracoApplicationUrl; - - internal List _umbracoApplicationDomains = new List(); - + internal string _umbracoApplicationUrl; + + internal ConcurrentDictionary _umbracoApplicationDomains = new ConcurrentDictionary(); + internal string _umbracoApplicationDeploymentId; private Lazy _configured; @@ -399,7 +399,7 @@ namespace Umbraco.Core } return version; - } + } private void AssertIsNotReady() { diff --git a/src/Umbraco.Core/Configuration/GlobalSettings.cs b/src/Umbraco.Core/Configuration/GlobalSettings.cs index 2ac8e7d2ac..7b209a15cd 100644 --- a/src/Umbraco.Core/Configuration/GlobalSettings.cs +++ b/src/Umbraco.Core/Configuration/GlobalSettings.cs @@ -32,7 +32,6 @@ namespace Umbraco.Core.Configuration #region Private static fields - private static Version _version; private static readonly object Locker = new object(); //make this volatile so that we can ensure thread safety with a double check lock private static volatile string _reservedUrlsCache; diff --git a/src/Umbraco.Core/Configuration/UmbracoSettings/ContentElement.cs b/src/Umbraco.Core/Configuration/UmbracoSettings/ContentElement.cs index 64c9755f7d..17523ab3a1 100644 --- a/src/Umbraco.Core/Configuration/UmbracoSettings/ContentElement.cs +++ b/src/Umbraco.Core/Configuration/UmbracoSettings/ContentElement.cs @@ -112,7 +112,7 @@ namespace Umbraco.Core.Configuration.UmbracoSettings { get { - return GetOptionalTextElement("PreviewBadge", @"In Preview Mode - click to end"); + return GetOptionalTextElement("PreviewBadge", @"In Preview Mode - click to end"); } } @@ -360,4 +360,4 @@ namespace Umbraco.Core.Configuration.UmbracoSettings } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Configuration/UmbracoSettings/HelpElement.cs b/src/Umbraco.Core/Configuration/UmbracoSettings/HelpElement.cs index eb1e452100..e229c69ef5 100644 --- a/src/Umbraco.Core/Configuration/UmbracoSettings/HelpElement.cs +++ b/src/Umbraco.Core/Configuration/UmbracoSettings/HelpElement.cs @@ -9,7 +9,7 @@ namespace Umbraco.Core.Configuration.UmbracoSettings [Obsolete("This is no longer used and will be removed in future versions")] internal class HelpElement : ConfigurationElement, IHelpSection { - [ConfigurationProperty("defaultUrl", DefaultValue = "http://our.umbraco.org/wiki/umbraco-help/{0}/{1}")] + [ConfigurationProperty("defaultUrl", DefaultValue = "https://our.umbraco.com/wiki/umbraco-help/{0}/{1}")] public string DefaultUrl { get { return (string) base["defaultUrl"]; } diff --git a/src/Umbraco.Core/Configuration/UmbracoSettings/IWebRoutingSection.cs b/src/Umbraco.Core/Configuration/UmbracoSettings/IWebRoutingSection.cs index 9eb6d02aa7..c59d63d42e 100644 --- a/src/Umbraco.Core/Configuration/UmbracoSettings/IWebRoutingSection.cs +++ b/src/Umbraco.Core/Configuration/UmbracoSettings/IWebRoutingSection.cs @@ -8,6 +8,8 @@ bool DisableAlternativeTemplates { get; } + bool ValidateAlternativeTemplates { get; } + bool DisableFindContentByIdPath { get; } bool DisableRedirectUrlTracking { get; } diff --git a/src/Umbraco.Core/Configuration/UmbracoSettings/WebRoutingElement.cs b/src/Umbraco.Core/Configuration/UmbracoSettings/WebRoutingElement.cs index 82f5d46b28..ed133e5f61 100644 --- a/src/Umbraco.Core/Configuration/UmbracoSettings/WebRoutingElement.cs +++ b/src/Umbraco.Core/Configuration/UmbracoSettings/WebRoutingElement.cs @@ -1,4 +1,5 @@ -using System.Configuration; +using System; +using System.Configuration; namespace Umbraco.Core.Configuration.UmbracoSettings { @@ -21,6 +22,13 @@ namespace Umbraco.Core.Configuration.UmbracoSettings { get { return (bool) base["disableAlternativeTemplates"]; } } + + [ConfigurationProperty("validateAlternativeTemplates", DefaultValue = "false")] + public bool ValidateAlternativeTemplates + { + get { return (bool)base["validateAlternativeTemplates"]; } + } + [ConfigurationProperty("disableFindContentByIdPath", DefaultValue = "false")] public bool DisableFindContentByIdPath { diff --git a/src/Umbraco.Core/Configuration/UmbracoVersion.cs b/src/Umbraco.Core/Configuration/UmbracoVersion.cs index 7eca275901..ab71fdb40d 100644 --- a/src/Umbraco.Core/Configuration/UmbracoVersion.cs +++ b/src/Umbraco.Core/Configuration/UmbracoVersion.cs @@ -6,7 +6,7 @@ namespace Umbraco.Core.Configuration { public class UmbracoVersion { - private static readonly Version Version = new Version("7.11.0"); + private static readonly Version Version = new Version("7.13.0"); /// /// Gets the current version of Umbraco. diff --git a/src/Umbraco.Core/Constants-Applications.cs b/src/Umbraco.Core/Constants-Applications.cs index a5c67fba93..175fa826d5 100644 --- a/src/Umbraco.Core/Constants-Applications.cs +++ b/src/Umbraco.Core/Constants-Applications.cs @@ -92,7 +92,7 @@ /// alias for the dictionary tree. /// public const string Dictionary = "dictionary"; - + public const string Stylesheets = "stylesheets"; /// @@ -135,4 +135,4 @@ } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Constants-Conventions.cs b/src/Umbraco.Core/Constants-Conventions.cs index b59b7e487e..a19e59f4ef 100644 --- a/src/Umbraco.Core/Constants-Conventions.cs +++ b/src/Umbraco.Core/Constants-Conventions.cs @@ -341,6 +341,16 @@ namespace Umbraco.Core /// ContentType alias for default relation type "Relate Parent Document On Delete". /// public const string RelateParentDocumentOnDeleteAlias = "relateParentDocumentOnDelete"; + + /// + /// ContentType name for default relation type "Relate Parent Media Folder On Delete". + /// + public const string RelateParentMediaFolderOnDeleteName = "Relate Parent Media Folder On Delete"; + + /// + /// ContentType alias for default relation type "Relate Parent Media Folder On Delete". + /// + public const string RelateParentMediaFolderOnDeleteAlias = "relateParentMediaFolderOnDelete"; } } } diff --git a/src/Umbraco.Core/Constants-PackageRepository.cs b/src/Umbraco.Core/Constants-PackageRepository.cs index bdcb86932b..59005b3e2c 100644 --- a/src/Umbraco.Core/Constants-PackageRepository.cs +++ b/src/Umbraco.Core/Constants-PackageRepository.cs @@ -7,7 +7,7 @@ /// public static class PackageRepository { - public const string RestApiBaseUrl = "https://our.umbraco.org/webapi/packages/v1"; + public const string RestApiBaseUrl = "https://our.umbraco.com/webapi/packages/v1"; public const string DefaultRepositoryName = "Umbraco package Repository"; public const string DefaultRepositoryId = "65194810-1f85-11dd-bd0b-0800200c9a66"; } diff --git a/src/Umbraco.Core/DatabaseContext.cs b/src/Umbraco.Core/DatabaseContext.cs index ff8a8e4674..63fd72b7ed 100644 --- a/src/Umbraco.Core/DatabaseContext.cs +++ b/src/Umbraco.Core/DatabaseContext.cs @@ -279,16 +279,34 @@ namespace Umbraco.Core { get { - string dbtype = Database.Connection == null ? ProviderName : Database.Connection.GetType().Name; + if (Database.Connection == null) + { + string dbtype = ProviderName; - if (dbtype.StartsWith("MySql")) return DatabaseProviders.MySql; - if (dbtype.StartsWith("SqlCe") || dbtype.Contains("SqlServerCe")) return DatabaseProviders.SqlServerCE; - if (dbtype.StartsWith("Npgsql")) return DatabaseProviders.PostgreSQL; - if (dbtype.StartsWith("Oracle") || dbtype.Contains("OracleClient")) return DatabaseProviders.Oracle; - if (dbtype.StartsWith("SQLite")) return DatabaseProviders.SQLite; - if (dbtype.Contains("Azure")) return DatabaseProviders.SqlAzure; + if (dbtype.StartsWith("MySql")) return DatabaseProviders.MySql; + if (dbtype.StartsWith("SqlCe") || dbtype.Contains("SqlServerCe")) return DatabaseProviders.SqlServerCE; + if (dbtype.StartsWith("Npgsql")) return DatabaseProviders.PostgreSQL; + if (dbtype.StartsWith("Oracle") || dbtype.Contains("OracleClient")) return DatabaseProviders.Oracle; + if (dbtype.StartsWith("SQLite")) return DatabaseProviders.SQLite; + if (dbtype.Contains("Azure")) return DatabaseProviders.SqlAzure; - return DatabaseProviders.SqlServer; + return DatabaseProviders.SqlServer; + } + else + { + Database.DBType dbType = Database.DatabaseType; + + switch (dbType) + { + case Persistence.Database.DBType.SqlServer: return DatabaseProviders.SqlServer; + case Persistence.Database.DBType.SqlServerCE: return DatabaseProviders.SqlServerCE; + case Persistence.Database.DBType.MySql: return DatabaseProviders.MySql; + case Persistence.Database.DBType.PostgreSQL: return DatabaseProviders.PostgreSQL; + case Persistence.Database.DBType.Oracle: return DatabaseProviders.Oracle; + case Persistence.Database.DBType.SQLite: return DatabaseProviders.SQLite; + default: return (ProviderName.Contains("Azure"))? DatabaseProviders.SqlAzure : DatabaseProviders.SqlServer; + } + } } } diff --git a/src/Umbraco.Core/IO/SystemFiles.cs b/src/Umbraco.Core/IO/SystemFiles.cs index ccf8ea5b2c..a171b9174b 100644 --- a/src/Umbraco.Core/IO/SystemFiles.cs +++ b/src/Umbraco.Core/IO/SystemFiles.cs @@ -37,6 +37,7 @@ namespace Umbraco.Core.IO } } + [Obsolete("This file is no longer used and should not be accessed!")] public static string MetablogConfig { get diff --git a/src/Umbraco.Core/Macros/MacroFieldEditorsResolver.cs b/src/Umbraco.Core/Macros/MacroFieldEditorsResolver.cs index 1788932c8f..00aa513209 100644 --- a/src/Umbraco.Core/Macros/MacroFieldEditorsResolver.cs +++ b/src/Umbraco.Core/Macros/MacroFieldEditorsResolver.cs @@ -3,10 +3,9 @@ using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; -using System.Linq; +using umbraco.interfaces; using Umbraco.Core.Logging; using Umbraco.Core.ObjectResolution; -using umbraco.interfaces; namespace Umbraco.Core.Macros { diff --git a/src/Umbraco.Core/Models/ContentType.cs b/src/Umbraco.Core/Models/ContentType.cs index 568d80ccb7..549ccb24e8 100644 --- a/src/Umbraco.Core/Models/ContentType.cs +++ b/src/Umbraco.Core/Models/ContentType.cs @@ -102,6 +102,28 @@ namespace Umbraco.Core.Models } } + /// + /// Determines if AllowedTemplates contains templateId + /// + /// The template id to check + /// True if AllowedTemplates contains the templateId else False + public bool IsAllowedTemplate(int templateId) + { + var allowedTemplates = AllowedTemplates ?? new ITemplate[0]; + return allowedTemplates.Any(t => t.Id == templateId); + } + + /// + /// Determines if AllowedTemplates contains templateId + /// + /// The template alias to check + /// True if AllowedTemplates contains the templateAlias else False + public bool IsAllowedTemplate(string templateAlias) + { + var allowedTemplates = AllowedTemplates ?? new ITemplate[0]; + return allowedTemplates.Any(t => t.Alias.Equals(templateAlias, StringComparison.InvariantCultureIgnoreCase)); + } + /// /// Sets the default template for the ContentType /// diff --git a/src/Umbraco.Core/Models/IContentType.cs b/src/Umbraco.Core/Models/IContentType.cs index 766a8eec81..356a5acccd 100644 --- a/src/Umbraco.Core/Models/IContentType.cs +++ b/src/Umbraco.Core/Models/IContentType.cs @@ -17,6 +17,20 @@ namespace Umbraco.Core.Models /// IEnumerable AllowedTemplates { get; set; } + /// + /// Determines if AllowedTemplates contains templateId + /// + /// The template id to check + /// True if AllowedTemplates contains the templateId else False + bool IsAllowedTemplate(int templateId); + + /// + /// Determines if AllowedTemplates contains templateId + /// + /// The template alias to check + /// True if AllowedTemplates contains the templateAlias else False + bool IsAllowedTemplate(string templateAlias); + /// /// Sets the default template for the ContentType /// diff --git a/src/Umbraco.Core/Models/Identity/BackOfficeIdentityUser.cs b/src/Umbraco.Core/Models/Identity/BackOfficeIdentityUser.cs index 1a8cdc446f..3151492106 100644 --- a/src/Umbraco.Core/Models/Identity/BackOfficeIdentityUser.cs +++ b/src/Umbraco.Core/Models/Identity/BackOfficeIdentityUser.cs @@ -120,13 +120,22 @@ namespace Umbraco.Core.Models.Identity set { _tracker.SetPropertyValueAndDetectChanges(value, ref _userName, Ps.Value.UserNameSelector); } } + /// + /// LastPasswordChangeDateUtc so we can track changes to it + /// + public override DateTime? LastPasswordChangeDateUtc + { + get { return _lastPasswordChangeDateUtc; } + set { _tracker.SetPropertyValueAndDetectChanges(value, ref _lastPasswordChangeDateUtc, Ps.Value.LastPasswordChangeDateUtcSelector); } + } + /// /// Override LastLoginDateUtc so we can track changes to it /// public override DateTime? LastLoginDateUtc { get { return _lastLoginDateUtc; } - set { _tracker.SetPropertyValueAndDetectChanges(value, ref _lastLoginDateUtc, Ps.Value.LastLoginDateUtcSelector); } + set { _tracker.SetPropertyValueAndDetectChanges(value, ref _lastLoginDateUtc, Ps.Value.LastLoginDateUtcSelector); } } /// @@ -392,6 +401,7 @@ namespace Umbraco.Core.Models.Identity public readonly PropertyInfo EmailSelector = ExpressionHelper.GetPropertyInfo(x => x.Email); public readonly PropertyInfo UserNameSelector = ExpressionHelper.GetPropertyInfo(x => x.UserName); public readonly PropertyInfo LastLoginDateUtcSelector = ExpressionHelper.GetPropertyInfo(x => x.LastLoginDateUtc); + public readonly PropertyInfo LastPasswordChangeDateUtcSelector = ExpressionHelper.GetPropertyInfo(x => x.LastPasswordChangeDateUtc); public readonly PropertyInfo EmailConfirmedSelector = ExpressionHelper.GetPropertyInfo(x => x.EmailConfirmed); public readonly PropertyInfo NameSelector = ExpressionHelper.GetPropertyInfo(x => x.Name); public readonly PropertyInfo AccessFailedCountSelector = ExpressionHelper.GetPropertyInfo(x => x.AccessFailedCount); @@ -419,6 +429,7 @@ namespace Umbraco.Core.Models.Identity private int _id; private bool _hasIdentity = false; private DateTime? _lastLoginDateUtc; + private DateTime? _lastPasswordChangeDateUtc; private bool _emailConfirmed; private string _name; private int _accessFailedCount; @@ -449,4 +460,4 @@ namespace Umbraco.Core.Models.Identity } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Models/Identity/IdentityModelMappings.cs b/src/Umbraco.Core/Models/Identity/IdentityModelMappings.cs index 761146b37d..973de0e65b 100644 --- a/src/Umbraco.Core/Models/Identity/IdentityModelMappings.cs +++ b/src/Umbraco.Core/Models/Identity/IdentityModelMappings.cs @@ -19,6 +19,7 @@ namespace Umbraco.Core.Models.Identity }) .ConstructUsing(user => new BackOfficeIdentityUser(user.Id, user.Groups)) .ForMember(user => user.LastLoginDateUtc, expression => expression.MapFrom(user => user.LastLoginDate.ToUniversalTime())) + .ForMember(user => user.LastPasswordChangeDateUtc, expression => expression.MapFrom(user => user.LastPasswordChangeDate.ToUniversalTime())) .ForMember(user => user.Email, expression => expression.MapFrom(user => user.Email)) .ForMember(user => user.EmailConfirmed, expression => expression.MapFrom(user => user.EmailConfirmedDate.HasValue)) .ForMember(user => user.Id, expression => expression.MapFrom(user => user.Id)) diff --git a/src/Umbraco.Core/Models/Identity/IdentityUser.cs b/src/Umbraco.Core/Models/Identity/IdentityUser.cs index c867dcf622..81c7c56d13 100644 --- a/src/Umbraco.Core/Models/Identity/IdentityUser.cs +++ b/src/Umbraco.Core/Models/Identity/IdentityUser.cs @@ -83,6 +83,12 @@ namespace Umbraco.Core.Models.Identity /// public virtual DateTime? LockoutEndDateUtc { get; set; } + /// + /// DateTime in UTC when the password was last changed. + /// + /// + public virtual DateTime? LastPasswordChangeDateUtc { get; set; } + /// /// Is lockout enabled for this user /// @@ -127,4 +133,4 @@ namespace Umbraco.Core.Models.Identity } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Models/Membership/User.cs b/src/Umbraco.Core/Models/Membership/User.cs index cd9a84758e..40c8f5fafd 100644 --- a/src/Umbraco.Core/Models/Membership/User.cs +++ b/src/Umbraco.Core/Models/Membership/User.cs @@ -259,7 +259,7 @@ namespace Umbraco.Core.Models.Membership { get { - if (LastLoginDate == default(DateTime) && IsApproved == false && InvitedDate != null) + if (LastLoginDate == default && IsApproved == false && InvitedDate != null) return UserState.Invited; if (IsLockedOut) @@ -267,7 +267,11 @@ namespace Umbraco.Core.Models.Membership if (IsApproved == false) return UserState.Disabled; - return UserState.Active; + // User is not disabled or locked and has never logged in before + if (LastLoginDate == default && IsApproved && IsLockedOut == false) + return UserState.Inactive; + + return UserState.Active; } } diff --git a/src/Umbraco.Core/Models/Membership/UserState.cs b/src/Umbraco.Core/Models/Membership/UserState.cs index 5f6ee1615a..fc277b4fa3 100644 --- a/src/Umbraco.Core/Models/Membership/UserState.cs +++ b/src/Umbraco.Core/Models/Membership/UserState.cs @@ -9,6 +9,7 @@ Active = 0, Disabled = 1, LockedOut = 2, - Invited = 3 + Invited = 3, + Inactive = 4 } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Models/Rdbms/ConsentDto.cs b/src/Umbraco.Core/Models/Rdbms/ConsentDto.cs index 0b6481070a..dc5fe44be3 100644 --- a/src/Umbraco.Core/Models/Rdbms/ConsentDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/ConsentDto.cs @@ -39,6 +39,7 @@ namespace Umbraco.Core.Models.Rdbms public int State { get; set; } [Column("comment")] + [NullSetting(NullSetting = NullSettings.Null)] public string Comment { get; set; } } } diff --git a/src/Umbraco.Core/Models/Rdbms/LanguageDto.cs b/src/Umbraco.Core/Models/Rdbms/LanguageDto.cs index a634dca0a4..cad023119a 100644 --- a/src/Umbraco.Core/Models/Rdbms/LanguageDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/LanguageDto.cs @@ -15,7 +15,7 @@ namespace Umbraco.Core.Models.Rdbms [Column("languageISOCode")] [Index(IndexTypes.UniqueNonClustered)] [NullSetting(NullSetting = NullSettings.Null)] - [Length(10)] + [Length(14)] public string IsoCode { get; set; } [Column("languageCultureName")] @@ -23,4 +23,4 @@ namespace Umbraco.Core.Models.Rdbms [Length(100)] public string CultureName { get; set; } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Models/Rdbms/RelationTypeDto.cs b/src/Umbraco.Core/Models/Rdbms/RelationTypeDto.cs index d13ce33520..0c04a1c0be 100644 --- a/src/Umbraco.Core/Models/Rdbms/RelationTypeDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/RelationTypeDto.cs @@ -9,7 +9,7 @@ namespace Umbraco.Core.Models.Rdbms [ExplicitColumns] internal class RelationTypeDto { - public const int NodeIdSeed = 3; + public const int NodeIdSeed = 4; [Column("id")] [PrimaryKeyColumn(IdentitySeed = NodeIdSeed)] diff --git a/src/Umbraco.Core/Packaging/Models/PackageAction.cs b/src/Umbraco.Core/Packaging/Models/PackageAction.cs index 58f7de8078..7e442ff6d9 100644 --- a/src/Umbraco.Core/Packaging/Models/PackageAction.cs +++ b/src/Umbraco.Core/Packaging/Models/PackageAction.cs @@ -27,7 +27,7 @@ namespace Umbraco.Core.Packaging.Models set { _runAt = value; } } - public bool Undo //NOTE: Should thid default to "False"? but the documentation says default "True" (http://our.umbraco.org/wiki/reference/packaging/package-actions) + public bool Undo //NOTE: Should thid default to "False"? but the documentation says default "True" (https://our.umbraco.com/wiki/reference/packaging/package-actions) { get { return _undo ?? true; } set { _undo = value; } diff --git a/src/Umbraco.Core/Persistence/DatabaseModelDefinitions/ConstraintDefinition.cs b/src/Umbraco.Core/Persistence/DatabaseModelDefinitions/ConstraintDefinition.cs index a3b7d99802..cba71387ee 100644 --- a/src/Umbraco.Core/Persistence/DatabaseModelDefinitions/ConstraintDefinition.cs +++ b/src/Umbraco.Core/Persistence/DatabaseModelDefinitions/ConstraintDefinition.cs @@ -6,17 +6,17 @@ namespace Umbraco.Core.Persistence.DatabaseModelDefinitions { public ConstraintDefinition(ConstraintType type) { - constraintType = type; + _constraintType = type; } - private ConstraintType constraintType; - public bool IsPrimaryKeyConstraint { get { return ConstraintType.PrimaryKey == constraintType; } } - public bool IsUniqueConstraint { get { return ConstraintType.Unique == constraintType; } } - public bool IsNonUniqueConstraint { get { return ConstraintType.NonUnique == constraintType; } } + private readonly ConstraintType _constraintType; + public bool IsPrimaryKeyConstraint => ConstraintType.PrimaryKey == _constraintType; + public bool IsUniqueConstraint => ConstraintType.Unique == _constraintType; + public bool IsNonUniqueConstraint => ConstraintType.NonUnique == _constraintType; public string SchemaName { get; set; } public string ConstraintName { get; set; } public string TableName { get; set; } public ICollection Columns = new HashSet(); } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/DatabaseModelDefinitions/DbIndexDefinition.cs b/src/Umbraco.Core/Persistence/DatabaseModelDefinitions/DbIndexDefinition.cs index e495d61550..ca0e51e699 100644 --- a/src/Umbraco.Core/Persistence/DatabaseModelDefinitions/DbIndexDefinition.cs +++ b/src/Umbraco.Core/Persistence/DatabaseModelDefinitions/DbIndexDefinition.cs @@ -1,3 +1,5 @@ +using System; + namespace Umbraco.Core.Persistence.DatabaseModelDefinitions { /// @@ -5,9 +7,17 @@ namespace Umbraco.Core.Persistence.DatabaseModelDefinitions /// internal class DbIndexDefinition { - public virtual string IndexName { get; set; } - public virtual string TableName { get; set; } - public virtual string ColumnName { get; set; } - public virtual bool IsUnique { get; set; } + public DbIndexDefinition(Tuple data) + { + TableName = data.Item1; + IndexName = data.Item2; + ColumnName = data.Item3; + IsUnique = data.Item4; + } + + public string IndexName { get; } + public string TableName { get; } + public string ColumnName { get; } + public bool IsUnique { get; } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/DatabaseSchemaHelper.cs b/src/Umbraco.Core/Persistence/DatabaseSchemaHelper.cs index 944d5a8a74..f03e751427 100644 --- a/src/Umbraco.Core/Persistence/DatabaseSchemaHelper.cs +++ b/src/Umbraco.Core/Persistence/DatabaseSchemaHelper.cs @@ -31,6 +31,13 @@ namespace Umbraco.Core.Persistence return _syntaxProvider.DoesTableExist(_db, tableName); } + public bool TableExist() + { + var poco = Database.PocoData.ForType(typeof(T)); + var tableName = poco.TableInfo.TableName; + return TableExist(tableName); + } + internal void UninstallDatabaseSchema() { var creation = new DatabaseSchemaCreation(_db, _logger, _syntaxProvider); @@ -194,4 +201,4 @@ namespace Umbraco.Core.Persistence _db.Execute(sql); } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/LocalDb.cs b/src/Umbraco.Core/Persistence/LocalDb.cs index 4dcc56a9a4..35f3ae750e 100644 --- a/src/Umbraco.Core/Persistence/LocalDb.cs +++ b/src/Umbraco.Core/Persistence/LocalDb.cs @@ -142,7 +142,7 @@ namespace Umbraco.Core.Persistence { EnsureAvailable(); var instances = GetInstances(); - return instances != null && instances.Contains(instanceName); + return instances != null && instances.Contains(instanceName, StringComparer.OrdinalIgnoreCase); } /// diff --git a/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs b/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs index 45dbeb72bc..d19e0e0b60 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs @@ -122,7 +122,7 @@ namespace Umbraco.Core.Persistence.Migrations.Initial _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -88, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-88", SortOrder = 32, UniqueId = new Guid("0cc0eba1-9960-42c9-bf9b-60e150b429ae"), Text = "Textstring", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -87, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-87", SortOrder = 4, UniqueId = new Guid("ca90c950-0aff-4e72-b976-a30b1ac57dad"), Text = "Richtext editor", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -51, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-51", SortOrder = 2, UniqueId = new Guid("2e6d3631-066e-44b8-aec4-96f09099b2b5"), Text = "Numeric", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); - _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -49, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-49", SortOrder = 2, UniqueId = new Guid("92897bc6-a5f3-4ffe-ae27-f2e7e33dda49"), Text = "True/false", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); + _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -49, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-49", SortOrder = 2, UniqueId = new Guid("92897bc6-a5f3-4ffe-ae27-f2e7e33dda49"), Text = "Checkbox", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -43, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-43", SortOrder = 2, UniqueId = new Guid("fbaf13a8-4036-41f2-93a3-974f678c312a"), Text = "Checkbox list", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -42, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-42", SortOrder = 2, UniqueId = new Guid("0b6a45e7-44ba-430d-9da5-4e46060b9e03"), Text = "Dropdown", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -41, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-41", SortOrder = 2, UniqueId = new Guid("5046194e-4237-453c-a547-15db3a07c4e1"), Text = "Date Picker", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); @@ -146,11 +146,6 @@ namespace Umbraco.Core.Persistence.Migrations.Initial _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1048, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1048", SortOrder = 2, UniqueId = new Guid("135D60E0-64D9-49ED-AB08-893C9BA44AE5"), Text = "Media Picker", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1049, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1049", SortOrder = 2, UniqueId = new Guid("9DBBCBBB-2327-434A-B355-AF1B84E5010A"), Text = "Multiple Media Picker", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1050, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1050", SortOrder = 2, UniqueId = new Guid("B4E3535A-1753-47E2-8568-602CF8CFEE6F"), Text = "Related Links", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); - - //TODO: We're not creating these for 7.0 - //_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1039, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1039", SortOrder = 2, UniqueId = new Guid("06f349a9-c949-4b6a-8660-59c10451af42"), Text = "Ultimate Picker", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); - //_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1038, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1038", SortOrder = 2, UniqueId = new Guid("1251c96c-185c-4e9b-93f4-b48205573cbd"), Text = "Simple Editor", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); - //_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1042, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1042", SortOrder = 2, UniqueId = new Guid("0a452bd5-83f9-4bc3-8403-1286e13fb77e"), Text = "Macro Container", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); } private void CreateUmbracoLockData() @@ -190,18 +185,18 @@ namespace Umbraco.Core.Persistence.Migrations.Initial private void CreateUmbracoUserGroup2AppData() { _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Content }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Developer }); + _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Developer }); _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Media }); _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Members }); _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Settings }); _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Users }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Forms }); - - _database.Insert(new UserGroup2AppDto { UserGroupId = 2, AppAlias = Constants.Applications.Content }); + _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Forms }); + + _database.Insert(new UserGroup2AppDto { UserGroupId = 2, AppAlias = Constants.Applications.Content }); _database.Insert(new UserGroup2AppDto { UserGroupId = 3, AppAlias = Constants.Applications.Content }); _database.Insert(new UserGroup2AppDto { UserGroupId = 3, AppAlias = Constants.Applications.Media }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 3, AppAlias = Constants.Applications.Forms }); + _database.Insert(new UserGroup2AppDto { UserGroupId = 3, AppAlias = Constants.Applications.Forms }); _database.Insert(new UserGroup2AppDto { UserGroupId = 4, AppAlias = Constants.Applications.Translation }); } @@ -278,17 +273,13 @@ namespace Umbraco.Core.Persistence.Migrations.Initial _database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 28, DataTypeId = 1048, PropertyEditorAlias = Constants.PropertyEditors.MediaPicker2Alias, DbType = "Ntext" }); _database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 29, DataTypeId = 1049, PropertyEditorAlias = Constants.PropertyEditors.MediaPicker2Alias, DbType = "Ntext" }); _database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 30, DataTypeId = 1050, PropertyEditorAlias = Constants.PropertyEditors.RelatedLinks2Alias, DbType = "Ntext" }); - - //TODO: We're not creating these for 7.0 - //_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 19, DataTypeId = 1038, PropertyEditorAlias = Constants.PropertyEditors.MarkdownEditorAlias, DbType = "Ntext" }); - //_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 20, DataTypeId = 1039, PropertyEditorAlias = Constants.PropertyEditors.UltimatePickerAlias, DbType = "Ntext" }); - //_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 23, DataTypeId = 1042, PropertyEditorAlias = Constants.PropertyEditors.MacroContainerAlias, DbType = "Ntext" }); } private void CreateCmsDataTypePreValuesData() { _database.Insert("cmsDataTypePreValues", "id", false, new DataTypePreValueDto { Id = 3, Alias = "", SortOrder = 0, DataTypeNodeId = -87, Value = ",code,undo,redo,cut,copy,mcepasteword,stylepicker,bold,italic,bullist,numlist,outdent,indent,mcelink,unlink,mceinsertanchor,mceimage,umbracomacro,mceinserttable,umbracoembed,mcecharmap,|1|1,2,3,|0|500,400|1049,|true|" }); _database.Insert("cmsDataTypePreValues", "id", false, new DataTypePreValueDto { Id = 4, Alias = "group", SortOrder = 0, DataTypeNodeId = 1041, Value = "default" }); + _database.Insert("cmsDataTypePreValues", "id", false, new DataTypePreValueDto { Id = 5, Alias = "storageType", SortOrder = 0, DataTypeNodeId = 1041, Value = "Json" }); //defaults for the member list _database.Insert("cmsDataTypePreValues", "id", false, new DataTypePreValueDto { Id = -1, Alias = "pageSize", SortOrder = 1, DataTypeNodeId = Constants.System.DefaultMembersListViewDataTypeId, Value = "10" }); @@ -319,6 +310,9 @@ namespace Umbraco.Core.Persistence.Migrations.Initial relationType = new RelationTypeDto { Id = 2, Alias = Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteAlias, ChildObjectType = new Guid(Constants.ObjectTypes.Document), ParentObjectType = new Guid(Constants.ObjectTypes.Document), Dual = false, Name = Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteName }; relationType.UniqueId = (relationType.Alias + "____" + relationType.Name).ToGuid(); _database.Insert("umbracoRelationType", "id", false, relationType); + relationType = new RelationTypeDto { Id = 3, Alias = Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteAlias, ChildObjectType = new Guid(Constants.ObjectTypes.Media), ParentObjectType = new Guid(Constants.ObjectTypes.Media), Dual = false, Name = Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteName }; + relationType.UniqueId = (relationType.Alias + "____" + relationType.Name).ToGuid(); + _database.Insert("umbracoRelationType", "id", false, relationType); } private void CreateCmsTaskTypeData() diff --git a/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs b/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs index 06d801992e..e3ac16473d 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs @@ -159,13 +159,7 @@ namespace Umbraco.Core.Persistence.Migrations.Initial //get the db index defs result.DbIndexDefinitions = _sqlSyntaxProvider.GetDefinedIndexes(_database) - .Select(x => new DbIndexDefinition() - { - TableName = x.Item1, - IndexName = x.Item2, - ColumnName = x.Item3, - IsUnique = x.Item4 - }).ToArray(); + .Select(x => new DbIndexDefinition(x)).ToArray(); foreach (var item in OrderedTables.OrderBy(x => x.Key)) { @@ -184,6 +178,14 @@ namespace Umbraco.Core.Persistence.Migrations.Initial return result; } + /// + /// This validates the Primary/Foreign keys in the database + /// + /// + /// + /// This does not validate any database constraints that are not PKs or FKs because Umbraco does not create a database with non PK/FK contraints. + /// Any unique "constraints" in the database are done with unique indexes. + /// private void ValidateDbConstraints(DatabaseSchemaResult result) { //MySql doesn't conform to the "normal" naming of constraints, so there is currently no point in doing these checks. @@ -196,8 +198,7 @@ namespace Umbraco.Core.Persistence.Migrations.Initial var constraintsInDatabase = _sqlSyntaxProvider.GetConstraintsPerColumn(_database).DistinctBy(x => x.Item3).ToList(); var foreignKeysInDatabase = constraintsInDatabase.Where(x => x.Item3.InvariantStartsWith("FK_")).Select(x => x.Item3).ToList(); var primaryKeysInDatabase = constraintsInDatabase.Where(x => x.Item3.InvariantStartsWith("PK_")).Select(x => x.Item3).ToList(); - var indexesInDatabase = constraintsInDatabase.Where(x => x.Item3.InvariantStartsWith("IX_")).Select(x => x.Item3).ToList(); - var indexesInSchema = result.TableDefinitions.SelectMany(x => x.Indexes.Select(y => y.Name)).ToList(); + var unknownConstraintsInDatabase = constraintsInDatabase.Where( x => @@ -212,7 +213,7 @@ namespace Umbraco.Core.Persistence.Migrations.Initial // In theory you could have: FK_ or fk_ ...or really any standard that your development department (or developer) chooses to use. foreach (var unknown in unknownConstraintsInDatabase) { - if (foreignKeysInSchema.InvariantContains(unknown) || primaryKeysInSchema.InvariantContains(unknown) || indexesInSchema.InvariantContains(unknown)) + if (foreignKeysInSchema.InvariantContains(unknown) || primaryKeysInSchema.InvariantContains(unknown)) { result.ValidConstraints.Add(unknown); } @@ -254,23 +255,6 @@ namespace Umbraco.Core.Persistence.Migrations.Initial result.Errors.Add(new Tuple("Constraint", primaryKey)); } - //Constaints: - - //NOTE: SD: The colIndex checks above should really take care of this but I need to keep this here because it was here before - // and some schema validation checks might rely on this data remaining here! - //Add valid and invalid index differences to the result object - var validIndexDifferences = indexesInDatabase.Intersect(indexesInSchema, StringComparer.InvariantCultureIgnoreCase); - foreach (var index in validIndexDifferences) - { - result.ValidConstraints.Add(index); - } - var invalidIndexDifferences = - indexesInDatabase.Except(indexesInSchema, StringComparer.InvariantCultureIgnoreCase) - .Union(indexesInSchema.Except(indexesInDatabase, StringComparer.InvariantCultureIgnoreCase)); - foreach (var index in invalidIndexDifferences) - { - result.Errors.Add(new Tuple("Constraint", index)); - } } private void ValidateDbColumns(DatabaseSchemaResult result) diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AddIndexToCmsMacroPropertyTable.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AddIndexToCmsMacroPropertyTable.cs index 8dfe51f8dc..73e6e91288 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AddIndexToCmsMacroPropertyTable.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AddIndexToCmsMacroPropertyTable.cs @@ -28,13 +28,7 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven public override void Up() { var dbIndexes = _skipIndexCheck ? new DbIndexDefinition[]{} : SqlSyntax.GetDefinedIndexes(Context.Database) - .Select(x => new DbIndexDefinition() - { - TableName = x.Item1, - IndexName = x.Item2, - ColumnName = x.Item3, - IsUnique = x.Item4 - }).ToArray(); + .Select(x => new DbIndexDefinition(x)).ToArray(); //make sure it doesn't already exist if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_cmsMacroProperty_Alias")) == false) @@ -54,4 +48,4 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven Delete.Index("IX_cmsMacroProperty_Alias").OnTable("cmsMacroProperty"); } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AddIndexToCmsMacroTable.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AddIndexToCmsMacroTable.cs index e6c237d4d6..ada45adf06 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AddIndexToCmsMacroTable.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AddIndexToCmsMacroTable.cs @@ -30,13 +30,7 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven public override void Up() { var dbIndexes = _forTesting ? new DbIndexDefinition[] { } : SqlSyntax.GetDefinedIndexes(Context.Database) - .Select(x => new DbIndexDefinition() - { - TableName = x.Item1, - IndexName = x.Item2, - ColumnName = x.Item3, - IsUnique = x.Item4 - }).ToArray(); + .Select(x => new DbIndexDefinition(x)).ToArray(); //make sure it doesn't already exist if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_cmsMacro_Alias")) == false) @@ -75,4 +69,4 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven Delete.Index("IX_cmsMacro_Alias").OnTable("cmsMacro"); } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AlterTagsTable.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AlterTagsTable.cs index 32bd9d1403..cf99db6d64 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AlterTagsTable.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AlterTagsTable.cs @@ -18,13 +18,7 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven public override void Up() { var dbIndexes = SqlSyntax.GetDefinedIndexes(Context.Database) - .Select(x => new DbIndexDefinition() - { - TableName = x.Item1, - IndexName = x.Item2, - ColumnName = x.Item3, - IsUnique = x.Item4 - }).ToArray(); + .Select(x => new DbIndexDefinition(x)).ToArray(); //add a foreign key to the parent id column too! @@ -54,4 +48,4 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven throw new DataLossException("Cannot downgrade from a version 7 database to a prior version, the database schema has already been modified"); } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AssignMissingKeysAndIndexes.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AssignMissingKeysAndIndexes.cs index c76031e4e4..f9e0914fb9 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AssignMissingKeysAndIndexes.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/AssignMissingKeysAndIndexes.cs @@ -26,13 +26,7 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven // it is absolutely required to exist in order to have it as a foreign key reference, so we'll need to check it's existence // this came to light from this issue: http://issues.umbraco.org/issue/U4-4133 var dbIndexes = SqlSyntax.GetDefinedIndexes(Context.Database) - .Select(x => new DbIndexDefinition() - { - TableName = x.Item1, - IndexName = x.Item2, - ColumnName = x.Item3, - IsUnique = x.Item4 - }).ToArray(); + .Select(x => new DbIndexDefinition(x)).ToArray(); if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_cmsContent")) == false) { Create.Index("IX_cmsContent").OnTable("cmsContent").OnColumn("nodeId").Ascending().WithOptions().Unique(); @@ -95,4 +89,4 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven //don't do anything, these keys should have always existed! } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenEightZero/AddIndexToPropertyTypeAliasColumn.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenEightZero/AddIndexToPropertyTypeAliasColumn.cs index d5d13acc91..b6b7c06564 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenEightZero/AddIndexToPropertyTypeAliasColumn.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenEightZero/AddIndexToPropertyTypeAliasColumn.cs @@ -15,7 +15,7 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenEightZe { Execute.Code(database => { - var dbIndexes = SqlSyntax.GetDefinedIndexesDefinitions(Context.Database); + var dbIndexes = SqlSyntax.GetDefinedIndexesDefinitions(database); //make sure it doesn't already exist if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_cmsPropertyTypeAlias")) == false) diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/AddForeignKeysForLanguageAndDictionaryTables.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/AddForeignKeysForLanguageAndDictionaryTables.cs index 0baf5bff1a..8ec961fc1d 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/AddForeignKeysForLanguageAndDictionaryTables.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/AddForeignKeysForLanguageAndDictionaryTables.cs @@ -62,13 +62,7 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenThreeZe } var dbIndexes = SqlSyntax.GetDefinedIndexes(Context.Database) - .Select(x => new DbIndexDefinition - { - TableName = x.Item1, - IndexName = x.Item2, - ColumnName = x.Item3, - IsUnique = x.Item4 - }).ToArray(); + .Select(x => new DbIndexDefinition(x)).ToArray(); //make sure it doesn't already exist if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_cmsDictionary_id")) == false) @@ -104,4 +98,4 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenThreeZe throw new NotImplementedException(); } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/MigrateAndRemoveTemplateMasterColumn.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/MigrateAndRemoveTemplateMasterColumn.cs index 59236106ab..6bc9f3da37 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/MigrateAndRemoveTemplateMasterColumn.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/MigrateAndRemoveTemplateMasterColumn.cs @@ -120,13 +120,7 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenThreeZe var dbIndexes = SqlSyntax.GetDefinedIndexes(Context.Database) - .Select(x => new DbIndexDefinition() - { - TableName = x.Item1, - IndexName = x.Item2, - ColumnName = x.Item3, - IsUnique = x.Item4 - }).ToArray(); + .Select(x => new DbIndexDefinition(x)).ToArray(); //in some databases there's an index (IX_Master) on the master column which needs to be dropped first var foundIndex = dbIndexes.FirstOrDefault(x => x.TableName.InvariantEquals("cmsTemplate") && x.ColumnName.InvariantEquals("master")); @@ -167,4 +161,4 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenThreeZe return path; } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/UpdateUniqueIdToHaveCorrectIndexType.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/UpdateUniqueIdToHaveCorrectIndexType.cs index dc8415a9f8..db1ae95081 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/UpdateUniqueIdToHaveCorrectIndexType.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/UpdateUniqueIdToHaveCorrectIndexType.cs @@ -15,13 +15,7 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenThreeZe public override void Up() { var indexes = SqlSyntax.GetDefinedIndexes(Context.Database) - .Select(x => new DbIndexDefinition() - { - TableName = x.Item1, - IndexName = x.Item2, - ColumnName = x.Item3, - IsUnique = x.Item4 - }).ToArray(); + .Select(x => new DbIndexDefinition(x)).ToArray(); // drop the index if it exists if (indexes.Any(x => x.IndexName.InvariantEquals("IX_umbracoNodeUniqueID"))) @@ -38,4 +32,4 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenThreeZe public override void Down() { } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/AddRelationTypeForMediaFolderOnDelete.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/AddRelationTypeForMediaFolderOnDelete.cs new file mode 100644 index 0000000000..6ba3d53303 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/AddRelationTypeForMediaFolderOnDelete.cs @@ -0,0 +1,37 @@ +using Umbraco.Core.Logging; +using Umbraco.Core.Persistence.SqlSyntax; + +namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenTwelveZero +{ + [Migration("7.12.0", 0, Constants.System.UmbracoMigrationName)] + public class AddRelationTypeForMediaFolderOnDelete : MigrationBase + { + public AddRelationTypeForMediaFolderOnDelete(ISqlSyntaxProvider sqlSyntax, ILogger logger) + : base(sqlSyntax, logger) + { + } + + public override void Up() + { + var relationTypeCount = Context.Database.ExecuteScalar("SELECT COUNT(*) FROM umbracoRelationType WHERE alias=@alias", + new { alias = Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteAlias }); + + if (relationTypeCount > 0) + return; + + var uniqueId = (Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteAlias + "____" + Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteName).ToGuid(); + Insert.IntoTable("umbracoRelationType").Row(new + { + typeUniqueId = uniqueId, + alias = Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteAlias, + name = Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteName, + childObjectType = Constants.ObjectTypes.MediaType, + parentObjectType = Constants.ObjectTypes.MediaType, + dual = false + }); + } + + public override void Down() + { } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/IncreaseLanguageIsoCodeColumnLength.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/IncreaseLanguageIsoCodeColumnLength.cs new file mode 100644 index 0000000000..d79ff24517 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/IncreaseLanguageIsoCodeColumnLength.cs @@ -0,0 +1,64 @@ +using System.Linq; +using Umbraco.Core.Logging; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; +using Umbraco.Core.Persistence.SqlSyntax; + +namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenTwelveZero +{ + [Migration("7.12.0", 2, Constants.System.UmbracoMigrationName)] + public class IncreaseLanguageIsoCodeColumnLength : MigrationBase + { + public IncreaseLanguageIsoCodeColumnLength(ISqlSyntaxProvider sqlSyntax, ILogger logger) + : base(sqlSyntax, logger) + { + } + + public override void Up() + { + Execute.Code(database => + { + var localContext = new LocalMigrationContext(Context.CurrentDatabaseProvider, database, SqlSyntax, Logger); + // Some people seem to have a constraint in their DB instead of an index, we'd need to drop that one + // See: https://our.umbraco.com/forum/using-umbraco-and-getting-started/93282-upgrade-from-711-to-712-fails + var constraints = SqlSyntax.GetConstraintsPerTable(database).Distinct().ToArray(); + if (constraints.Any(x => x.Item2.InvariantEquals("IX_umbracoLanguage_languageISOCode"))) + { + localContext.Delete.UniqueConstraint("IX_umbracoLanguage_languageISOCode").FromTable("umbracoLanguage"); + return localContext.GetSql(); + } + return null; + }); + + Execute.Code(database => + { + var localContext = new LocalMigrationContext(Context.CurrentDatabaseProvider, database, SqlSyntax, Logger); + + //Now check for indexes of that name and drop that if it exists + var dbIndexes = SqlSyntax.GetDefinedIndexes(database) + .Select(x => new DbIndexDefinition(x)).ToArray(); + if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_umbracoLanguage_languageISOCode"))) + { + localContext.Delete.Index("IX_umbracoLanguage_languageISOCode").OnTable("umbracoLanguage"); + return localContext.GetSql(); + } + return null; + }); + + Alter.Table("umbracoLanguage") + .AlterColumn("languageISOCode") + .AsString(14) + .Nullable(); + + Create.Index("IX_umbracoLanguage_languageISOCode") + .OnTable("umbracoLanguage") + .OnColumn("languageISOCode") + .Ascending() + .WithOptions() + .Unique(); + } + + public override void Down() + { + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/RenameTrueFalseField.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/RenameTrueFalseField.cs new file mode 100644 index 0000000000..4ff522bcf9 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/RenameTrueFalseField.cs @@ -0,0 +1,25 @@ +using Umbraco.Core.Logging; +using Umbraco.Core.Persistence.SqlSyntax; + +namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenTwelveZero +{ + [Migration("7.12.0", 0, Constants.System.UmbracoMigrationName)] + public class RenameTrueFalseField : MigrationBase + { + public RenameTrueFalseField(ISqlSyntaxProvider sqlSyntax, ILogger logger) : base(sqlSyntax, logger) + { + } + + public override void Up() + { + //rename the existing true/false field + Update.Table("umbracoNode").Set(new { text = "Checkbox" }).Where(new { id = -49 }); + } + + public override void Down() + { + //set the field back to true/false + Update.Table("umbracoNode").Set(new { text = "True/false" }).Where(new { id = -49 }); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/SetDefaultTagsStorageType.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/SetDefaultTagsStorageType.cs new file mode 100644 index 0000000000..8e13fa1013 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/SetDefaultTagsStorageType.cs @@ -0,0 +1,54 @@ +using System; +using System.Linq; +using Umbraco.Core.Logging; +using Umbraco.Core.Models.Rdbms; +using Umbraco.Core.Persistence.SqlSyntax; + +namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenTwelveZero +{ + /// + /// Set the default storageType for the tags datatype to "CSV" to ensure backwards compatibilty since the default is going to be JSON in new versions + /// + + [Migration("7.12.0", 1, Constants.System.UmbracoMigrationName)] + public class SetDefaultTagsStorageType: MigrationBase + { + public SetDefaultTagsStorageType(ISqlSyntaxProvider sqlSyntax, ILogger logger) : base(sqlSyntax, logger) + { + } + + public override void Up() + { + if (Context?.Database == null) return; + + // We need to get all datatypes with an alias of "umbraco.tags" so we can loop over them and set the missing values if needed + var datatypes = Context.Database.Fetch("SELECT * FROM cmsDataType"); + var tagsDataTypes = datatypes.Where(x => string.Equals(x.PropertyEditorAlias, Constants.PropertyEditors.TagsAlias, StringComparison.InvariantCultureIgnoreCase)); + var dataTypePreValues = Context.Database.Fetch("SELECT * FROM cmsDataTypePrevalues"); + + foreach (var datatype in tagsDataTypes) + { + // We need to check if the node has a "storageType" set + var result = dataTypePreValues.FirstOrDefault(x => + x.DataTypeNodeId == datatype.DataTypeId + && string.Equals(x.Alias, "storageType", StringComparison.InvariantCultureIgnoreCase)); + + // if the "storageType" has not been set we do so by adding a new row in the table for the nodid and set it + if (result == null) + { + Insert.IntoTable("CmsDataTypePrevalues").Row(new + { + datatypeNodeId = datatype.DataTypeId, + value = "Csv", + sortOrder = 2, + alias = "storageType" + }); + } + } + } + + public override void Down() + { + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/UpdateUmbracoConsent.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/UpdateUmbracoConsent.cs new file mode 100644 index 0000000000..c16ce55233 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwelveZero/UpdateUmbracoConsent.cs @@ -0,0 +1,24 @@ +using Umbraco.Core.Logging; +using Umbraco.Core.Persistence.SqlSyntax; + +namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenTwelveZero +{ + [Migration("7.12.0", 1, Constants.System.UmbracoMigrationName)] + public class UpdateUmbracoConsent : MigrationBase + { + public UpdateUmbracoConsent(ISqlSyntaxProvider sqlSyntax, ILogger logger) + : base(sqlSyntax, logger) + { + } + + public override void Up() + { + Alter.Table("umbracoConsent").AlterColumn("comment").AsString().Nullable(); + } + + public override void Down() + { + // We can't remove this in case we already have null values saved in the column + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwoZero/AddMissingForeignKeyForContentType.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwoZero/AddMissingForeignKeyForContentType.cs index 47b1f334d3..f5ae00d94e 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwoZero/AddMissingForeignKeyForContentType.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenTwoZero/AddMissingForeignKeyForContentType.cs @@ -48,14 +48,8 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenTwoZero //Some very old schemas don't have an index on the cmsContentType.nodeId column, I'm not actually sure when it was added but // it is absolutely required to exist in order to add other foreign keys and much better for perf, so we'll need to check it's existence // this came to light from this issue: http://issues.umbraco.org/issue/U4-4133 - var dbIndexes = SqlSyntaxContext.SqlSyntaxProvider.GetDefinedIndexes(Context.Database) - .Select(x => new DbIndexDefinition() - { - TableName = x.Item1, - IndexName = x.Item2, - ColumnName = x.Item3, - IsUnique = x.Item4 - }).ToArray(); + var dbIndexes = SqlSyntax.GetDefinedIndexes(Context.Database) + .Select(x => new DbIndexDefinition(x)).ToArray(); if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_cmsContentType")) == false) { Create.Index("IX_cmsContentType").OnTable("cmsContentType").OnColumn("nodeId").Ascending().WithOptions().Unique(); @@ -82,4 +76,4 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenTwoZero throw new DataLossException("Cannot downgrade from a version 7.2 database to a prior version, the database schema has already been modified"); } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSixTwoZero/AdditionalIndexesAndKeys.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSixTwoZero/AdditionalIndexesAndKeys.cs index 64f2970bdf..50ffdf7ede 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSixTwoZero/AdditionalIndexesAndKeys.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSixTwoZero/AdditionalIndexesAndKeys.cs @@ -20,13 +20,7 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSixTwoZero { var dbIndexes = SqlSyntax.GetDefinedIndexes(Context.Database) - .Select(x => new DbIndexDefinition() - { - TableName = x.Item1, - IndexName = x.Item2, - ColumnName = x.Item3, - IsUnique = x.Item4 - }).ToArray(); + .Select(x => new DbIndexDefinition(x)).ToArray(); //do not create any indexes if they already exist in the database @@ -118,4 +112,4 @@ DROP TABLE ""umbracoUserLogins_temp"""); } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/PetaPoco.cs b/src/Umbraco.Core/Persistence/PetaPoco.cs index 4692cb4b51..ae0044035d 100644 --- a/src/Umbraco.Core/Persistence/PetaPoco.cs +++ b/src/Umbraco.Core/Persistence/PetaPoco.cs @@ -337,7 +337,7 @@ namespace Umbraco.Core.Persistence _transaction = _sharedConnection.BeginTransaction(isolationLevel); } - catch (Exception e) + catch (Exception) { throw; } @@ -2494,9 +2494,9 @@ namespace Umbraco.Core.Persistence // Now do rhs if (_rhs != null) _rhs.Build(sb, args, this); - } + } - public Sql Where(string sql, params object[] args) + public Sql Where(string sql, params object[] args) { return Append(new Sql("WHERE (" + sql + ")", args)); } @@ -2509,9 +2509,14 @@ namespace Umbraco.Core.Persistence public Sql Select(params object[] columns) { return Append(new Sql("SELECT " + String.Join(", ", (from x in columns select x.ToString()).ToArray()))); - } + } - public Sql From(params object[] tables) + public Sql AndSelect(params object[] columns) + { + return Append(new Sql(", " + String.Join(", ", (from x in columns select x.ToString()).ToArray()))); + } + + public Sql From(params object[] tables) { return Append(new Sql("FROM " + String.Join(", ", (from x in tables select x.ToString()).ToArray()))); } diff --git a/src/Umbraco.Core/Persistence/PetaPocoSqlExtensions.cs b/src/Umbraco.Core/Persistence/PetaPocoSqlExtensions.cs index 090410782a..b9cb8801b9 100644 --- a/src/Umbraco.Core/Persistence/PetaPocoSqlExtensions.cs +++ b/src/Umbraco.Core/Persistence/PetaPocoSqlExtensions.cs @@ -1,6 +1,5 @@ using System; using System.Collections; -using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; @@ -15,6 +14,32 @@ namespace Umbraco.Core.Persistence /// public static class PetaPocoSqlExtensions { + /// + /// Defines the column to select in the generated SQL query + /// + /// + /// Sql object + /// Sql syntax + /// Columns to select + /// + public static Sql Select(this Sql sql, ISqlSyntaxProvider sqlSyntax, params Expression>[] fields) + { + return sql.Select(GetFieldNames(sqlSyntax, fields)); + } + + /// + /// Adds another set of field to select. This method must be used with "Select" when fecthing fields from different tables. + /// + /// + /// Sql object + /// Sql syntax + /// Additional columns to select + /// + public static Sql AndSelect(this Sql sql, ISqlSyntaxProvider sqlSyntax, params Expression>[] fields) + { + return sql.AndSelect(GetFieldNames(sqlSyntax, fields)); + } + [Obsolete("Use the overload specifying ISqlSyntaxProvider instead")] public static Sql From(this Sql sql) { @@ -55,6 +80,16 @@ namespace Umbraco.Core.Persistence return sqlSyntax.GetQuotedTableName(tableName) + "." + sqlSyntax.GetQuotedColumnName(fieldName); } + private static string[] GetFieldNames(ISqlSyntaxProvider sqlSyntax, params Expression>[] fields) + { + if (fields.Length == 0) + { + return new[] { string.Format("{0}.*", sqlSyntax.GetQuotedTableName(typeof(T).GetTableName())) }; + } + + return fields.Select(field => GetFieldName(field, sqlSyntax)).ToArray(); + } + [Obsolete("Use the overload specifying ISqlSyntaxProvider instead")] public static Sql WhereIn(this Sql sql, Expression> fieldSelector, IEnumerable values) { @@ -240,4 +275,4 @@ namespace Umbraco.Core.Persistence return attr == null || string.IsNullOrWhiteSpace(attr.Name) ? column.Name : attr.Name; } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/Repositories/AuditRepository.cs b/src/Umbraco.Core/Persistence/Repositories/AuditRepository.cs index 92eca1b832..f7c8b0d3cd 100644 --- a/src/Umbraco.Core/Persistence/Repositories/AuditRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/AuditRepository.cs @@ -96,7 +96,7 @@ namespace Umbraco.Core.Persistence.Repositories totalRecords = pagedResult.TotalItems; var pages = pagedResult.Items.Select( - dto => new AuditItem(dto.Id, dto.Comment, Enum.Parse(dto.Header), dto.UserId)).ToArray(); + dto => new AuditItem(dto.Id, dto.Comment, Enum.ParseOrNull(dto.Header) ?? AuditType.Custom, dto.UserId)).ToArray(); //Mapping the DateStamp for (int i = 0; i < pages.Length; i++) @@ -198,4 +198,4 @@ namespace Umbraco.Core.Persistence.Repositories return filteredSql; } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs index 4006ea26c9..404c32640a 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs @@ -242,7 +242,7 @@ namespace Umbraco.Core.Persistence.Repositories .Where(dto => dto.NodeObjectType == NodeObjectTypeId) .Where("umbracoNode." + SqlSyntax.GetQuotedColumnName("text") + " in (@names)", new { names = roleNames }); var existingRoles = Database.Fetch(existingSql).Select(x => x.Text); - var missingRoles = roleNames.Except(existingRoles); + var missingRoles = roleNames.Except(existingRoles, StringComparer.CurrentCultureIgnoreCase); var missingGroups = missingRoles.Select(x => new MemberGroup {Name = x}).ToArray(); if (UnitOfWork.Events.DispatchCancelable(SavingMemberGroup, this, new SaveEventArgs(missingGroups))) @@ -280,8 +280,8 @@ namespace Umbraco.Core.Persistence.Repositories //exist in the roleNames list, then determine which ones are not currently assigned. var mId = memberId; var found = currentlyAssigned.Where(x => x.MemberId == mId).ToArray(); - var assignedRoles = found.Where(x => roleNames.Contains(x.RoleName)).Select(x => x.RoleName); - var nonAssignedRoles = roleNames.Except(assignedRoles); + var assignedRoles = found.Where(x => roleNames.Contains(x.RoleName,StringComparer.CurrentCultureIgnoreCase)).Select(x => x.RoleName); + var nonAssignedRoles = roleNames.Except(assignedRoles, StringComparer.CurrentCultureIgnoreCase); foreach (var toAssign in nonAssignedRoles) { var groupId = rolesForNames.First(x => x.Text == toAssign).NodeId; diff --git a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs index 5701cd1008..fb3f7b56ee 100644 --- a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs @@ -186,6 +186,8 @@ UNION SELECT '4CountOfLockedOut' AS colName, COUNT(id) AS num FROM umbracoUser WHERE userNoConsole = 1 UNION SELECT '5CountOfInvited' AS colName, COUNT(id) AS num FROM umbracoUser WHERE lastLoginDate IS NULL AND userDisabled = 1 AND invitedDate IS NOT NULL +UNION +SELECT '6CountOfDisabled' AS colName, COUNT(id) AS num FROM umbracoUser WHERE userDisabled = 0 AND userNoConsole = 0 AND lastLoginDate IS NULL ORDER BY colName"; var result = Database.Fetch(sql); @@ -196,7 +198,8 @@ ORDER BY colName"; {UserState.Active, (int)result[1].num}, {UserState.Disabled, (int)result[2].num}, {UserState.LockedOut, (int)result[3].num}, - {UserState.Invited, (int)result[4].num} + {UserState.Invited, (int)result[4].num}, + {UserState.Inactive, (int) result[5].num} }; } @@ -765,6 +768,12 @@ ORDER BY colName"; sb.Append("(userDisabled = 0 AND userNoConsole = 0 AND lastLoginDate IS NOT NULL)"); appended = true; } + if (userState.Contains(UserState.Inactive)) + { + if (appended) sb.Append(" OR "); + sb.Append("(userDisabled = 0 AND userNoConsole = 0 AND lastLoginDate IS NULL)"); + appended = true; + } if (userState.Contains(UserState.Disabled)) { if (appended) sb.Append(" OR "); @@ -915,4 +924,4 @@ ORDER BY colName"; } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs b/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs index 366376b953..b856d1d77e 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs @@ -53,6 +53,8 @@ namespace Umbraco.Core.Persistence.SqlSyntax string TruncateTable { get; } string CreateConstraint { get; } string DeleteConstraint { get; } + + [Obsolete("This is never used, use the Format(ForeignKeyDefinition) instead")] string CreateForeignKeyConstraint { get; } string DeleteDefaultConstraint { get; } string FormatDateTime(DateTime date, bool includeTime = true); @@ -78,9 +80,32 @@ namespace Umbraco.Core.Persistence.SqlSyntax IEnumerable GetTablesInSchema(Database db); IEnumerable GetColumnsInSchema(Database db); + + /// + /// Returns all constraints defined in the database (Primary keys, foreign keys, unique constraints...) (does not include indexes) + /// + /// + /// + /// A Tuple containing: TableName, ConstraintName + /// IEnumerable> GetConstraintsPerTable(Database db); + + /// + /// Returns all constraints defined in the database (Primary keys, foreign keys, unique constraints...) (does not include indexes) + /// + /// + /// + /// A Tuple containing: TableName, ColumnName, ConstraintName + /// IEnumerable> GetConstraintsPerColumn(Database db); + /// + /// Returns all defined Indexes in the database excluding primary keys + /// + /// + /// + /// A Tuple containing: TableName, IndexName, ColumnName, IsUnique + /// IEnumerable> GetDefinedIndexes(Database db); } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs b/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs index ceb8e9c83f..c3ad8f48c4 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs @@ -78,6 +78,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax return list; } + /// public override IEnumerable> GetConstraintsPerTable(Database db) { List> list; @@ -100,6 +101,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax return list; } + /// public override IEnumerable> GetConstraintsPerColumn(Database db) { List> list; @@ -126,6 +128,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax return list; } + /// public override IEnumerable> GetDefinedIndexes(Database db) { List> list; @@ -401,4 +404,4 @@ ORDER BY TABLE_NAME, INDEX_NAME", return PetaPocoExtensions.EscapeAtSymbols(MySql.Data.MySqlClient.MySqlHelper.EscapeString(val)); } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/SqlCeSyntaxProvider.cs b/src/Umbraco.Core/Persistence/SqlSyntax/SqlCeSyntaxProvider.cs index 69ebe11a14..fd317c5a6b 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/SqlCeSyntaxProvider.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/SqlCeSyntaxProvider.cs @@ -10,7 +10,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax /// /// Represents an SqlSyntaxProvider for Sql Ce /// - [SqlSyntaxProviderAttribute(Constants.DatabaseProviders.SqlCe)] + [SqlSyntaxProvider(Constants.DatabaseProviders.SqlCe)] public class SqlCeSyntaxProvider : MicrosoftSqlSyntaxProviderBase { public SqlCeSyntaxProvider() @@ -123,40 +123,27 @@ namespace Umbraco.Core.Persistence.SqlSyntax item.IS_NULLABLE, item.DATA_TYPE)).ToList(); } + /// public override IEnumerable> GetConstraintsPerTable(Database db) { var items = db.Fetch("SELECT TABLE_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS"); - var indexItems = db.Fetch("SELECT TABLE_NAME, INDEX_NAME FROM INFORMATION_SCHEMA.INDEXES"); - return - items.Select(item => new Tuple(item.TABLE_NAME, item.CONSTRAINT_NAME)) - .Union( - indexItems.Select( - indexItem => new Tuple(indexItem.TABLE_NAME, indexItem.INDEX_NAME))) - .ToList(); + return items.Select(item => new Tuple(item.TABLE_NAME, item.CONSTRAINT_NAME)).ToList(); } + /// public override IEnumerable> GetConstraintsPerColumn(Database db) { - var items = - db.Fetch( - "SELECT CONSTRAINT_NAME, TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE"); - var indexItems = db.Fetch("SELECT INDEX_NAME, TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.INDEXES"); - return - items.Select( - item => new Tuple(item.TABLE_NAME, item.COLUMN_NAME, item.CONSTRAINT_NAME)) - .Union( - indexItems.Select( - indexItem => - new Tuple(indexItem.TABLE_NAME, indexItem.COLUMN_NAME, - indexItem.INDEX_NAME))).ToList(); + var items = db.Fetch("SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE"); + return items.Select(item => new Tuple(item.TABLE_NAME, item.COLUMN_NAME, item.CONSTRAINT_NAME)).ToList(); } + /// public override IEnumerable> GetDefinedIndexes(Database db) { var items = db.Fetch( @"SELECT TABLE_NAME, INDEX_NAME, COLUMN_NAME, [UNIQUE] FROM INFORMATION_SCHEMA.INDEXES -WHERE INDEX_NAME NOT LIKE 'PK_%' +WHERE PRIMARY_KEY=0 ORDER BY TABLE_NAME, INDEX_NAME"); return items.Select( @@ -215,4 +202,4 @@ ORDER BY TABLE_NAME, INDEX_NAME"); public override string DropIndex { get { return "DROP INDEX {1}.{0}"; } } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/SqlServerSyntaxProvider.cs b/src/Umbraco.Core/Persistence/SqlSyntax/SqlServerSyntaxProvider.cs index e5112cee49..a459b06861 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/SqlServerSyntaxProvider.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/SqlServerSyntaxProvider.cs @@ -1,185 +1,188 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; - -namespace Umbraco.Core.Persistence.SqlSyntax -{ - /// - /// Represents an SqlSyntaxProvider for Sql Server. - /// - [SqlSyntaxProvider(Constants.DatabaseProviders.SqlServer)] - public class SqlServerSyntaxProvider : MicrosoftSqlSyntaxProviderBase - { - /// - /// Gets/sets the version of the current SQL server instance - /// - internal SqlServerVersionName GetVersionName(Database database) - { - if (_versionName.HasValue) - return _versionName.Value; - - try - { - var version = database.ExecuteScalar("SELECT SERVERPROPERTY('productversion')"); - var firstPart = version.Split('.')[0]; - switch (firstPart) - { - case "13": - _versionName = SqlServerVersionName.V2016; - break; - case "12": - _versionName = SqlServerVersionName.V2014; - break; - case "11": - _versionName = SqlServerVersionName.V2012; - break; - case "10": - _versionName = SqlServerVersionName.V2008; - break; - case "9": - _versionName = SqlServerVersionName.V2005; - break; - case "8": - _versionName = SqlServerVersionName.V2000; - break; - case "7": - _versionName = SqlServerVersionName.V7; - break; - default: - _versionName = SqlServerVersionName.Other; - break; - } - } - catch (Exception) - { - _versionName = SqlServerVersionName.Invalid; - } - - return _versionName.Value; - } - - private SqlServerVersionName? _versionName; - - /// - /// SQL Server stores default values assigned to columns as constraints, it also stores them with named values, this is the only - /// server type that does this, therefore this method doesn't exist on any other syntax provider - /// - /// - public IEnumerable> GetDefaultConstraintsPerColumn(Database db) - { - var items = db.Fetch("SELECT TableName = t.Name, ColumnName = c.Name, dc.Name, dc.[Definition] FROM sys.tables t INNER JOIN sys.default_constraints dc ON t.object_id = dc.parent_object_id INNER JOIN sys.columns c ON dc.parent_object_id = c.object_id AND c.column_id = dc.parent_column_id INNER JOIN sys.schemas as s on t.[schema_id] = s.[schema_id] WHERE s.name = (SELECT SCHEMA_NAME())"); - return items.Select(x => new Tuple(x.TableName, x.ColumnName, x.Name, x.Definition)); - } - - public override IEnumerable GetTablesInSchema(Database db) - { - var items = db.Fetch("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = (SELECT SCHEMA_NAME())"); - return items.Select(x => x.TABLE_NAME).Cast().ToList(); - } - - public override IEnumerable GetColumnsInSchema(Database db) - { - var items = db.Fetch("SELECT TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = (SELECT SCHEMA_NAME())"); - return - items.Select( - item => - new ColumnInfo(item.TABLE_NAME, item.COLUMN_NAME, item.ORDINAL_POSITION, item.COLUMN_DEFAULT, - item.IS_NULLABLE, item.DATA_TYPE)).ToList(); - } - - public override IEnumerable> GetConstraintsPerTable(Database db) - { - var items = - db.Fetch( - "SELECT TABLE_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE WHERE TABLE_SCHEMA = (SELECT SCHEMA_NAME())"); - return items.Select(item => new Tuple(item.TABLE_NAME, item.CONSTRAINT_NAME)).ToList(); - } - - public override IEnumerable> GetConstraintsPerColumn(Database db) - { - var items = - db.Fetch( - "SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE TABLE_SCHEMA = (SELECT SCHEMA_NAME())"); - return items.Select(item => new Tuple(item.TABLE_NAME, item.COLUMN_NAME, item.CONSTRAINT_NAME)).ToList(); - } - - public override IEnumerable> GetDefinedIndexes(Database db) - { - var items = - db.Fetch( - @"select T.name as TABLE_NAME, I.name as INDEX_NAME, AC.Name as COLUMN_NAME, -CASE WHEN I.is_unique_constraint = 1 OR I.is_unique = 1 THEN 1 ELSE 0 END AS [UNIQUE] -from sys.tables as T inner join sys.indexes as I on T.[object_id] = I.[object_id] - inner join sys.index_columns as IC on IC.[object_id] = I.[object_id] and IC.[index_id] = I.[index_id] - inner join sys.all_columns as AC on IC.[object_id] = AC.[object_id] and IC.[column_id] = AC.[column_id] - inner join sys.schemas as S on T.[schema_id] = S.[schema_id] -WHERE S.name = (SELECT SCHEMA_NAME()) AND I.name NOT LIKE 'PK_%' -order by T.name, I.name"); - return items.Select(item => new Tuple(item.TABLE_NAME, item.INDEX_NAME, item.COLUMN_NAME, - item.UNIQUE == 1)).ToList(); - - } - - public override bool DoesTableExist(Database db, string tableName) - { - var result = - db.ExecuteScalar("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @TableName AND TABLE_SCHEMA = (SELECT SCHEMA_NAME())", - new { TableName = tableName }); - - return result > 0; - } - - public override string FormatColumnRename(string tableName, string oldName, string newName) - { - return string.Format(RenameColumn, tableName, oldName, newName); - } - - public override string FormatTableRename(string oldName, string newName) - { - return string.Format(RenameTable, oldName, newName); - } - - protected override string FormatIdentity(ColumnDefinition column) - { - return column.IsIdentity ? GetIdentityString(column) : string.Empty; - } - - public override Sql SelectTop(Sql sql, int top) - { - return new Sql(sql.SQL.Insert(sql.SQL.IndexOf(' '), " TOP " + top), sql.Arguments); - } - - private static string GetIdentityString(ColumnDefinition column) - { - return "IDENTITY(1,1)"; - } - - protected override string FormatSystemMethods(SystemMethods systemMethod) - { - switch (systemMethod) - { - case SystemMethods.NewGuid: - return "NEWID()"; - case SystemMethods.CurrentDateTime: - return "GETDATE()"; - //case SystemMethods.NewSequentialId: - // return "NEWSEQUENTIALID()"; - //case SystemMethods.CurrentUTCDateTime: - // return "GETUTCDATE()"; - } - - return null; - } - - public override string DeleteDefaultConstraint - { - get { return "ALTER TABLE [{0}] DROP CONSTRAINT [DF_{0}_{1}]"; } - } - - - public override string DropIndex { get { return "DROP INDEX {0} ON {1}"; } } - - public override string RenameColumn { get { return "sp_rename '{0}.{1}', '{2}', 'COLUMN'"; } } - } -} \ No newline at end of file +using System; +using System.Collections.Generic; +using System.Linq; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Persistence.SqlSyntax +{ + /// + /// Represents an SqlSyntaxProvider for Sql Server. + /// + [SqlSyntaxProvider(Constants.DatabaseProviders.SqlServer)] + public class SqlServerSyntaxProvider : MicrosoftSqlSyntaxProviderBase + { + /// + /// Gets/sets the version of the current SQL server instance + /// + internal SqlServerVersionName GetVersionName(Database database) + { + if (_versionName.HasValue) + return _versionName.Value; + + try + { + var version = database.ExecuteScalar("SELECT SERVERPROPERTY('productversion')"); + var firstPart = version.Split('.')[0]; + switch (firstPart) + { + case "13": + _versionName = SqlServerVersionName.V2016; + break; + case "12": + _versionName = SqlServerVersionName.V2014; + break; + case "11": + _versionName = SqlServerVersionName.V2012; + break; + case "10": + _versionName = SqlServerVersionName.V2008; + break; + case "9": + _versionName = SqlServerVersionName.V2005; + break; + case "8": + _versionName = SqlServerVersionName.V2000; + break; + case "7": + _versionName = SqlServerVersionName.V7; + break; + default: + _versionName = SqlServerVersionName.Other; + break; + } + } + catch (Exception) + { + _versionName = SqlServerVersionName.Invalid; + } + + return _versionName.Value; + } + + private SqlServerVersionName? _versionName; + + /// + /// SQL Server stores default values assigned to columns as constraints, it also stores them with named values, this is the only + /// server type that does this, therefore this method doesn't exist on any other syntax provider + /// + /// + public IEnumerable> GetDefaultConstraintsPerColumn(Database db) + { + var items = db.Fetch("SELECT TableName = t.Name, ColumnName = c.Name, dc.Name, dc.[Definition] FROM sys.tables t INNER JOIN sys.default_constraints dc ON t.object_id = dc.parent_object_id INNER JOIN sys.columns c ON dc.parent_object_id = c.object_id AND c.column_id = dc.parent_column_id INNER JOIN sys.schemas as s on t.[schema_id] = s.[schema_id] WHERE s.name = (SELECT SCHEMA_NAME())"); + return items.Select(x => new Tuple(x.TableName, x.ColumnName, x.Name, x.Definition)); + } + + public override IEnumerable GetTablesInSchema(Database db) + { + var items = db.Fetch("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = (SELECT SCHEMA_NAME())"); + return items.Select(x => x.TABLE_NAME).Cast().ToList(); + } + + public override IEnumerable GetColumnsInSchema(Database db) + { + var items = db.Fetch("SELECT TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = (SELECT SCHEMA_NAME())"); + return + items.Select( + item => + new ColumnInfo(item.TABLE_NAME, item.COLUMN_NAME, item.ORDINAL_POSITION, item.COLUMN_DEFAULT, + item.IS_NULLABLE, item.DATA_TYPE)).ToList(); + } + + /// + public override IEnumerable> GetConstraintsPerTable(Database db) + { + var items = + db.Fetch( + "SELECT TABLE_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE WHERE TABLE_SCHEMA = (SELECT SCHEMA_NAME())"); + return items.Select(item => new Tuple(item.TABLE_NAME, item.CONSTRAINT_NAME)).ToList(); + } + + /// + public override IEnumerable> GetConstraintsPerColumn(Database db) + { + var items = + db.Fetch( + "SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE TABLE_SCHEMA = (SELECT SCHEMA_NAME())"); + return items.Select(item => new Tuple(item.TABLE_NAME, item.COLUMN_NAME, item.CONSTRAINT_NAME)).ToList(); + } + + /// + public override IEnumerable> GetDefinedIndexes(Database db) + { + var items = + db.Fetch( + @"select T.name as TABLE_NAME, I.name as INDEX_NAME, AC.Name as COLUMN_NAME, +CASE WHEN I.is_unique_constraint = 1 OR I.is_unique = 1 THEN 1 ELSE 0 END AS [UNIQUE] +from sys.tables as T inner join sys.indexes as I on T.[object_id] = I.[object_id] + inner join sys.index_columns as IC on IC.[object_id] = I.[object_id] and IC.[index_id] = I.[index_id] + inner join sys.all_columns as AC on IC.[object_id] = AC.[object_id] and IC.[column_id] = AC.[column_id] + inner join sys.schemas as S on T.[schema_id] = S.[schema_id] +WHERE S.name = (SELECT SCHEMA_NAME()) AND I.is_primary_key = 0 +order by T.name, I.name"); + return items.Select(item => new Tuple(item.TABLE_NAME, item.INDEX_NAME, item.COLUMN_NAME, + item.UNIQUE == 1)).ToList(); + + } + + public override bool DoesTableExist(Database db, string tableName) + { + var result = + db.ExecuteScalar("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @TableName AND TABLE_SCHEMA = (SELECT SCHEMA_NAME())", + new { TableName = tableName }); + + return result > 0; + } + + public override string FormatColumnRename(string tableName, string oldName, string newName) + { + return string.Format(RenameColumn, tableName, oldName, newName); + } + + public override string FormatTableRename(string oldName, string newName) + { + return string.Format(RenameTable, oldName, newName); + } + + protected override string FormatIdentity(ColumnDefinition column) + { + return column.IsIdentity ? GetIdentityString(column) : string.Empty; + } + + public override Sql SelectTop(Sql sql, int top) + { + return new Sql(sql.SQL.Insert(sql.SQL.IndexOf(' '), " TOP " + top), sql.Arguments); + } + + private static string GetIdentityString(ColumnDefinition column) + { + return "IDENTITY(1,1)"; + } + + protected override string FormatSystemMethods(SystemMethods systemMethod) + { + switch (systemMethod) + { + case SystemMethods.NewGuid: + return "NEWID()"; + case SystemMethods.CurrentDateTime: + return "GETDATE()"; + //case SystemMethods.NewSequentialId: + // return "NEWSEQUENTIALID()"; + //case SystemMethods.CurrentUTCDateTime: + // return "GETUTCDATE()"; + } + + return null; + } + + public override string DeleteDefaultConstraint + { + get { return "ALTER TABLE [{0}] DROP CONSTRAINT [DF_{0}_{1}]"; } + } + + + public override string DropIndex { get { return "DROP INDEX {0} ON {1}"; } } + + public override string RenameColumn { get { return "sp_rename '{0}.{1}', '{2}', 'COLUMN'"; } } + } +} diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs b/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs index a2baa8132d..3f31809289 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs @@ -537,10 +537,11 @@ namespace Umbraco.Core.Persistence.SqlSyntax public virtual string CreateConstraint { get { return "ALTER TABLE {0} ADD CONSTRAINT {1} {2} ({3})"; } } public virtual string DeleteConstraint { get { return "ALTER TABLE {0} DROP CONSTRAINT {1}"; } } + public virtual string CreateForeignKeyConstraint { get { return "ALTER TABLE {0} ADD CONSTRAINT {1} FOREIGN KEY ({2}) REFERENCES {3} ({4}){5}{6}"; } } public virtual string ConvertIntegerToOrderableString { get { return "REPLACE(STR({0}, 8), SPACE(1), '0')"; } } public virtual string ConvertDateToOrderableString { get { return "CONVERT(nvarchar, {0}, 102)"; } } public virtual string ConvertDecimalToOrderableString { get { return "REPLACE(STR({0}, 20, 9), SPACE(1), '0')"; } } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderExtensions.cs b/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderExtensions.cs index f0bafdacf7..991ad79692 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderExtensions.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderExtensions.cs @@ -9,13 +9,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax public static IEnumerable GetDefinedIndexesDefinitions(this ISqlSyntaxProvider sql, Database db) { return sql.GetDefinedIndexes(db) - .Select(x => new DbIndexDefinition() - { - TableName = x.Item1, - IndexName = x.Item2, - ColumnName = x.Item3, - IsUnique = x.Item4 - }).ToArray(); + .Select(x => new DbIndexDefinition(x)).ToArray(); } /// @@ -57,4 +51,4 @@ namespace Umbraco.Core.Persistence.SqlSyntax In, NotIn } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/PluginManager.cs b/src/Umbraco.Core/PluginManager.cs index 44d505d1d2..ceb9b2d7d1 100644 --- a/src/Umbraco.Core/PluginManager.cs +++ b/src/Umbraco.Core/PluginManager.cs @@ -343,7 +343,7 @@ namespace Umbraco.Core { return ReadCache(); } - catch (Exception ex) + catch (Exception) { try { @@ -519,7 +519,7 @@ namespace Umbraco.Core { return new FileStream(path, fileMode, fileAccess, fileShare); } - catch (Exception ex) + catch (Exception) { if (--attempts == 0) throw; diff --git a/src/Umbraco.Core/PropertyEditors/SupportTagsAttribute.cs b/src/Umbraco.Core/PropertyEditors/SupportTagsAttribute.cs index 3ff124d345..c0238e16e8 100644 --- a/src/Umbraco.Core/PropertyEditors/SupportTagsAttribute.cs +++ b/src/Umbraco.Core/PropertyEditors/SupportTagsAttribute.cs @@ -31,7 +31,7 @@ namespace Umbraco.Core.PropertyEditors Delimiter = ","; ReplaceTags = true; TagGroup = "default"; - StorageType = TagCacheStorageType.Csv; + StorageType = TagCacheStorageType.Json; } /// @@ -59,4 +59,4 @@ namespace Umbraco.Core.PropertyEditors /// public string TagGroup { get; set; } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/FlexibleDropdownPropertyValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/FlexibleDropdownPropertyValueConverter.cs new file mode 100644 index 0000000000..ebacf15255 --- /dev/null +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/FlexibleDropdownPropertyValueConverter.cs @@ -0,0 +1,138 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using Umbraco.Core.Models.PublishedContent; +using Umbraco.Core.Services; + +namespace Umbraco.Core.PropertyEditors.ValueConverters +{ + [DefaultPropertyValueConverter] + public class FlexibleDropdownPropertyValueConverter : PropertyValueConverterBase, IPropertyValueConverterMeta + { + private static readonly ConcurrentDictionary Storages = new ConcurrentDictionary(); + private readonly IDataTypeService _dataTypeService; + + // TODO: Remove this ctor in v8 - the other one will be usable via IoC + public FlexibleDropdownPropertyValueConverter() : this(ApplicationContext.Current.Services.DataTypeService) + { } + + public FlexibleDropdownPropertyValueConverter(IDataTypeService dataTypeService) + { + Mandate.ParameterNotNull(dataTypeService, "dataTypeService"); + _dataTypeService = dataTypeService; + } + + public override bool IsConverter(PublishedPropertyType propertyType) + { + return propertyType.PropertyEditorAlias.Equals(Constants.PropertyEditors.DropDownListFlexibleAlias); + } + + public override object ConvertDataToSource(PublishedPropertyType propertyType, object source, bool preview) + { + return source != null + ? source.ToString().Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) + : null; + } + + public override object ConvertSourceToObject(PublishedPropertyType propertyType, object source, bool preview) + { + if (source == null) + { + return null; + } + + var isMultipleDataType = IsMultipleDataType(propertyType.DataTypeId, propertyType.PropertyEditorAlias); + + var selectedValues = (string[]) source; + + if (selectedValues.Any()) + { + if (isMultipleDataType) + return selectedValues; + + return selectedValues.First(); + } + + return isMultipleDataType ? source : string.Empty; + } + + public Type GetPropertyValueType(PublishedPropertyType propertyType) + { + return IsMultipleDataType(propertyType.DataTypeId, propertyType.PropertyEditorAlias) + ? typeof(IEnumerable) + : typeof(string); + } + + public PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType, + PropertyCacheValue cacheValue) + { + PropertyCacheLevel returnLevel; + switch (cacheValue) + { + case PropertyCacheValue.Object: + returnLevel = PropertyCacheLevel.ContentCache; + break; + case PropertyCacheValue.Source: + returnLevel = PropertyCacheLevel.Content; + break; + case PropertyCacheValue.XPath: + returnLevel = PropertyCacheLevel.Content; + break; + default: + returnLevel = PropertyCacheLevel.None; + break; + } + + return returnLevel; + } + + /// + /// Determines if the "enable multiple choice" prevalue has been ticked. + /// + /// The ID of this particular datatype instance. + /// The property editor alias. + /// true if the data type has been configured to return multiple values. + /// + private bool IsMultipleDataType(int dataTypeId, string propertyEditorAlias) + { + // GetPreValuesCollectionByDataTypeId is cached at repository level; + // still, the collection is deep-cloned so this is kinda expensive, + // better to cache here + trigger refresh in DataTypeCacheRefresher + return Storages.GetOrAdd(dataTypeId, id => + { + var preVals = _dataTypeService.GetPreValuesCollectionByDataTypeId(id).PreValuesAsDictionary; + + if (preVals.ContainsKey("multiple")) + { + var preValue = preVals + .FirstOrDefault(x => string.Equals(x.Key, "multiple", + StringComparison.InvariantCultureIgnoreCase)) + .Value; + + return preValue != null && preValue.Value.TryConvertTo().Result; + } + + //in some odd cases, the pre-values in the db won't exist but their default pre-values contain this key so check there + var propertyEditor = PropertyEditorResolver.Current.GetByAlias(propertyEditorAlias); + if (propertyEditor != null) + { + var preValue = propertyEditor.DefaultPreValues + .FirstOrDefault(x => string.Equals(x.Key, "multiple", + StringComparison + .InvariantCultureIgnoreCase)) + .Value; + + return preValue != null && preValue.TryConvertTo().Result; + } + + return false; + }); + } + + internal static void ClearCaches() + { + Storages.Clear(); + } + } +} diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/GridValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/GridValueConverter.cs index 85599767d6..e169fa4506 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/GridValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/GridValueConverter.cs @@ -40,12 +40,13 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters //TODO: Change all singleton access to use ctor injection in v8!!! //TODO: That would mean that property value converters would need to be request lifespan, hrm.... + bool isDebug = HttpContext.Current != null && HttpContext.Current.IsDebuggingEnabled; var gridConfig = UmbracoConfig.For.GridConfig( ApplicationContext.Current.ProfilingLogger.Logger, ApplicationContext.Current.ApplicationCache.RuntimeCache, new DirectoryInfo(IOHelper.MapPath(SystemDirectories.AppPlugins)), new DirectoryInfo(IOHelper.MapPath(SystemDirectories.Config)), - HttpContext.Current.IsDebuggingEnabled); + isDebug); var sections = GetArray(obj, "sections"); foreach (var section in sections.Cast()) @@ -112,4 +113,4 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/MultipleTextStringValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/MultipleTextStringValueConverter.cs index e6e638a8d5..0344bc4130 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/MultipleTextStringValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/MultipleTextStringValueConverter.cs @@ -40,7 +40,7 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters // splitting by newline // // RS: SD/Stephan Please consider post before deciding to remove - //// https://our.umbraco.org/forum/contributing-to-umbraco-cms/76989-keep-the-xml-values-in-the-multipletextstringvalueconverter + //// https://our.umbraco.com/forum/contributing-to-umbraco-cms/76989-keep-the-xml-values-in-the-multipletextstringvalueconverter var values = new List(); var pos = sourceString.IndexOf("", StringComparison.Ordinal); while (pos >= 0) diff --git a/src/Umbraco.Core/Security/BackOfficeUserManager.cs b/src/Umbraco.Core/Security/BackOfficeUserManager.cs index 2cb026ad3e..83db1a8904 100644 --- a/src/Umbraco.Core/Security/BackOfficeUserManager.cs +++ b/src/Umbraco.Core/Security/BackOfficeUserManager.cs @@ -57,7 +57,7 @@ namespace Umbraco.Core.Security [Obsolete("Use the overload specifying all dependencies instead")] public static BackOfficeUserManager Create( IdentityFactoryOptions options, - IUserService userService, + IUserService userService, IExternalLoginService externalLoginService, MembershipProviderBase membershipProvider) { @@ -94,7 +94,7 @@ namespace Umbraco.Core.Security manager.InitUserManager(manager, membershipProvider, contentSectionConfig, options); return manager; } - + [EditorBrowsable(EditorBrowsableState.Never)] [Obsolete("Use the overload specifying all dependencies instead")] public static BackOfficeUserManager Create( @@ -129,7 +129,7 @@ namespace Umbraco.Core.Security [Obsolete("Use the overload specifying all dependencies instead")] protected void InitUserManager( BackOfficeUserManager manager, - MembershipProviderBase membershipProvider, + MembershipProviderBase membershipProvider, IdentityFactoryOptions options) { InitUserManager(manager, membershipProvider, UmbracoConfig.For.UmbracoSettings().Content, options); @@ -216,8 +216,8 @@ namespace Umbraco.Core.Security /// /// protected void InitUserManager( - BackOfficeUserManager manager, - MembershipProviderBase membershipProvider, + BackOfficeUserManager manager, + MembershipProviderBase membershipProvider, IDataProtectionProvider dataProtectionProvider, IContentSection contentSectionConfig) { @@ -233,7 +233,7 @@ namespace Umbraco.Core.Security //use a custom hasher based on our membership provider manager.PasswordHasher = GetDefaultPasswordHasher(membershipProvider); - + if (dataProtectionProvider != null) { manager.UserTokenProvider = new DataProtectorTokenProvider(dataProtectionProvider.Create("ASP.NET Identity")); @@ -373,7 +373,7 @@ namespace Umbraco.Core.Security } #region Overrides for password logic - + /// /// Logic used to validate a username and password /// @@ -484,6 +484,7 @@ namespace Umbraco.Core.Security /// protected override async Task UpdatePassword(IUserPasswordStore passwordStore, T user, string newPassword) { + user.LastPasswordChangeDateUtc = DateTime.UtcNow; var userAwarePasswordHasher = PasswordHasher as IUserAwarePasswordHasher; if (userAwarePasswordHasher == null) return await base.UpdatePassword(passwordStore, user, newPassword); @@ -496,7 +497,7 @@ namespace Umbraco.Core.Security await UpdateSecurityStampInternal(user); return IdentityResult.Success; - + } /// @@ -534,15 +535,22 @@ namespace Umbraco.Core.Security #endregion - public override Task SetLockoutEndDateAsync(int userId, DateTimeOffset lockoutEnd) + public override async Task SetLockoutEndDateAsync(int userId, DateTimeOffset lockoutEnd) { - var result = base.SetLockoutEndDateAsync(userId, lockoutEnd); + var result = await base.SetLockoutEndDateAsync(userId, lockoutEnd); // The way we unlock is by setting the lockoutEnd date to the current datetime - if (result.Result.Succeeded && lockoutEnd >= DateTimeOffset.UtcNow) + if (result.Succeeded && lockoutEnd >= DateTimeOffset.UtcNow) + { RaiseAccountLockedEvent(userId); + } else + { RaiseAccountUnlockedEvent(userId); + //Resets the login attempt fails back to 0 when unlock is clicked + await ResetAccessFailedCountAsync(userId); + + } return result; } @@ -564,16 +572,39 @@ namespace Umbraco.Core.Security RaiseResetAccessFailedCountEvent(userId); return await UpdateAsync(user); } - - - public override Task AccessFailedAsync(int userId) + + /// + /// Overides the microsoft ASP.NET user managment method + /// + /// + /// + /// returns a Async Task + /// + /// + /// Doesnt set fail attempts back to 0 + /// + public override async Task AccessFailedAsync(int userId) { - var result = base.AccessFailedAsync(userId); + var lockoutStore = (IUserLockoutStore)Store; + var user = await FindByIdAsync(userId); + if (user == null) + throw new InvalidOperationException("No user found by user id " + userId); + + var count = await lockoutStore.IncrementAccessFailedCountAsync(user); + + if (count >= MaxFailedAccessAttemptsBeforeLockout) + { + await lockoutStore.SetLockoutEndDateAsync(user, DateTimeOffset.UtcNow.Add(DefaultAccountLockoutTimeSpan)); + //NOTE: in normal aspnet identity this would do set the number of failed attempts back to 0 + //here we are persisting the value for the back office + } + + var result = await UpdateAsync(user); //Slightly confusing: this will return a Success if we successfully update the AccessFailed count - if (result.Result.Succeeded) + if (result.Succeeded) RaiseLoginFailedEvent(userId); return result; diff --git a/src/Umbraco.Core/Security/BackOfficeUserStore.cs b/src/Umbraco.Core/Security/BackOfficeUserStore.cs index 9db8347040..e0b91ce175 100644 --- a/src/Umbraco.Core/Security/BackOfficeUserStore.cs +++ b/src/Umbraco.Core/Security/BackOfficeUserStore.cs @@ -622,7 +622,7 @@ namespace Umbraco.Core.Security private bool UpdateMemberProperties(IUser user, BackOfficeIdentityUser identityUser) { var anythingChanged = false; - + //don't assign anything if nothing has changed as this will trigger the track changes of the model if (identityUser.IsPropertyDirty("LastLoginDateUtc") @@ -632,6 +632,13 @@ namespace Umbraco.Core.Security anythingChanged = true; user.LastLoginDate = identityUser.LastLoginDateUtc.Value.ToLocalTime(); } + if (identityUser.IsPropertyDirty("LastPasswordChangeDateUtc") + || (user.LastPasswordChangeDate != default(DateTime) && identityUser.LastPasswordChangeDateUtc.HasValue == false) + || identityUser.LastPasswordChangeDateUtc.HasValue && user.LastPasswordChangeDate.ToUniversalTime() != identityUser.LastPasswordChangeDateUtc.Value) + { + anythingChanged = true; + user.LastPasswordChangeDate = identityUser.LastPasswordChangeDateUtc.Value.ToLocalTime(); + } if (identityUser.IsPropertyDirty("EmailConfirmed") || (user.EmailConfirmedDate.HasValue && user.EmailConfirmedDate.Value != default(DateTime) && identityUser.EmailConfirmed == false) || ((user.EmailConfirmedDate.HasValue == false || user.EmailConfirmedDate.Value == default(DateTime)) && identityUser.EmailConfirmed)) @@ -765,4 +772,4 @@ namespace Umbraco.Core.Security return Task.FromResult(false); } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Security/MachineKeyGenerator.cs b/src/Umbraco.Core/Security/MachineKeyGenerator.cs index 9dd06f44bd..546429b72c 100644 --- a/src/Umbraco.Core/Security/MachineKeyGenerator.cs +++ b/src/Umbraco.Core/Security/MachineKeyGenerator.cs @@ -26,8 +26,6 @@ namespace Umbraco.Core.Security validation=""HMACSHA256"" decryption=""AES"" />"; - var Xxx = 3; - return string.Format(c, GenerateAESDecryptionKey(), GenerateHMACSHA256ValidationKey()); } @@ -83,4 +81,4 @@ namespace Umbraco.Core.Security return sb.ToString(); } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Services/ConsentService.cs b/src/Umbraco.Core/Services/ConsentService.cs index 674d042e1f..7f9b6b36ca 100644 --- a/src/Umbraco.Core/Services/ConsentService.cs +++ b/src/Umbraco.Core/Services/ConsentService.cs @@ -10,7 +10,7 @@ using Umbraco.Core.Persistence.UnitOfWork; namespace Umbraco.Core.Services { /// - /// Implements . + /// Implements . /// internal class ConsentService : ScopeRepositoryService, IConsentService { diff --git a/src/Umbraco.Core/Services/ContentService.cs b/src/Umbraco.Core/Services/ContentService.cs index 33131bbb52..2f8b9c8340 100644 --- a/src/Umbraco.Core/Services/ContentService.cs +++ b/src/Umbraco.Core/Services/ContentService.cs @@ -1872,7 +1872,7 @@ namespace Umbraco.Core.Services } copyEventArgs.CanCancel = false; uow.Events.Dispatch(Copied, this, copyEventArgs); - Audit(uow, AuditType.Copy, "Copy Content performed by user", content.WriterId, content.Id); + Audit(uow, AuditType.Copy, "Copy Content performed by user", userId, content.Id); uow.Commit(); } diff --git a/src/Umbraco.Core/Services/FileService.cs b/src/Umbraco.Core/Services/FileService.cs index 916c036a69..fc1bbf34d2 100644 --- a/src/Umbraco.Core/Services/FileService.cs +++ b/src/Umbraco.Core/Services/FileService.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; +using System.Text; using System.Text.RegularExpressions; using Umbraco.Core.Events; using Umbraco.Core.IO; @@ -291,6 +292,14 @@ namespace Umbraco.Core.Services {"ContentTypeAlias", contentTypeAlias}, }; + // check that the template hasn't been created on disk before creating the content type + // if it exists, set the new template content to the existing file content + string content = GetViewContent(contentTypeAlias); + if (content != null) + { + template.Content = content; + } + using (var uow = UowProvider.GetUnitOfWork()) { var saveEventArgs = new SaveEventArgs(template, true, evtMsgs, additionalData); @@ -312,17 +321,29 @@ namespace Umbraco.Core.Services return Attempt.Succeed(new OperationStatus(template, OperationStatusType.Success, evtMsgs)); } + /// + /// Create a new template, setting the content if a view exists in the filesystem + /// + /// + /// + /// + /// + /// public ITemplate CreateTemplateWithIdentity(string name, string content, ITemplate masterTemplate = null, int userId = 0) { + // file might already be on disk, if so grab the content to avoid overwriting var template = new Template(name, name) { - Content = content + Content = GetViewContent(name) ?? content }; + if (masterTemplate != null) { template.SetMasterTemplate(masterTemplate); } + SaveTemplate(template, userId); + return template; } @@ -1076,6 +1097,33 @@ namespace Umbraco.Core.Services return GetPartialViewMacroSnippetContent(snippetName, PartialViewType.PartialViewMacro); } + private string GetViewContent(string filename) + { + if (filename.IsNullOrWhiteSpace()) + throw new ArgumentNullException(nameof(filename)); + + if (filename.EndsWith(".cshtml") == false) + { + filename = $"{filename}.cshtml"; + } + + using (var uow = UowProvider.GetUnitOfWork()) + { + var repository = RepositoryFactory.CreateTemplateRepository(uow); + var stream = repository.GetFileContentStream(filename); + + if (stream == null) + { + return null; + } + + using (var reader = new StreamReader(stream, Encoding.UTF8, true)) + { + return reader.ReadToEnd().Trim(); + } + } + } + private string GetPartialViewMacroSnippetContent(string snippetName, PartialViewType partialViewType) { if (snippetName.IsNullOrWhiteSpace()) @@ -1265,4 +1313,4 @@ namespace Umbraco.Core.Services #endregion } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Services/IFileService.cs b/src/Umbraco.Core/Services/IFileService.cs index 74de0861d8..b798b2c5ae 100644 --- a/src/Umbraco.Core/Services/IFileService.cs +++ b/src/Umbraco.Core/Services/IFileService.cs @@ -428,4 +428,4 @@ namespace Umbraco.Core.Services /// The size of the partial view. long GetPartialViewFileSize(string filepath); } -} \ No newline at end of file +} diff --git a/src/Umbraco.Core/Services/IRelationService.cs b/src/Umbraco.Core/Services/IRelationService.cs index 5fb1f3c8cc..6006a6b7c3 100644 --- a/src/Umbraco.Core/Services/IRelationService.cs +++ b/src/Umbraco.Core/Services/IRelationService.cs @@ -189,6 +189,15 @@ namespace Umbraco.Core.Services IEnumerable relations, bool loadBaseType = false); + /// + /// Relates two objects by their entity Ids. + /// + /// Id of the parent + /// Id of the child + /// The type of relation to create + /// The created + IRelation Relate(int parentId, int childId, IRelationType relationType); + /// /// Relates two objects that are based on the interface. /// @@ -198,6 +207,15 @@ namespace Umbraco.Core.Services /// The created IRelation Relate(IUmbracoEntity parent, IUmbracoEntity child, IRelationType relationType); + /// + /// Relates two objects by their entity Ids. + /// + /// Id of the parent + /// Id of the child + /// Alias of the type of relation to create + /// The created + IRelation Relate(int parentId, int childId, string relationTypeAlias); + /// /// Relates two objects that are based on the interface. /// diff --git a/src/Umbraco.Core/Services/RelationService.cs b/src/Umbraco.Core/Services/RelationService.cs index b05e8e2391..ccf86d425d 100644 --- a/src/Umbraco.Core/Services/RelationService.cs +++ b/src/Umbraco.Core/Services/RelationService.cs @@ -394,6 +394,39 @@ namespace Umbraco.Core.Services } } + /// + /// Relates two objects by their entity Ids. + /// + /// Id of the parent + /// Id of the child + /// The type of relation to create + /// The created + public IRelation Relate(int parentId, int childId, IRelationType relationType) + { + // Ensure that the RelationType has an indentity before using it to relate two entities + if (relationType.HasIdentity == false) + Save(relationType); + + var relation = new Relation(parentId, childId, relationType); + + using (var uow = UowProvider.GetUnitOfWork()) + { + var saveEventArgs = new SaveEventArgs(relation); + if (uow.Events.DispatchCancelable(SavingRelation, this, saveEventArgs)) + { + uow.Commit(); + return relation; + } + + var repository = RepositoryFactory.CreateRelationRepository(uow); + repository.AddOrUpdate(relation); + uow.Commit(); + saveEventArgs.CanCancel = false; + uow.Events.Dispatch(SavedRelation, this, saveEventArgs); + return relation; + } + } + /// /// Relates two objects that are based on the interface. /// @@ -403,28 +436,23 @@ namespace Umbraco.Core.Services /// The created public IRelation Relate(IUmbracoEntity parent, IUmbracoEntity child, IRelationType relationType) { - //Ensure that the RelationType has an indentity before using it to relate two entities - if (relationType.HasIdentity == false) - Save(relationType); + return Relate(parent.Id, child.Id, relationType); + } - var relation = new Relation(parent.Id, child.Id, relationType); + /// + /// Relates two objects by their entity Ids. + /// + /// Id of the parent + /// Id of the child + /// Alias of the type of relation to create + /// The created + public IRelation Relate(int parentId, int childId, string relationTypeAlias) + { + var relationType = GetRelationTypeByAlias(relationTypeAlias); + if (relationType == null || string.IsNullOrEmpty(relationType.Alias)) + throw new ArgumentNullException(string.Format("No RelationType with Alias '{0}' exists.", relationTypeAlias)); - using (var uow = UowProvider.GetUnitOfWork()) - { - var repository = RepositoryFactory.CreateRelationRepository(uow); - var saveEventArgs = new SaveEventArgs(relation); - if (uow.Events.DispatchCancelable(SavingRelation, this, saveEventArgs)) - { - uow.Commit(); - return relation; - } - - repository.AddOrUpdate(relation); - uow.Commit(); - saveEventArgs.CanCancel = false; - uow.Events.Dispatch(SavedRelation, this, saveEventArgs); - return relation; - } + return Relate(parentId, childId, relationType); } /// @@ -440,23 +468,7 @@ namespace Umbraco.Core.Services if (relationType == null || string.IsNullOrEmpty(relationType.Alias)) throw new ArgumentNullException(string.Format("No RelationType with Alias '{0}' exists.", relationTypeAlias)); - var relation = new Relation(parent.Id, child.Id, relationType); - - using (var uow = UowProvider.GetUnitOfWork()) - { - var saveEventArgs = new SaveEventArgs(relation); - if (uow.Events.DispatchCancelable(SavingRelation, this, saveEventArgs)) - { - uow.Commit(); - return relation; - } - var repository = RepositoryFactory.CreateRelationRepository(uow); - repository.AddOrUpdate(relation); - uow.Commit(); - saveEventArgs.CanCancel = false; - uow.Events.Dispatch(SavedRelation, this, saveEventArgs); - return relation; - } + return Relate(parent.Id, child.Id, relationType); } /// diff --git a/src/Umbraco.Core/Services/UserService.cs b/src/Umbraco.Core/Services/UserService.cs index 9b52af6827..2c5050181c 100644 --- a/src/Umbraco.Core/Services/UserService.cs +++ b/src/Umbraco.Core/Services/UserService.cs @@ -207,7 +207,7 @@ namespace Umbraco.Core.Services { return repository.GetByUsername(username, includeSecurityData: true); } - catch (DbException ex) + catch (DbException) { //we need to handle this one specific case which is when we are upgrading to 7.7 since the user group //tables don't exist yet. This is the 'easiest' way to deal with this without having to create special @@ -699,7 +699,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.GetUnitOfWork(readOnly: true)) { var repository = RepositoryFactory.CreateUserRepository(uow); - return repository.GetPagedResultsByQuery(null, pageIndex, pageSize, out totalRecords, member => member.Username); + return repository.GetPagedResultsByQuery(null, pageIndex, pageSize, out totalRecords, member => member.Name); } } @@ -786,7 +786,7 @@ namespace Umbraco.Core.Services var result = repository.Get(id); return result; } - catch (DbException ex) + catch (DbException) { //we need to handle this one specific case which is when we are upgrading to 7.7 since the user group //tables don't exist yet. This is the 'easiest' way to deal with this without having to create special diff --git a/src/Umbraco.Core/Strategies/RelateOnTrashHandler.cs b/src/Umbraco.Core/Strategies/RelateOnTrashHandler.cs index 38477aca47..45fe1d76c2 100644 --- a/src/Umbraco.Core/Strategies/RelateOnTrashHandler.cs +++ b/src/Umbraco.Core/Strategies/RelateOnTrashHandler.cs @@ -1,6 +1,5 @@ using System; using System.Linq; -using Umbraco.Core.Auditing; using Umbraco.Core.Events; using Umbraco.Core.Models; using Umbraco.Core.Services; @@ -13,6 +12,9 @@ namespace Umbraco.Core.Strategies { ContentService.Moved += ContentService_Moved; ContentService.Trashed += ContentService_Trashed; + + MediaService.Moved += MediaService_Moved; + MediaService.Trashed += MediaService_Trashed; } private void ContentService_Moved(IContentService sender, MoveEventArgs e) @@ -30,10 +32,26 @@ namespace Umbraco.Core.Strategies } } + private void MediaService_Moved(IMediaService sender, MoveEventArgs e) + { + foreach (var item in e.MoveInfoCollection.Where(x => x.OriginalPath.Contains(Constants.System.RecycleBinMedia.ToInvariantString()))) + { + var relationService = ApplicationContext.Current.Services.RelationService; + var relationTypeAlias = Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteAlias; + var relations = relationService.GetByChildId(item.Entity.Id); + + foreach (var relation in relations.Where(x => x.RelationType.Alias.InvariantEquals(relationTypeAlias))) + { + relationService.Delete(relation); + } + } + } + private void ContentService_Trashed(IContentService sender, MoveEventArgs e) { var relationService = ApplicationContext.Current.Services.RelationService; var entityService = ApplicationContext.Current.Services.EntityService; + var textService = ApplicationContext.Current.Services.TextService; var relationTypeAlias = Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteAlias; var relationType = relationService.GetRelationTypeByAlias(relationTypeAlias); @@ -64,7 +82,9 @@ namespace Umbraco.Core.Strategies relationService.Save(relation); ApplicationContext.Current.Services.AuditService.Add(AuditType.Delete, - string.Format("Trashed content with Id: '{0}' related to original parent content with Id: '{1}'", item.Entity.Id, originalParentId), + string.Format(textService.Localize( + "recycleBin/contentTrashed"), + item.Entity.Id, originalParentId), item.Entity.WriterId, item.Entity.Id); } @@ -72,5 +92,49 @@ namespace Umbraco.Core.Strategies } } + + private void MediaService_Trashed(IMediaService sender, MoveEventArgs e) + { + var relationService = ApplicationContext.Current.Services.RelationService; + var entityService = ApplicationContext.Current.Services.EntityService; + var textService = ApplicationContext.Current.Services.TextService; + var relationTypeAlias = Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteAlias; + var relationType = relationService.GetRelationTypeByAlias(relationTypeAlias); + + // check that the relation-type exists, if not, then recreate it + if (relationType == null) + { + var documentObjectType = new Guid(Constants.ObjectTypes.Document); + var relationTypeName = Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteName; + + relationType = new RelationType(documentObjectType, documentObjectType, relationTypeAlias, relationTypeName); + relationService.Save(relationType); + } + + foreach (var item in e.MoveInfoCollection) + { + var originalPath = item.OriginalPath.ToDelimitedList(); + var originalParentId = originalPath.Count > 2 + ? int.Parse(originalPath[originalPath.Count - 2]) + : Constants.System.Root; + + //before we can create this relation, we need to ensure that the original parent still exists which + //may not be the case if the encompassing transaction also deleted it when this item was moved to the bin + + if (entityService.Exists(originalParentId)) + { + // Add a relation for the item being deleted, so that we can know the original parent for if we need to restore later + var relation = new Relation(originalParentId, item.Entity.Id, relationType); + relationService.Save(relation); + + ApplicationContext.Current.Services.AuditService.Add(AuditType.Delete, + string.Format(textService.Localize( + "recycleBin/mediaTrashed"), + item.Entity.Id, originalParentId), + item.Entity.CreatorId, + item.Entity.Id); + } + } + } } } \ No newline at end of file diff --git a/src/Umbraco.Core/StringExtensions.cs b/src/Umbraco.Core/StringExtensions.cs index ce9ac77712..d2a1d97709 100644 --- a/src/Umbraco.Core/StringExtensions.cs +++ b/src/Umbraco.Core/StringExtensions.cs @@ -164,7 +164,7 @@ namespace Umbraco.Core var obj = JsonConvert.DeserializeObject(input); return obj; } - catch (Exception ex) + catch (Exception) { return input; } @@ -622,7 +622,7 @@ namespace Umbraco.Core byte[] decodedBytes = UrlTokenDecode(input); return decodedBytes != null ? Encoding.UTF8.GetString(decodedBytes) : null; } - catch (FormatException ex) + catch (FormatException) { return null; } diff --git a/src/Umbraco.Core/Strings/DefaultShortStringHelper.cs b/src/Umbraco.Core/Strings/DefaultShortStringHelper.cs index f74a8c0a59..a9d24d00c5 100644 --- a/src/Umbraco.Core/Strings/DefaultShortStringHelper.cs +++ b/src/Umbraco.Core/Strings/DefaultShortStringHelper.cs @@ -26,7 +26,6 @@ namespace Umbraco.Core.Strings [Obsolete("Use the other ctor that specifies all dependencies")] public DefaultShortStringHelper() { - _umbracoSettings = _umbracoSettings; InitializeLegacyUrlReplaceCharacters(); } diff --git a/src/Umbraco.Core/Sync/ApplicationUrlHelper.cs b/src/Umbraco.Core/Sync/ApplicationUrlHelper.cs index 57520a3754..b52bbcaf97 100644 --- a/src/Umbraco.Core/Sync/ApplicationUrlHelper.cs +++ b/src/Umbraco.Core/Sync/ApplicationUrlHelper.cs @@ -51,10 +51,9 @@ namespace Umbraco.Core.Sync if (request != null) { var applicationUrl = GetApplicationUrlFromRequest(request); - newApplicationUrl = !appContext._umbracoApplicationDomains.Contains(applicationUrl); + newApplicationUrl = appContext._umbracoApplicationDomains.TryAdd(applicationUrl, applicationUrl); if (newApplicationUrl) { - appContext._umbracoApplicationDomains.Add(applicationUrl); LogHelper.Info(typeof(ApplicationUrlHelper), string.Format("New ApplicationUrl detected: {0}", applicationUrl)); } } @@ -156,7 +155,7 @@ namespace Umbraco.Core.Sync // otherwise, // if non-standard ports used, // user may need to set umbracoApplicationUrl manually per - // http://our.umbraco.org/documentation/Using-Umbraco/Config-files/umbracoSettings/#ScheduledTasks + // https://our.umbraco.com/documentation/Using-Umbraco/Config-files/umbracoSettings/#ScheduledTasks var port = (request.IsSecureConnection == false && GlobalSettings.UseSSL == false) || (request.IsSecureConnection && GlobalSettings.UseSSL) ? ":" + request.ServerVariables["SERVER_PORT"] diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index f12ff4f4f1..4b933bf728 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -1,1684 +1,1691 @@ - - - - Debug - AnyCPU - 8.0.30703 - 2.0 - {31785BC3-256C-4613-B2F5-A1B0BDDED8C1} - Library - Properties - Umbraco.Core - Umbraco.Core - v4.5 - 512 - ..\ - true - - latest - - - true - full - false - bin\Debug\ - TRACE;DEBUG - prompt - 4 - false - latest - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - bin\Release\Umbraco.Core.xml - false - - - - ..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.dll - - - ..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.Net4.dll - - - ..\packages\ClientDependency.1.9.6\lib\net45\ClientDependency.Core.dll - - - ..\packages\HtmlAgilityPack.1.4.9.5\lib\Net45\HtmlAgilityPack.dll - - - ..\packages\ImageProcessor.2.5.6\lib\net45\ImageProcessor.dll - - - ..\packages\log4net.2.0.8\lib\net45-full\log4net.dll - - - ..\packages\Log4Net.Async.2.0.4\lib\net40\Log4Net.Async.dll - - - ..\packages\Microsoft.AspNet.Identity.Core.2.2.1\lib\net45\Microsoft.AspNet.Identity.Core.dll - - - ..\packages\Microsoft.AspNet.Identity.Owin.2.2.1\lib\net45\Microsoft.AspNet.Identity.Owin.dll - - - ..\packages\Microsoft.Owin.3.1.0\lib\net45\Microsoft.Owin.dll - - - ..\packages\Microsoft.Owin.Security.3.1.0\lib\net45\Microsoft.Owin.Security.dll - - - ..\packages\Microsoft.Owin.Security.Cookies.3.1.0\lib\net45\Microsoft.Owin.Security.Cookies.dll - - - ..\packages\Microsoft.Owin.Security.OAuth.3.1.0\lib\net45\Microsoft.Owin.Security.OAuth.dll - - - ..\packages\MiniProfiler.2.1.0\lib\net40\MiniProfiler.dll - - - ..\packages\MySql.Data.6.9.9\lib\net45\MySql.Data.dll - True - - - ..\packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll - - - ..\packages\Owin.1.0\lib\net40\Owin.dll - - - ..\packages\semver.1.1.2\lib\net45\Semver.dll - - - - - - - - ..\packages\SqlServerCE.4.0.0.1\lib\System.Data.SqlServerCe.dll - - - ..\packages\SqlServerCE.4.0.0.1\lib\System.Data.SqlServerCe.Entity.dll - - - - - - - - - - - - - ..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll - - - - - - False - - - - - - - - - - Properties\SolutionInfo.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - Files.resx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Component - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Constants.cs - - - Constants.cs - - - Constants.cs - - - Constants.cs - - - Constants.cs - - - Constants.cs - - - Constants.cs - - - Constants.cs - - - Constants.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {511F6D8D-7717-440A-9A57-A507E9A8B27F} - umbraco.interfaces - - - - - ResXFileCodeGenerator - Files.Designer.cs - - - - - - \ No newline at end of file + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {31785BC3-256C-4613-B2F5-A1B0BDDED8C1} + Library + Properties + Umbraco.Core + Umbraco.Core + v4.5 + 512 + ..\ + true + + latest + + + true + full + false + bin\Debug\ + TRACE;DEBUG + prompt + 4 + false + latest + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + bin\Release\Umbraco.Core.xml + false + + + + ..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.dll + + + ..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.Net4.dll + + + ..\packages\ClientDependency.1.9.6\lib\net45\ClientDependency.Core.dll + + + ..\packages\HtmlAgilityPack.1.4.9.5\lib\Net45\HtmlAgilityPack.dll + + + ..\packages\ImageProcessor.2.5.6\lib\net45\ImageProcessor.dll + + + ..\packages\log4net.2.0.8\lib\net45-full\log4net.dll + + + ..\packages\Log4Net.Async.2.0.4\lib\net40\Log4Net.Async.dll + + + ..\packages\Microsoft.AspNet.Identity.Core.2.2.1\lib\net45\Microsoft.AspNet.Identity.Core.dll + + + ..\packages\Microsoft.AspNet.Identity.Owin.2.2.1\lib\net45\Microsoft.AspNet.Identity.Owin.dll + + + ..\packages\Microsoft.Owin.3.1.0\lib\net45\Microsoft.Owin.dll + + + ..\packages\Microsoft.Owin.Security.3.1.0\lib\net45\Microsoft.Owin.Security.dll + + + ..\packages\Microsoft.Owin.Security.Cookies.3.1.0\lib\net45\Microsoft.Owin.Security.Cookies.dll + + + ..\packages\Microsoft.Owin.Security.OAuth.3.1.0\lib\net45\Microsoft.Owin.Security.OAuth.dll + + + ..\packages\MiniProfiler.2.1.0\lib\net40\MiniProfiler.dll + + + ..\packages\MySql.Data.6.9.9\lib\net45\MySql.Data.dll + True + + + ..\packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll + + + ..\packages\Owin.1.0\lib\net40\Owin.dll + + + ..\packages\semver.1.1.2\lib\net45\Semver.dll + + + + + + + + ..\packages\SqlServerCE.4.0.0.1\lib\System.Data.SqlServerCe.dll + + + ..\packages\SqlServerCE.4.0.0.1\lib\System.Data.SqlServerCe.Entity.dll + + + + + + + + + + + + + ..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll + + + + + + False + + + + + + + + + + Properties\SolutionInfo.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + True + True + Files.resx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Component + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Constants.cs + + + Constants.cs + + + Constants.cs + + + Constants.cs + + + Constants.cs + + + Constants.cs + + + Constants.cs + + + Constants.cs + + + Constants.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {511F6D8D-7717-440A-9A57-A507E9A8B27F} + umbraco.interfaces + + + + + ResXFileCodeGenerator + Files.Designer.cs + + + + + + + diff --git a/src/Umbraco.MSBuild.Tasks.sln b/src/Umbraco.MSBuild.Tasks.sln deleted file mode 100644 index 464c644a45..0000000000 --- a/src/Umbraco.MSBuild.Tasks.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.MSBuild.Tasks", "Umbraco.MSBuild.Tasks\Umbraco.MSBuild.Tasks.csproj", "{68AC9679-2439-4DA9-86BC-E36579594EFB}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {68AC9679-2439-4DA9-86BC-E36579594EFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {68AC9679-2439-4DA9-86BC-E36579594EFB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {68AC9679-2439-4DA9-86BC-E36579594EFB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {68AC9679-2439-4DA9-86BC-E36579594EFB}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/src/Umbraco.MSBuild.Tasks/GetAssemblyFileVersion.cs b/src/Umbraco.MSBuild.Tasks/GetAssemblyFileVersion.cs deleted file mode 100644 index ff4b6dec13..0000000000 --- a/src/Umbraco.MSBuild.Tasks/GetAssemblyFileVersion.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System; -using System.IO; -using System.Text.RegularExpressions; -using Microsoft.Build.Framework; - -namespace Umbraco.MSBuild.Tasks -{ - public class GetAssemblyFileVersion : ITask - { - [Required] - public string strFilePathAssemblyInfo { get; set; } - - [Output] - public string strAssemblyFileVersion { get; set; } - - public bool Execute() - { - StreamReader streamreaderAssemblyInfo = null; - Match matchVersion; - Group groupVersion; - string strLine; - strAssemblyFileVersion = String.Empty; - try - { - streamreaderAssemblyInfo = new StreamReader(strFilePathAssemblyInfo); - while ((strLine = streamreaderAssemblyInfo.ReadLine()) != null) - { - matchVersion = Regex.Match(strLine, @"(?:AssemblyFileVersion\("")(?(\d*)\.(\d*)(\.(\d*)(\.(\d*))?)?)(?:""\))", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline | RegexOptions.ExplicitCapture); - if (matchVersion.Success) - { - groupVersion = matchVersion.Groups["ver"]; - if ((groupVersion.Success) && (!String.IsNullOrEmpty(groupVersion.Value))) - { - strAssemblyFileVersion = groupVersion.Value; - break; - } - } - } - } - catch (Exception e) - { - BuildMessageEventArgs args = new BuildMessageEventArgs(e.Message, string.Empty, "GetAssemblyFileVersion", MessageImportance.High); - BuildEngine.LogMessageEvent(args); - } - finally { if (streamreaderAssemblyInfo != null) streamreaderAssemblyInfo.Close(); } - return (true); - } - - public IBuildEngine BuildEngine { get; set; } - - public ITaskHost HostObject { get; set; } - } -} diff --git a/src/Umbraco.MSBuild.Tasks/Properties/AssemblyInfo.cs b/src/Umbraco.MSBuild.Tasks/Properties/AssemblyInfo.cs deleted file mode 100644 index fe7739861c..0000000000 --- a/src/Umbraco.MSBuild.Tasks/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Umbraco.MSBuild.Tasks")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("Umbraco.MSBuild.Tasks")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2011")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("a4741c02-d938-4b29-a9b3-66ade85c95b5")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/Umbraco.MSBuild.Tasks/TimestampOffset.cs b/src/Umbraco.MSBuild.Tasks/TimestampOffset.cs deleted file mode 100644 index e1569ad1f8..0000000000 --- a/src/Umbraco.MSBuild.Tasks/TimestampOffset.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.IO; -using System.Xml; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using System.Text.RegularExpressions; - -namespace Umbraco.MSBuild.Tasks -{ - public class TimestampOffset : Task - { - [Required] - public int Offset { get; set; } - - public ITaskItem[] Files { get; set; } - - public override bool Execute() - { - try - { - if (Files != null && Files.Length > 0) - { - foreach (var file in Files) - { - if (File.Exists(file.ItemSpec)) - { - var creationDate = File.GetCreationTimeUtc(file.ItemSpec); - var modifiedDate = File.GetLastWriteTimeUtc(file.ItemSpec); - - File.SetCreationTimeUtc(file.ItemSpec, creationDate.AddHours(Offset)); - File.SetLastWriteTimeUtc(file.ItemSpec, modifiedDate.AddHours(Offset)); - } - } - } - - return true; - } - catch(Exception e) - { - Log.LogErrorFromException(e); - return false; - } - } - } -} diff --git a/src/Umbraco.MSBuild.Tasks/Umbraco.MSBuild.Tasks.Targets b/src/Umbraco.MSBuild.Tasks/Umbraco.MSBuild.Tasks.Targets deleted file mode 100644 index 2015db188e..0000000000 --- a/src/Umbraco.MSBuild.Tasks/Umbraco.MSBuild.Tasks.Targets +++ /dev/null @@ -1,12 +0,0 @@ - - - - - $(MSBuildProjectDirectory)\Lib\UmbracoMSBuildTasks - $(UmbracoMSBuildTasksPath)\Umbraco.MSBuild.Tasks.dll - - - - - - diff --git a/src/Umbraco.MSBuild.Tasks/Umbraco.MSBuild.Tasks.csproj b/src/Umbraco.MSBuild.Tasks/Umbraco.MSBuild.Tasks.csproj deleted file mode 100644 index 1a4cd2bc49..0000000000 --- a/src/Umbraco.MSBuild.Tasks/Umbraco.MSBuild.Tasks.csproj +++ /dev/null @@ -1,72 +0,0 @@ - - - - Debug - AnyCPU - 8.0.30703 - 2.0 - {68AC9679-2439-4DA9-86BC-E36579594EFB} - Library - Properties - Umbraco.MSBuild.Tasks - Umbraco.MSBuild.Tasks - v4.0 - 512 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - Always - Designer - - - - - robocopy "$(TargetDir) " "$(SolutionDir)..\lib\Umbraco\UmbracoMSBuildTasks " "*Umbraco.MSBuild.Tasks.dll" "*Umbraco.MSBuild.Tasks.targets" /NP /NJS -if errorlevel 4 goto BuildEventFailed -if errorlevel 0 goto end -:BuildEventFailed echo FILECOPY for $(ProjectName) FAILED -exit 1 -:end echo FILECOPY for $(ProjectName) COMPLETED OK -exit 0 - - - \ No newline at end of file diff --git a/src/Umbraco.Tests/App.config b/src/Umbraco.Tests/App.config index 09fd6b24f3..fa18d5afd1 100644 --- a/src/Umbraco.Tests/App.config +++ b/src/Umbraco.Tests/App.config @@ -55,7 +55,7 @@ - + diff --git a/src/Umbraco.Tests/CodeFirst/ContentTypeMapper.cs b/src/Umbraco.Tests/CodeFirst/ContentTypeMapper.cs index 149eb19080..8caf215678 100644 --- a/src/Umbraco.Tests/CodeFirst/ContentTypeMapper.cs +++ b/src/Umbraco.Tests/CodeFirst/ContentTypeMapper.cs @@ -1,6 +1,5 @@ using System; using System.Linq; -using Umbraco.Core; using Umbraco.Core.Models; namespace Umbraco.Tests.CodeFirst @@ -32,7 +31,7 @@ namespace Umbraco.Tests.CodeFirst value = DateTime.Parse(property.Value.ToString()); else if (propertyInfo.PropertyType == typeof(Boolean)) { - if (String.IsNullOrEmpty(property.Value.ToString()) || property.Value == "0") + if (String.IsNullOrEmpty(property.Value.ToString()) || (string)property.Value == "0") { value = false; } @@ -48,4 +47,4 @@ namespace Umbraco.Tests.CodeFirst return mapped; } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Tests/Configurations/UmbracoSettings/ContentElementTests.cs b/src/Umbraco.Tests/Configurations/UmbracoSettings/ContentElementTests.cs index 0287159cd9..ae5e6eb118 100644 --- a/src/Umbraco.Tests/Configurations/UmbracoSettings/ContentElementTests.cs +++ b/src/Umbraco.Tests/Configurations/UmbracoSettings/ContentElementTests.cs @@ -156,7 +156,7 @@ namespace Umbraco.Tests.Configurations.UmbracoSettings [Test] public void PreviewBadge() { - Assert.IsTrue(SettingsSection.Content.PreviewBadge == @"In Preview Mode - click to end"); + Assert.IsTrue(SettingsSection.Content.PreviewBadge == @"In Preview Mode - click to end"); } [Test] public void UmbracoLibraryCacheDuration() diff --git a/src/Umbraco.Tests/Configurations/UmbracoSettings/WebRoutingElementDefaultTests.cs b/src/Umbraco.Tests/Configurations/UmbracoSettings/WebRoutingElementDefaultTests.cs index 1e568c608e..4c77fff5bc 100644 --- a/src/Umbraco.Tests/Configurations/UmbracoSettings/WebRoutingElementDefaultTests.cs +++ b/src/Umbraco.Tests/Configurations/UmbracoSettings/WebRoutingElementDefaultTests.cs @@ -23,6 +23,12 @@ namespace Umbraco.Tests.Configurations.UmbracoSettings Assert.IsTrue(SettingsSection.WebRouting.DisableAlternativeTemplates == false); } + [Test] + public void ValidateAlternativeTemplates() + { + Assert.IsTrue(SettingsSection.WebRouting.ValidateAlternativeTemplates == false); + } + [Test] public void DisableFindContentByIdPath() { diff --git a/src/Umbraco.Tests/Configurations/UmbracoSettings/umbracoSettings.config b/src/Umbraco.Tests/Configurations/UmbracoSettings/umbracoSettings.config index 5f5d47e8ba..80a10446c4 100644 --- a/src/Umbraco.Tests/Configurations/UmbracoSettings/umbracoSettings.config +++ b/src/Umbraco.Tests/Configurations/UmbracoSettings/umbracoSettings.config @@ -83,7 +83,7 @@ true - In Preview Mode - click to end]]> + In Preview Mode - click to end]]> diff --git a/src/Umbraco.Tests/Configurations/UmbracoSettings/umbracoSettings.minimal.config b/src/Umbraco.Tests/Configurations/UmbracoSettings/umbracoSettings.minimal.config index b6ea54d75e..9c0a3ece52 100644 --- a/src/Umbraco.Tests/Configurations/UmbracoSettings/umbracoSettings.minimal.config +++ b/src/Umbraco.Tests/Configurations/UmbracoSettings/umbracoSettings.minimal.config @@ -3,27 +3,27 @@ - + - + - + - + 1 - + robot@umbraco.dk @@ -31,42 +31,42 @@ - - - + Mvc - + - + - + - + - + - + - + - + - + diff --git a/src/Umbraco.Tests/CoreXml/NavigableNavigatorTests.cs b/src/Umbraco.Tests/CoreXml/NavigableNavigatorTests.cs index bf5100815f..3f85ecab0f 100644 --- a/src/Umbraco.Tests/CoreXml/NavigableNavigatorTests.cs +++ b/src/Umbraco.Tests/CoreXml/NavigableNavigatorTests.cs @@ -419,7 +419,6 @@ namespace Umbraco.Tests.CoreXml { var source = new TestSource5(); var nav = new NavigableNavigator(source); - TestContent content; Assert.AreEqual(NavigableNavigator.StatePosition.Root, nav.InternalState.Position); Assert.IsTrue(nav.MoveToFirstChild()); @@ -1162,4 +1161,4 @@ namespace Umbraco.Tests.CoreXml } #endregion -} \ No newline at end of file +} diff --git a/src/Umbraco.Tests/DelegateExtensionsTests.cs b/src/Umbraco.Tests/DelegateExtensionsTests.cs index 511440c2c7..e745e029d0 100644 --- a/src/Umbraco.Tests/DelegateExtensionsTests.cs +++ b/src/Umbraco.Tests/DelegateExtensionsTests.cs @@ -26,7 +26,6 @@ namespace Umbraco.Tests [Test] public void Quits_On_Success_Count() { - var maxTries = 5; var totalTries = 0; DelegateExtensions.RetryUntilSuccessOrMaxAttempts((currentTry) => { @@ -43,4 +42,4 @@ namespace Umbraco.Tests } -} \ No newline at end of file +} diff --git a/src/Umbraco.Tests/Dependencies/NuGet.cs b/src/Umbraco.Tests/Dependencies/NuGet.cs index 7aced42f27..5bb2f7f355 100644 --- a/src/Umbraco.Tests/Dependencies/NuGet.cs +++ b/src/Umbraco.Tests/Dependencies/NuGet.cs @@ -104,8 +104,7 @@ namespace Umbraco.Tests.Dependencies var packageConfigFiles = new List(); var packageDirectories = sourceDirectory.GetDirectories().Where(x => - x.Name.StartsWith("Umbraco.Tests") == false && - x.Name.StartsWith("Umbraco.MSBuild.Tasks") == false).ToArray(); + x.Name.StartsWith("Umbraco.Tests") == false).ToArray(); foreach (var directory in packageDirectories) { diff --git a/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs b/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs index 97f12cdaf8..01351a62fc 100644 --- a/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs +++ b/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs @@ -1,67 +1,62 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Text; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Tests.TestHelpers; using Umbraco.Web; namespace Umbraco.Tests.FrontEnd { [TestFixture] public class UmbracoHelperTests + : BaseUmbracoApplicationTest { - - [Test] - public void Truncate_Simple() - { - var text = "Hello world, this is some text with a link"; + private const string SampleWithAnchorElement = "Hello world, this is some text with a link"; + private const string SampleWithBoldAndAnchorElements = "Hello world, this is some text with a link"; + [Test] + public static void Truncate_Simple() + { var helper = new UmbracoHelper(); - var result = helper.Truncate(text, 25).ToString(); - - Assert.AreEqual("Hello world, this is some…", result); - } - - /// - /// If a truncated string ends with a space, we should trim the space before appending the ellipsis. - /// - [Test] - public void Truncate_Simple_With_Trimming() - { - var text = "Hello world, this is some text with a link"; - - var helper = new UmbracoHelper(); - - var result = helper.Truncate(text, 26).ToString(); + var result = helper.Truncate(SampleWithAnchorElement, 25).ToString(); Assert.AreEqual("Hello world, this is some…", result); } [Test] - public void Truncate_Inside_Word() + public static void When_Truncating_A_String_Ends_With_A_Space_We_Should_Trim_The_Space_Before_Appending_The_Ellipsis() { - var text = "Hello world, this is some text with a link"; - var helper = new UmbracoHelper(); - var result = helper.Truncate(text, 24).ToString(); + var result = helper.Truncate(SampleWithAnchorElement, 26).ToString(); + + Assert.AreEqual("Hello world, this is some…", result); + } + + [Test] + public static void Truncate_Inside_Word() + { + var helper = new UmbracoHelper(); + + var result = helper.Truncate(SampleWithAnchorElement, 24).ToString(); Assert.AreEqual("Hello world, this is som…", result); } [Test] - public void Truncate_With_Tag() + public static void Truncate_With_Tag() { - var text = "Hello world, this is some text with a link"; - var helper = new UmbracoHelper(); - var result = helper.Truncate(text, 35).ToString(); + var result = helper.Truncate(SampleWithAnchorElement, 35).ToString(); Assert.AreEqual("Hello world, this is some text with…", result); } [Test] - public void Create_Encrypted_RouteString_From_Anonymous_Object() + public static void Create_Encrypted_RouteString_From_Anonymous_Object() { var additionalRouteValues = new { @@ -69,16 +64,23 @@ namespace Umbraco.Tests.FrontEnd key2 = "value2", Key3 = "Value3", keY4 = "valuE4" - }; - var encryptedRouteString = UmbracoHelper.CreateEncryptedRouteString("FormController", "FormAction", "", additionalRouteValues); + }; + + var encryptedRouteString = UmbracoHelper.CreateEncryptedRouteString( + "FormController", + "FormAction", + "", + additionalRouteValues + ); + var result = encryptedRouteString.DecryptWithMachineKey(); - var expectedResult = "c=FormController&a=FormAction&ar=&key1=value1&key2=value2&Key3=Value3&keY4=valuE4"; + const string expectedResult = "c=FormController&a=FormAction&ar=&key1=value1&key2=value2&Key3=Value3&keY4=valuE4"; Assert.AreEqual(expectedResult, result); } [Test] - public void Create_Encrypted_RouteString_From_Dictionary() + public static void Create_Encrypted_RouteString_From_Dictionary() { var additionalRouteValues = new Dictionary() { @@ -87,77 +89,74 @@ namespace Umbraco.Tests.FrontEnd {"Key3", "Value3"}, {"keY4", "valuE4"} }; - var encryptedRouteString = UmbracoHelper.CreateEncryptedRouteString("FormController", "FormAction", "", additionalRouteValues); + + var encryptedRouteString = UmbracoHelper.CreateEncryptedRouteString( + "FormController", + "FormAction", + "", + additionalRouteValues + ); + var result = encryptedRouteString.DecryptWithMachineKey(); - var expectedResult = "c=FormController&a=FormAction&ar=&key1=value1&key2=value2&Key3=Value3&keY4=valuE4"; - + const string expectedResult = "c=FormController&a=FormAction&ar=&key1=value1&key2=value2&Key3=Value3&keY4=valuE4"; + Assert.AreEqual(expectedResult, result); } [Test] - public void Truncate_By_Words() + public static void Truncate_By_Words() { - var text = "Hello world, this is some text with a link"; - var helper = new UmbracoHelper(); - var result = helper.TruncateByWords(text, 4).ToString(); + var result = helper.TruncateByWords(SampleWithAnchorElement, 4).ToString(); Assert.AreEqual("Hello world, this is…", result); } [Test] - public void Truncate_By_Words_With_Tag() + public static void Truncate_By_Words_With_Tag() { - var text = "Hello world, this is some text with a link"; - var helper = new UmbracoHelper(); - var result = helper.TruncateByWords(text, 4).ToString(); + var result = helper.TruncateByWords(SampleWithBoldAndAnchorElements, 4).ToString(); Assert.AreEqual("Hello world, this is…", result); } [Test] - public void Truncate_By_Words_Mid_Tag() + public static void Truncate_By_Words_Mid_Tag() { - var text = "Hello world, this is some text with a link"; - var helper = new UmbracoHelper(); - var result = helper.TruncateByWords(text, 7).ToString(); + var result = helper.TruncateByWords(SampleWithAnchorElement, 7).ToString(); Assert.AreEqual("Hello world, this is some text with…", result); } [Test] - public void Strip_All_Html() + public static void Strip_All_Html() { - var text = "Hello world, this is some text with a link"; - var helper = new UmbracoHelper(); - var result = helper.StripHtml(text, null).ToString(); + var result = helper.StripHtml(SampleWithBoldAndAnchorElements, null).ToString(); Assert.AreEqual("Hello world, this is some text with a link", result); } [Test] - public void Strip_Specific_Html() + public static void Strip_Specific_Html() { - var text = "Hello world, this is some text with a link"; - - string [] tags = {"b"}; + string[] tags = { "b" }; var helper = new UmbracoHelper(); - var result = helper.StripHtml(text, tags).ToString(); + var result = helper.StripHtml(SampleWithBoldAndAnchorElements, tags).ToString(); - Assert.AreEqual("Hello world, this is some text with a link", result); + Assert.AreEqual(SampleWithAnchorElement, result); } [Test] - public void Strip_Invalid_Html() + public static void Strip_Invalid_Html() { var text = "Hello world, is some text with a link"; @@ -167,5 +166,229 @@ namespace Umbraco.Tests.FrontEnd Assert.AreEqual("Hello world, is some text with a link", result); } + + // ------- Int32 conversion tests + [Test] + public static void Converting_Boxed_34_To_An_Int_Returns_34() + { + // Arrange + const int sample = 34; + + // Act + bool success = UmbracoHelper.ConvertIdObjectToInt( + sample, + out int result + ); + + // Assert + Assert.IsTrue(success); + Assert.That(result, Is.EqualTo(34)); + } + + [Test] + public static void Converting_String_54_To_An_Int_Returns_54() + { + // Arrange + const string sample = "54"; + + // Act + bool success = UmbracoHelper.ConvertIdObjectToInt( + sample, + out int result + ); + + // Assert + Assert.IsTrue(success); + Assert.That(result, Is.EqualTo(54)); + } + + [Test] + public static void Converting_Hello_To_An_Int_Returns_False() + { + // Arrange + const string sample = "Hello"; + + // Act + bool success = UmbracoHelper.ConvertIdObjectToInt( + sample, + out int result + ); + + // Assert + Assert.IsFalse(success); + Assert.That(result, Is.EqualTo(0)); + } + + [Test] + public static void Converting_Unsupported_Object_To_An_Int_Returns_False() + { + // Arrange + var clearlyWillNotConvertToInt = new StringBuilder(0); + + // Act + bool success = UmbracoHelper.ConvertIdObjectToInt( + clearlyWillNotConvertToInt, + out int result + ); + + // Assert + Assert.IsFalse(success); + Assert.That(result, Is.EqualTo(0)); + } + + // ------- GUID conversion tests + [Test] + public static void Converting_Boxed_Guid_To_A_Guid_Returns_Original_Guid_Value() + { + // Arrange + Guid sample = Guid.NewGuid(); + + // Act + bool success = UmbracoHelper.ConvertIdObjectToGuid( + sample, + out Guid result + ); + + // Assert + Assert.IsTrue(success); + Assert.That(result, Is.EqualTo(sample)); + } + + [Test] + public static void Converting_String_Guid_To_A_Guid_Returns_Original_Guid_Value() + { + // Arrange + Guid sample = Guid.NewGuid(); + + // Act + bool success = UmbracoHelper.ConvertIdObjectToGuid( + sample.ToString(), + out Guid result + ); + + // Assert + Assert.IsTrue(success); + Assert.That(result, Is.EqualTo(sample)); + } + + [Test] + public static void Converting_Hello_To_A_Guid_Returns_False() + { + // Arrange + const string sample = "Hello"; + + // Act + bool success = UmbracoHelper.ConvertIdObjectToGuid( + sample, + out Guid result + ); + + // Assert + Assert.IsFalse(success); + Assert.That(result, Is.EqualTo(new Guid("00000000-0000-0000-0000-000000000000"))); + } + + [Test] + public static void Converting_Unsupported_Object_To_A_Guid_Returns_False() + { + // Arrange + var clearlyWillNotConvertToGuid = new StringBuilder(0); + + // Act + bool success = UmbracoHelper.ConvertIdObjectToGuid( + clearlyWillNotConvertToGuid, + out Guid result + ); + + // Assert + Assert.IsFalse(success); + Assert.That(result, Is.EqualTo(new Guid("00000000-0000-0000-0000-000000000000"))); + } + + // ------- UDI Conversion Tests + /// + /// This requires PluginManager.Current to be initialised before running. + /// + [Test] + public static void Converting_Boxed_Udi_To_A_Udi_Returns_Original_Udi_Value() + { + // Arrange + Udi.ResetUdiTypes(); + Udi sample = new GuidUdi(Constants.UdiEntityType.AnyGuid, Guid.NewGuid()); + + // Act + bool success = UmbracoHelper.ConvertIdObjectToUdi( + sample, + out Udi result + ); + + // Assert + Assert.IsTrue(success); + Assert.That(result, Is.EqualTo(sample)); + } + + /// + /// This requires PluginManager.Current to be initialised before running. + /// + [Test] + public static void Converting_String_Udi_To_A_Udi_Returns_Original_Udi_Value() + { + // Arrange + Udi.ResetUdiTypes(); + Udi sample = new GuidUdi(Constants.UdiEntityType.AnyGuid, Guid.NewGuid()); + + // Act + bool success = UmbracoHelper.ConvertIdObjectToUdi( + sample.ToString(), + out Udi result + ); + + // Assert + Assert.IsTrue(success, "Conversion of UDI failed."); + Assert.That(result, Is.EqualTo(sample)); + } + + /// + /// This requires PluginManager.Current to be initialised before running. + /// + [Test] + public static void Converting_Hello_To_A_Udi_Returns_False() + { + // Arrange + Udi.ResetUdiTypes(); + const string sample = "Hello"; + + // Act + bool success = UmbracoHelper.ConvertIdObjectToUdi( + sample, + out Udi result + ); + + // Assert + Assert.IsFalse(success); + Assert.That(result, Is.Null); + } + + /// + /// This requires PluginManager.Current to be initialised before running. + /// + [Test] + public static void Converting_Unsupported_Object_To_A_Udi_Returns_False() + { + // Arrange + Udi.ResetUdiTypes(); + + var clearlyWillNotConvertToGuid = new StringBuilder(0); + + // Act + bool success = UmbracoHelper.ConvertIdObjectToUdi( + clearlyWillNotConvertToGuid, + out Udi result + ); + + // Assert + Assert.IsFalse(success); + Assert.That(result, Is.Null); + } } } diff --git a/src/Umbraco.Tests/Integration/CreateContent.cs b/src/Umbraco.Tests/Integration/CreateContent.cs deleted file mode 100644 index c4164cc3ca..0000000000 --- a/src/Umbraco.Tests/Integration/CreateContent.cs +++ /dev/null @@ -1,155 +0,0 @@ -using System; -using System.Runtime.InteropServices; -using System.Threading; -using NUnit.Framework; -using OpenQA.Selenium; -using OpenQA.Selenium.Interactions; -using Umbraco.Tests.TestHelpers; - -namespace Umbraco.Tests.Integration -{ - [Ignore("We don't want to run Selenium tests on TeamCity")] - [TestFixture] - public class CreateContent : BaseSeleniumTest - { - [SetUp] - public override void Initialize() - { - base.Initialize(); - } - - [TearDown] - public void TearDown() - { - base.TearDown(); - } - - [Test] - public void Install_StarterKit_And_Create_Textpage() - { - // Login to Umbraco - Driver.Navigate().GoToUrl(BaseUrl + "/umbraco/login.aspx?redir="); - Driver.FindElement(By.Id("lname")).Clear(); - Driver.FindElement(By.Id("lname")).SendKeys("admin"); - Driver.FindElement(By.Id("passw")).Clear(); - Driver.FindElement(By.Id("passw")).SendKeys("test"); - Driver.FindElement(By.Id("Button1")).Click(); - Thread.Sleep(500); - - // Install starter kit - Driver.Navigate().GoToUrl(BaseUrl + "/umbraco/umbraco.aspx#developer"); - Thread.Sleep(2000); - - var builder = new Actions(Driver); - var packagesNode = Driver.FindElement(By.XPath("//*[@id='init'][3]")); - builder.MoveToElement(packagesNode).DoubleClick().Build().Perform(); - Thread.Sleep(500); - - var installStarterKitNode = Driver.FindElement(By.XPath("(//li[@id='-1']/a/div)[4]")); - builder.MoveToElement(installStarterKitNode).Click().Build().Perform(); - Thread.Sleep(500); - - var rightFrame = Driver.FindElement(By.XPath("//*[@id='right']")); - Driver.SwitchTo().Frame(rightFrame); - Thread.Sleep(500); - - var simpleKit = Driver.FindElement(By.XPath("/html/body/form/div[2]/div[2]/div/div/div/div/div[4]/nav/ul/li[1]/a")); - builder.MoveToElement(simpleKit).Click().Build().Perform(); - Thread.Sleep(6000); - - // Create new content - Driver.SwitchTo().DefaultContent(); - Driver.Navigate().GoToUrl(BaseUrl + "/umbraco/umbraco.aspx#content"); - Thread.Sleep(500); - - var contentNode = Driver.FindElement(By.XPath("//*[@id = 'JTree_TreeContainer']/div/ul/li/ul/li/a/div")); - builder.MoveToElement(contentNode).ContextClick().Build().Perform(); - Thread.Sleep(1000); - - var createButton = Driver.FindElement(By.XPath("//*[@id = 'jstree-contextmenu']/li[1]/a/span/div[2]")); - createButton.Click(); - Thread.Sleep(500); - - var umbracoModalBoxIframe = Driver.FindElement(By.CssSelector(".umbModalBoxIframe")); - Driver.SwitchTo().Frame(umbracoModalBoxIframe); - - var createTextBox = Driver.FindElement(By.XPath("//input[@type='text'][1]")); - createTextBox.Clear(); - createTextBox.SendKeys("Test Page"); - - var submitButton = Driver.FindElement(By.XPath("//input[@type='submit'][1]")); - submitButton.Click(); - Thread.Sleep(2000); - - Driver.SwitchTo().Frame(rightFrame); - var saveAndPublishButton = Driver.FindElement(By.XPath("//*[@id='body_TabView1_tab01layer_publish']")); - saveAndPublishButton.Click(); - Thread.Sleep(2000); - - var contentArea = Driver.FindElement(By.XPath("//*[@id='body_TabView1']")); - Assert.IsNotNull(contentArea); - Thread.Sleep(500); - - // Perform delete - Driver.SwitchTo().DefaultContent(); - var installingModulesNode = Driver.FindElement(By.XPath("//*[@id='1052']/a/div")); - builder.MoveToElement(installingModulesNode).ContextClick().Build().Perform(); - Thread.Sleep(1000); - - var deleteButton = Driver.FindElement(By.CssSelector(".sprDelete")); - deleteButton.Click(); - var alert = Driver.SwitchTo().Alert(); - alert.Accept(); - Thread.Sleep(1000); - - // Perform move - var goFurtherNode = Driver.FindElement(By.XPath("//*[@id='1053']/a/div")); - builder.MoveToElement(goFurtherNode).ContextClick().Build().Perform(); - Thread.Sleep(1000); - - var moveButton = Driver.FindElement(By.CssSelector(".sprMove")); - moveButton.Click(); - Thread.Sleep(2000); - - umbracoModalBoxIframe = Driver.FindElement(By.CssSelector(".umbModalBoxIframe")); - Driver.SwitchTo().Frame(umbracoModalBoxIframe); - - var rootNode = Driver.FindElement(By.XPath("//*[@id='1051']")); - builder.MoveToElement(rootNode).DoubleClick().Build().Perform(); - Thread.Sleep(500); - var gettinStartedNode = Driver.FindElement(By.XPath("//*[@id='1055']/a/div")); - builder.MoveToElement(gettinStartedNode).Click().Build().Perform(); - Thread.Sleep(500); - submitButton = Driver.FindElement(By.XPath("//input[@type='submit'][1]")); - builder.MoveToElement(submitButton).Click().Build().Perform(); - Thread.Sleep(2000); - var closeLink = Driver.FindElement(By.XPath("/html/body/form/div[2]/p[2]/a")); - builder.MoveToElement(closeLink).Click().Build().Perform(); - - Driver.SwitchTo().DefaultContent(); - Thread.Sleep(1000); - - // Perform copy - var gettingStartedNode = Driver.FindElement(By.XPath("//*[@id='1054']/a/div")); - builder.MoveToElement(gettingStartedNode).ContextClick().Build().Perform(); - Thread.Sleep(1000); - - var copyButton = Driver.FindElement(By.CssSelector(".sprCopy")); - copyButton.Click(); - Thread.Sleep(2000); - - umbracoModalBoxIframe = Driver.FindElement(By.CssSelector(".umbModalBoxIframe")); - Driver.SwitchTo().Frame(umbracoModalBoxIframe); - - rootNode = Driver.FindElement(By.XPath("//*[@id='1051']")); - builder.MoveToElement(rootNode).DoubleClick().Build().Perform(); - Thread.Sleep(500); - - submitButton = Driver.FindElement(By.XPath("//input[@type='submit'][1]")); - builder.MoveToElement(submitButton).Click().Build().Perform(); - Thread.Sleep(2000); - closeLink = Driver.FindElement(By.XPath("/html/body/form/div[2]/p[2]/a")); - builder.MoveToElement(closeLink).Click().Build().Perform(); - } - } -} \ No newline at end of file diff --git a/src/Umbraco.Tests/Integration/InstallPackage.cs b/src/Umbraco.Tests/Integration/InstallPackage.cs deleted file mode 100644 index 1dd4f7c3bb..0000000000 --- a/src/Umbraco.Tests/Integration/InstallPackage.cs +++ /dev/null @@ -1,145 +0,0 @@ -using System.IO; -using System.Linq; -using System.Threading; -using NUnit.Framework; -using OpenQA.Selenium; -using OpenQA.Selenium.Interactions; -using Umbraco.Core; -using Umbraco.Tests.TestHelpers; - -namespace Umbraco.Tests.Integration -{ - [Ignore("We don't want to run Selenium tests on TeamCity")] - [TestFixture] - public class InstallPackage : BaseSeleniumTest - { - [SetUp] - public override void Initialize() - { - base.Initialize(); - } - - [TearDown] - public void TearDown() - { - base.TearDown(); - } - - [Test] - public void Install_Courier_Package() - { - Driver.Navigate().GoToUrl(BaseUrl + "/umbraco/login.aspx?redir="); - Driver.FindElement(By.Id("lname")).Clear(); - Driver.FindElement(By.Id("lname")).SendKeys("admin"); - Driver.FindElement(By.Id("passw")).Clear(); - Driver.FindElement(By.Id("passw")).SendKeys("test"); - Driver.FindElement(By.Id("Button1")).Click(); - Thread.Sleep(1000); - - Driver.Navigate().GoToUrl(BaseUrl + "/umbraco/umbraco.aspx#developer"); - Thread.Sleep(2000); - - var builder = new Actions(Driver); - var packagesNode = Driver.FindElement(By.XPath("//*[@id='init'][3]")); - builder.MoveToElement(packagesNode).DoubleClick().Build().Perform(); - Thread.Sleep(1000); - - var installPackageNode = Driver.FindElement(By.XPath("/html/body/div[2]/div/div/div[2]/div/div/div/div/ul/li/ul/li[3]/ul/li[4]/a/div")); - builder.MoveToElement(installPackageNode).Click().Build().Perform(); - Thread.Sleep(1000); - - var rightFrame = Driver.FindElement(By.XPath("//*[@id='right']")); - Driver.SwitchTo().Frame(rightFrame); - - const string packagesDir = @"C:\\Downloads\\Packages\\"; - var file = new DirectoryInfo(packagesDir).GetFiles().First(f => f.Name.ToLowerInvariant().StartsWith("Courier".ToLowerInvariant())); - - Driver.FindElement(By.Id("cb")).Click(); - Driver.FindElement(By.XPath("//input[@type='file']")).SendKeys(file.FullName); - Driver.FindElement(By.Id("body_ButtonLoadPackage")).Click(); - Driver.FindElement(By.Id("body_acceptCheckbox")).Click(); - Driver.FindElement(By.Id("body_ButtonInstall")).Click(); - Thread.Sleep(1000); - - var successPanel = Driver.FindElement(By.XPath("//*[@id='body_Panel1_content']")); - Assert.IsNotNull(successPanel); - } - - [Test] - public void Install_Contour_Package() - { - Driver.Navigate().GoToUrl(BaseUrl + "/umbraco/login.aspx?redir="); - Driver.FindElement(By.Id("lname")).Clear(); - Driver.FindElement(By.Id("lname")).SendKeys("admin"); - Driver.FindElement(By.Id("passw")).Clear(); - Driver.FindElement(By.Id("passw")).SendKeys("test"); - Driver.FindElement(By.Id("Button1")).Click(); - Thread.Sleep(1000); - - Driver.Navigate().GoToUrl(BaseUrl + "/umbraco/umbraco.aspx#developer"); - Thread.Sleep(2000); - - var builder = new Actions(Driver); - var packagesNode = Driver.FindElement(By.XPath("//*[@id='init'][3]")); - builder.MoveToElement(packagesNode).DoubleClick().Build().Perform(); - Thread.Sleep(1000); - - var installPackageNode = Driver.FindElement(By.XPath("/html/body/div[2]/div/div/div[2]/div/div/div/div/ul/li/ul/li[3]/ul/li[4]/a/div")); - builder.MoveToElement(installPackageNode).Click().Build().Perform(); - Thread.Sleep(1000); - - var rightFrame = Driver.FindElement(By.XPath("//*[@id='right']")); - Driver.SwitchTo().Frame(rightFrame); - - const string packagesDir = @"C:\\Downloads\\Packages\\"; - var file = new DirectoryInfo(packagesDir).GetFiles().First(f => f.Name.ToLowerInvariant().StartsWith("UmbracoContour".ToLowerInvariant())); - - Driver.FindElement(By.Id("cb")).Click(); - Driver.FindElement(By.XPath("//input[@type='file']")).SendKeys(file.FullName); - Driver.FindElement(By.Id("body_ButtonLoadPackage")).Click(); - Driver.FindElement(By.Id("body_acceptCheckbox")).Click(); - Driver.FindElement(By.Id("body_ButtonInstall")).Click(); - Thread.Sleep(1000); - - var successPanel = Driver.FindElement(By.XPath("//*[@id='body_Panel1_content']")); - Assert.IsNotNull(successPanel); - } - - //[Test] - //public void Install_CMS_Import_Package() - //{ - // Driver.Navigate().GoToUrl(BaseUrl + "/umbraco/login.aspx?redir="); - // Driver.FindElement(By.Id("lname")).Clear(); - // Driver.FindElement(By.Id("lname")).SendKeys("admin"); - // Driver.FindElement(By.Id("passw")).Clear(); - // Driver.FindElement(By.Id("passw")).SendKeys("test"); - // Driver.FindElement(By.Id("Button1")).Click(); - // Thread.Sleep(1000); - - // Driver.Navigate().GoToUrl(BaseUrl + "/umbraco/umbraco.aspx#developer"); - // Thread.Sleep(2000); - - // var builder = new Actions(Driver); - // var packagesNode = Driver.FindElement(By.XPath("//*[@id='init'][3]")); - // builder.MoveToElement(packagesNode).DoubleClick().Build().Perform(); - // Thread.Sleep(1000); - - // var installPackageNode = Driver.FindElement(By.XPath("/html/body/div[2]/div/div/div[2]/div/div/div/div/ul/li/ul/li[3]/ul/li[4]/a/div")); - // builder.MoveToElement(installPackageNode).Click().Build().Perform(); - // Thread.Sleep(1000); - - // var rightFrame = Driver.FindElement(By.XPath("//*[@id='right']")); - // Driver.SwitchTo().Frame(rightFrame); - - // Driver.FindElement(By.Id("cb")).Click(); - // Driver.FindElement(By.Id("body_file1")).SendKeys("C:\\Downloads\\Packages\\CMSImport-2.3.1.zip"); - // Driver.FindElement(By.Id("body_ButtonLoadPackage")).Click(); - // Driver.FindElement(By.Id("body_acceptCheckbox")).Click(); - // Driver.FindElement(By.Id("body_ButtonInstall")).Click(); - // Thread.Sleep(1000); - - // var successPanel = Driver.FindElement(By.XPath("//*[@id='body_Panel1_content']")); - // Assert.IsNotNull(successPanel); - //} - } -} \ No newline at end of file diff --git a/src/Umbraco.Tests/Migrations/SqlScripts/SqlCe-SchemaAndData-4110.sql b/src/Umbraco.Tests/Migrations/SqlScripts/SqlCe-SchemaAndData-4110.sql index ee157be2a7..4aeb066f54 100644 Binary files a/src/Umbraco.Tests/Migrations/SqlScripts/SqlCe-SchemaAndData-4110.sql and b/src/Umbraco.Tests/Migrations/SqlScripts/SqlCe-SchemaAndData-4110.sql differ diff --git a/src/Umbraco.Tests/Models/Collections/Item.cs b/src/Umbraco.Tests/Models/Collections/Item.cs index ff1789a850..f20648fd41 100644 --- a/src/Umbraco.Tests/Models/Collections/Item.cs +++ b/src/Umbraco.Tests/Models/Collections/Item.cs @@ -12,7 +12,6 @@ namespace Umbraco.Tests.Models.Collections public abstract class Item : IEntity, ICanBeDirty { private bool _hasIdentity; - private int? _hash; private int _id; private Guid _key; @@ -173,15 +172,7 @@ namespace Umbraco.Tests.Models.Collections public static bool operator ==(Item left, Item right) { - /*if (ReferenceEquals(null, left)) - return false; - - if(ReferenceEquals(null, right)) - return false;*/ - return ReferenceEquals(left, right); - - return left.Equals(right); } public static bool operator !=(Item left, Item right) @@ -250,4 +241,4 @@ namespace Umbraco.Tests.Models.Collections return this.MemberwiseClone(); } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Tests/Persistence/PetaPocoExtensionsTest.cs b/src/Umbraco.Tests/Persistence/PetaPocoExtensionsTest.cs index 4decb03ca0..d06d422d83 100644 --- a/src/Umbraco.Tests/Persistence/PetaPocoExtensionsTest.cs +++ b/src/Umbraco.Tests/Persistence/PetaPocoExtensionsTest.cs @@ -1,15 +1,11 @@ using System; using System.Collections.Generic; using System.Text.RegularExpressions; -using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Logging; -using Umbraco.Core.Logging; using Umbraco.Core.Models.Rdbms; -using Umbraco.Core.ObjectResolution; using Umbraco.Core.Persistence; -using Umbraco.Core.Persistence.Mappers; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Tests.TestHelpers; diff --git a/src/Umbraco.Tests/Persistence/Querying/PetaPocoSqlTests.cs b/src/Umbraco.Tests/Persistence/Querying/PetaPocoSqlTests.cs index 39f3f484d0..7bb2ee581d 100644 --- a/src/Umbraco.Tests/Persistence/Querying/PetaPocoSqlTests.cs +++ b/src/Umbraco.Tests/Persistence/Querying/PetaPocoSqlTests.cs @@ -1,38 +1,38 @@ -using System; +using NUnit.Framework; using System.Diagnostics; -using System.Linq; -using NUnit.Framework; -using Umbraco.Core.Models; -using Umbraco.Core.Models.Membership; using Umbraco.Core.Models.Rdbms; using Umbraco.Core.Persistence; -using Umbraco.Core.Persistence.Repositories; -using Umbraco.Tests.TestHelpers; using Umbraco.Core.Persistence.Querying; +using Umbraco.Core.Persistence.SqlSyntax; +using Umbraco.Tests.TestHelpers; namespace Umbraco.Tests.Persistence.Querying { [TestFixture] public class PetaPocoSqlTests : BaseUsingSqlCeSyntax { - //x => + private readonly ISqlSyntaxProvider _sqlSyntax = new SqlCeSyntaxProvider(); [Test] public void Where_Clause_With_Starts_With_Additional_Parameters() { var content = new NodeDto() { NodeId = 123, Path = "-1,123" }; - var sql = new Sql("SELECT *").From().Where(x => x.Path.SqlStartsWith(content.Path, TextColumnType.NVarchar)); + var sql = new Sql("SELECT *") + .From(_sqlSyntax) + .Where(x => x.Path.SqlStartsWith(content.Path, TextColumnType.NVarchar), _sqlSyntax); Assert.AreEqual("SELECT * FROM [umbracoNode] WHERE (upper([umbracoNode].[path]) LIKE upper(@0))", sql.SQL.Replace("\n", " ")); Assert.AreEqual(1, sql.Arguments.Length); - Assert.AreEqual(content.Path + "%", sql.Arguments[0]); + Assert.AreEqual(content.Path + "%", sql.Arguments[0]); } [Test] public void Where_Clause_With_Starts_With_By_Variable() { - var content = new NodeDto() {NodeId = 123, Path = "-1,123"}; - var sql = new Sql("SELECT *").From().Where(x => x.Path.StartsWith(content.Path) && x.NodeId != content.NodeId); + var content = new NodeDto() { NodeId = 123, Path = "-1,123" }; + var sql = new Sql("SELECT *") + .From(_sqlSyntax) + .Where(x => x.Path.StartsWith(content.Path) && x.NodeId != content.NodeId, _sqlSyntax); Assert.AreEqual("SELECT * FROM [umbracoNode] WHERE ((upper([umbracoNode].[path]) LIKE upper(@0) AND ([umbracoNode].[id] <> @1)))", sql.SQL.Replace("\n", " ")); Assert.AreEqual(2, sql.Arguments.Length); @@ -43,8 +43,10 @@ namespace Umbraco.Tests.Persistence.Querying [Test] public void Where_Clause_With_Not_Starts_With() { - var level = 1; - var sql = new Sql("SELECT *").From().Where(x => x.Level == level && !x.Path.StartsWith("-20")); + const int level = 1; + var sql = new Sql("SELECT *") + .From(_sqlSyntax) + .Where(x => x.Level == level && x.Path.StartsWith("-20") == false, _sqlSyntax); Assert.AreEqual("SELECT * FROM [umbracoNode] WHERE ((([umbracoNode].[level] = @0) AND NOT (upper([umbracoNode].[path]) LIKE upper(@1))))", sql.SQL.Replace("\n", " ")); Assert.AreEqual(2, sql.Arguments.Length); @@ -55,8 +57,10 @@ namespace Umbraco.Tests.Persistence.Querying [Test] public void Where_Clause_With_EqualsFalse_Starts_With() { - var level = 1; - var sql = new Sql("SELECT *").From().Where(x => x.Level == level && x.Path.StartsWith("-20") == false); + const int level = 1; + var sql = new Sql("SELECT *") + .From(_sqlSyntax) + .Where(x => x.Level == level && x.Path.StartsWith("-20") == false, _sqlSyntax); Assert.AreEqual("SELECT * FROM [umbracoNode] WHERE ((([umbracoNode].[level] = @0) AND NOT (upper([umbracoNode].[path]) LIKE upper(@1))))", sql.SQL.Replace("\n", " ")); Assert.AreEqual(2, sql.Arguments.Length); @@ -67,7 +71,9 @@ namespace Umbraco.Tests.Persistence.Querying [Test] public void Where_Clause_With_Equals_Clause() { - var sql = new Sql("SELECT *").From().Where(x => x.Text.Equals("Hello@world.com")); + var sql = new Sql("SELECT *") + .From(_sqlSyntax) + .Where(x => x.Text.Equals("Hello@world.com"), _sqlSyntax); Assert.AreEqual("SELECT * FROM [umbracoNode] WHERE (upper([umbracoNode].[text]) = upper(@0))", sql.SQL.Replace("\n", " ")); Assert.AreEqual(1, sql.Arguments.Length); @@ -77,7 +83,9 @@ namespace Umbraco.Tests.Persistence.Querying [Test] public void Where_Clause_With_False_Boolean() { - var sql = new Sql("SELECT *").From().Where(x => !x.Trashed); + var sql = new Sql("SELECT *") + .From(_sqlSyntax) + .Where(x => x.Trashed == false, _sqlSyntax); Assert.AreEqual("SELECT * FROM [umbracoNode] WHERE (NOT ([umbracoNode].[trashed] = @0))", sql.SQL.Replace("\n", " ")); Assert.AreEqual(1, sql.Arguments.Length); @@ -87,7 +95,9 @@ namespace Umbraco.Tests.Persistence.Querying [Test] public void Where_Clause_With_EqualsFalse_Boolean() { - var sql = new Sql("SELECT *").From().Where(x => x.Trashed == false); + var sql = new Sql("SELECT *") + .From(_sqlSyntax) + .Where(x => x.Trashed == false, _sqlSyntax); Assert.AreEqual("SELECT * FROM [umbracoNode] WHERE (NOT ([umbracoNode].[trashed] = @0))", sql.SQL.Replace("\n", " ")); Assert.AreEqual(1, sql.Arguments.Length); @@ -97,7 +107,9 @@ namespace Umbraco.Tests.Persistence.Querying [Test] public void Where_Clause_With_Boolean() { - var sql = new Sql("SELECT *").From().Where(x => x.Trashed); + var sql = new Sql("SELECT *") + .From(_sqlSyntax) + .Where(x => x.Trashed, _sqlSyntax); Assert.AreEqual("SELECT * FROM [umbracoNode] WHERE ([umbracoNode].[trashed] = @0)", sql.SQL.Replace("\n", " ")); Assert.AreEqual(1, sql.Arguments.Length); @@ -107,7 +119,9 @@ namespace Umbraco.Tests.Persistence.Querying [Test] public void Where_Clause_With_ToUpper() { - var sql = new Sql("SELECT *").From().Where(x => x.Text.ToUpper() == "hello".ToUpper()); + var sql = new Sql("SELECT *") + .From(_sqlSyntax) + .Where(x => x.Text.ToUpper() == "hello".ToUpper(), _sqlSyntax); Assert.AreEqual("SELECT * FROM [umbracoNode] WHERE ((upper([umbracoNode].[text]) = upper(@0)))", sql.SQL.Replace("\n", " ")); Assert.AreEqual(1, sql.Arguments.Length); @@ -117,7 +131,9 @@ namespace Umbraco.Tests.Persistence.Querying [Test] public void Where_Clause_With_ToString() { - var sql = new Sql("SELECT *").From().Where(x => x.Text == 1.ToString()); + var sql = new Sql("SELECT *") + .From(_sqlSyntax) + .Where(x => x.Text == 1.ToString(), _sqlSyntax); Assert.AreEqual("SELECT * FROM [umbracoNode] WHERE (([umbracoNode].[text] = @0))", sql.SQL.Replace("\n", " ")); Assert.AreEqual(1, sql.Arguments.Length); @@ -127,7 +143,9 @@ namespace Umbraco.Tests.Persistence.Querying [Test] public void Where_Clause_With_Wildcard() { - var sql = new Sql("SELECT *").From().Where(x => x.Text.StartsWith("D")); + var sql = new Sql("SELECT *") + .From(_sqlSyntax) + .Where(x => x.Text.StartsWith("D"), _sqlSyntax); Assert.AreEqual("SELECT * FROM [umbracoNode] WHERE (upper([umbracoNode].[text]) LIKE upper(@0))", sql.SQL.Replace("\n", " ")); Assert.AreEqual(1, sql.Arguments.Length); @@ -137,7 +155,9 @@ namespace Umbraco.Tests.Persistence.Querying [Test] public void Where_Clause_Single_Constant() { - var sql = new Sql("SELECT *").From().Where(x => x.NodeId == 2); + var sql = new Sql("SELECT *") + .From(_sqlSyntax) + .Where(x => x.NodeId == 2, _sqlSyntax); Assert.AreEqual("SELECT * FROM [umbracoNode] WHERE (([umbracoNode].[id] = @0))", sql.SQL.Replace("\n", " ")); Assert.AreEqual(1, sql.Arguments.Length); @@ -147,7 +167,9 @@ namespace Umbraco.Tests.Persistence.Querying [Test] public void Where_Clause_And_Constant() { - var sql = new Sql("SELECT *").From().Where(x => x.NodeId != 2 && x.NodeId != 3); + var sql = new Sql("SELECT *") + .From(_sqlSyntax) + .Where(x => x.NodeId != 2 && x.NodeId != 3, _sqlSyntax); Assert.AreEqual("SELECT * FROM [umbracoNode] WHERE ((([umbracoNode].[id] <> @0) AND ([umbracoNode].[id] <> @1)))", sql.SQL.Replace("\n", " ")); Assert.AreEqual(2, sql.Arguments.Length); @@ -158,7 +180,9 @@ namespace Umbraco.Tests.Persistence.Querying [Test] public void Where_Clause_Or_Constant() { - var sql = new Sql("SELECT *").From().Where(x => x.Text == "hello" || x.NodeId == 3); + var sql = new Sql("SELECT *") + .From(_sqlSyntax) + .Where(x => x.Text == "hello" || x.NodeId == 3, _sqlSyntax); Assert.AreEqual("SELECT * FROM [umbracoNode] WHERE ((([umbracoNode].[text] = @0) OR ([umbracoNode].[id] = @1)))", sql.SQL.Replace("\n", " ")); Assert.AreEqual(2, sql.Arguments.Length); @@ -173,7 +197,7 @@ namespace Umbraco.Tests.Persistence.Querying expected.Select("*").From("[cmsContent]"); var sql = new Sql(); - sql.Select("*").From(); + sql.Select("*").From(_sqlSyntax); Assert.That(sql.SQL, Is.EqualTo(expected.SQL)); @@ -190,9 +214,9 @@ namespace Umbraco.Tests.Persistence.Querying .On("[cmsDocument].[versionId] = [cmsContentVersion].[VersionId]"); var sql = new Sql(); - sql.Select("*").From() - .InnerJoin() - .On(left => left.VersionId, right => right.VersionId); + sql.Select("*").From(_sqlSyntax) + .InnerJoin(_sqlSyntax) + .On(_sqlSyntax, left => left.VersionId, right => right.VersionId); Assert.That(sql.SQL, Is.EqualTo(expected.SQL)); @@ -206,7 +230,7 @@ namespace Umbraco.Tests.Persistence.Querying expected.Select("*").From("[cmsContent]").OrderBy("([cmsContent].[contentType])"); var sql = new Sql(); - sql.Select("*").From().OrderBy(x => x.ContentTypeId); + sql.Select("*").From(_sqlSyntax).OrderBy(x => x.ContentTypeId, _sqlSyntax); Assert.That(sql.SQL, Is.EqualTo(expected.SQL)); @@ -220,7 +244,7 @@ namespace Umbraco.Tests.Persistence.Querying expected.Select("*").From("[cmsContent]").GroupBy("[contentType]"); var sql = new Sql(); - sql.Select("*").From().GroupBy(x => x.ContentTypeId); + sql.Select("*").From(_sqlSyntax).GroupBy(x => x.ContentTypeId, _sqlSyntax); Assert.That(sql.SQL, Is.EqualTo(expected.SQL)); @@ -234,7 +258,7 @@ namespace Umbraco.Tests.Persistence.Querying expected.Select("*").From("[cmsContent]").Where("([cmsContent].[nodeId] = @0)", 1045); var sql = new Sql(); - sql.Select("*").From().Where(x => x.NodeId == 1045); + sql.Select("*").From(_sqlSyntax).Where(x => x.NodeId == 1045, _sqlSyntax); Assert.That(sql.SQL, Is.EqualTo(expected.SQL)); @@ -252,13 +276,82 @@ namespace Umbraco.Tests.Persistence.Querying var sql = new Sql(); sql.Select("*") - .From() - .Where(x => x.NodeId == 1045) - .Where(x => x.ContentTypeId == 1050); + .From(_sqlSyntax) + .Where(x => x.NodeId == 1045, _sqlSyntax) + .Where(x => x.ContentTypeId == 1050, _sqlSyntax); + + Assert.That(sql.SQL, Is.EqualTo(expected.SQL)); + + Debug.Print(sql.SQL); + } + + [Test] + public void Can_Use_Select_With_Star_And_Predicate() + { + var expected = new Sql(); + expected.Select("[cmsContent].*") + .From("[cmsContent]"); + + var sql = new Sql(); + sql.Select(_sqlSyntax) + .From(_sqlSyntax); + + Assert.That(sql.SQL, Is.EqualTo(expected.SQL)); + + Debug.Print(sql.SQL); + } + + [Test] + public void Can_Use_Select_With_One_Column_And_Predicate() + { + var expected = new Sql(); + expected.Select("[cmsContent].[nodeId]") + .From("[cmsContent]"); + + var sql = new Sql(); + sql.Select(_sqlSyntax, c => c.NodeId) + .From(_sqlSyntax); + + Assert.That(sql.SQL, Is.EqualTo(expected.SQL)); + + Debug.Print(sql.SQL); + } + + [Test] + public void Can_Use_Select_With_Multiple_Column_And_Predicate() + { + var expected = new Sql(); + expected.Select("[cmsContent].[nodeId]", "[cmsContent].[contentType]", "[cmsContent].[pk]") + .From("[cmsContent]"); + + var sql = new Sql(); + sql.Select(_sqlSyntax, c => c.NodeId, c => c.ContentTypeId, c => c.PrimaryKey) + .From(_sqlSyntax); + + Assert.That(sql.SQL, Is.EqualTo(expected.SQL)); + + Debug.Print(sql.SQL); + } + + [Test] + public void Can_InnerJoin_With_Select_And_AndSelect() + { + var expected = new Sql(); + expected.Select("[cmsDocument].[nodeId], [cmsDocument].[published]\n, [cmsContentVersion].[id]") + .From("[cmsDocument]") + .InnerJoin("[cmsContentVersion]") + .On("[cmsDocument].[versionId] = [cmsContentVersion].[VersionId]"); + + var sql = new Sql(); + sql.Select(_sqlSyntax, d => d.NodeId, d => d.Published) + .AndSelect(_sqlSyntax, cv => cv.Id) + .From(_sqlSyntax) + .InnerJoin(_sqlSyntax) + .On(_sqlSyntax, left => left.VersionId, right => right.VersionId); Assert.That(sql.SQL, Is.EqualTo(expected.SQL)); Debug.Print(sql.SQL); } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs index 9355b90546..bc6c58264e 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs @@ -139,7 +139,7 @@ namespace Umbraco.Tests.Persistence.Repositories Assert.That(relationTypes, Is.Not.Null); Assert.That(relationTypes.Any(), Is.True); Assert.That(relationTypes.Any(x => x == null), Is.False); - Assert.That(relationTypes.Count(), Is.EqualTo(4)); + Assert.That(relationTypes.Count(), Is.EqualTo(5)); } } @@ -174,7 +174,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Act var exists = repository.Exists(3); - var doesntExist = repository.Exists(5); + var doesntExist = repository.Exists(6); // Assert Assert.That(exists, Is.True); @@ -196,7 +196,7 @@ namespace Umbraco.Tests.Persistence.Repositories int count = repository.Count(query); // Assert - Assert.That(count, Is.EqualTo(4)); + Assert.That(count, Is.EqualTo(5)); } } diff --git a/src/Umbraco.Tests/Plugins/PluginManagerTests.cs b/src/Umbraco.Tests/Plugins/PluginManagerTests.cs index 970259618a..ef2c61f6b2 100644 --- a/src/Umbraco.Tests/Plugins/PluginManagerTests.cs +++ b/src/Umbraco.Tests/Plugins/PluginManagerTests.cs @@ -285,8 +285,7 @@ AnotherContentFinder public void Resolves_Attributed_Trees() { var trees = _manager.ResolveAttributedTrees(); - // commit 6c5e35ec2cbfa31be6790d1228e0c2faf5f55bc8 brings the count down to 14 - Assert.AreEqual(6, trees.Count()); + Assert.AreEqual(5, trees.Count()); } [Test] @@ -300,7 +299,7 @@ AnotherContentFinder public void Resolves_Trees() { var trees = _manager.ResolveTrees(); - Assert.AreEqual(34, trees.Count()); + Assert.AreEqual(33, trees.Count()); } [Test] diff --git a/src/Umbraco.Tests/PropertyEditors/MultiValuePropertyEditorTests.cs b/src/Umbraco.Tests/PropertyEditors/MultiValuePropertyEditorTests.cs index 42b9d174df..0062dbdce2 100644 --- a/src/Umbraco.Tests/PropertyEditors/MultiValuePropertyEditorTests.cs +++ b/src/Umbraco.Tests/PropertyEditors/MultiValuePropertyEditorTests.cs @@ -5,6 +5,7 @@ using NUnit.Framework; using Umbraco.Core.Models; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Services; +using Umbraco.Tests.TestHelpers; using Umbraco.Web.PropertyEditors; namespace Umbraco.Tests.PropertyEditors @@ -14,7 +15,7 @@ namespace Umbraco.Tests.PropertyEditors /// multiple values such as the drop down list, check box list, color picker, etc.... /// [TestFixture] - public class MultiValuePropertyEditorTests + public class MultiValuePropertyEditorTests : BaseUmbracoApplicationTest { //TODO: Test the other formatting methods for the drop down classes @@ -111,4 +112,4 @@ namespace Umbraco.Tests.PropertyEditors } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs index e9af22b968..5ec34ea781 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs @@ -6,21 +6,19 @@ using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; -using Umbraco.Core.PropertyEditors; -using Umbraco.Tests.TestHelpers; using Umbraco.Web; using Umbraco.Web.Models; namespace Umbraco.Tests.PublishedContent { - /// - /// Tests the methods on IPublishedContent using the DefaultPublishedContentStore - /// - [TestFixture] + /// + /// Tests the methods on IPublishedContent using the DefaultPublishedContentStore + /// + [TestFixture] public class PublishedContentTests : PublishedContentTestBase - { + { private PluginManager _pluginManager; - + public override void Initialize() { // required so we can access property.Value @@ -50,7 +48,7 @@ namespace Umbraco.Tests.PublishedContent new PublishedPropertyType("content", 0, Constants.PropertyEditors.TinyMCEAlias), new PublishedPropertyType("testRecursive", 0, "?"), }; - var compositionAliases = new[] {"MyCompositionAlias"}; + var compositionAliases = new[] { "MyCompositionAlias" }; var type = new AutoPublishedContentType(0, "anything", compositionAliases, propertyTypes); PublishedContentType.GetPublishedContentTypeCallback = (alias) => type; } @@ -62,17 +60,17 @@ namespace Umbraco.Tests.PublishedContent ApplicationContext.Current = null; } - protected override void FreezeResolution() - { + protected override void FreezeResolution() + { var types = PluginManager.Current.ResolveTypes(); PublishedContentModelFactoryResolver.Current = new PublishedContentModelFactoryResolver( new PublishedContentModelFactory(types)); - base.FreezeResolution(); - } + base.FreezeResolution(); + } - protected override string GetXmlContent(int templateId) - { - return @" + protected override string GetXmlContent(int templateId) + { + return @" @@ -95,11 +93,14 @@ namespace Umbraco.Tests.PublishedContent - - - + + + + + + - 1 + 1 @@ -110,15 +111,15 @@ namespace Umbraco.Tests.PublishedContent "; - } + } - internal IPublishedContent GetNode(int id) - { - var ctx = GetUmbracoContext("/test", 1234); - var doc = ctx.ContentCache.GetById(id); - Assert.IsNotNull(doc); - return doc; - } + internal IPublishedContent GetNode(int id) + { + var ctx = GetUmbracoContext("/test", 1234); + var doc = ctx.ContentCache.GetById(id); + Assert.IsNotNull(doc); + return doc; + } [Test] [Ignore("IPublishedContent currently (6.1 as of april 25, 2013) has bugs")] @@ -183,7 +184,7 @@ namespace Umbraco.Tests.PublishedContent .Where(x => x.IsVisible()) .ToContentSet(); - Assert.AreEqual(3, items.Count()); + Assert.AreEqual(4, items.Count()); foreach (var d in items) { @@ -193,6 +194,10 @@ namespace Umbraco.Tests.PublishedContent Assert.IsTrue(d.IsFirst()); Assert.IsFalse(d.IsLast()); break; + case 117: + Assert.IsFalse(d.IsFirst()); + Assert.IsFalse(d.IsLast()); + break; case 1177: Assert.IsFalse(d.IsFirst()); Assert.IsFalse(d.IsLast()); @@ -213,7 +218,7 @@ namespace Umbraco.Tests.PublishedContent { public Home(IPublishedContent content) : base(content) - {} + { } } [Test] @@ -255,7 +260,7 @@ namespace Umbraco.Tests.PublishedContent { var doc = GetNode(1173); - var items = doc.Children.Take(3).ToContentSet(); + var items = doc.Children.Take(4).ToContentSet(); foreach (var item in items) { @@ -310,164 +315,187 @@ namespace Umbraco.Tests.PublishedContent } } - [Test] - public void Descendants_Ordered_Properly() - { + [Test] + public void Descendants_Ordered_Properly() + { var doc = GetNode(1046); - var expected = new[] {1046, 1173, 1174, 1177, 1178, 1176, 1175, 4444, 1172}; - var exindex = 0; + var expected = new[] { 1046, 1173, 1174, 117, 1177, 1178, 1179, 1176, 1175, 4444, 1172 }; + var exindex = 0; // must respect the XPath descendants-or-self axis! foreach (var d in doc.DescendantsOrSelf()) Assert.AreEqual(expected[exindex++], d.Id); - } + } - [Test] - public void Test_Get_Recursive_Val() - { - var doc = GetNode(1174); - var rVal = doc.GetRecursiveValue("testRecursive"); - var nullVal = doc.GetRecursiveValue("DoNotFindThis"); - Assert.AreEqual("This is the recursive val", rVal); - Assert.AreEqual("", nullVal); - } + [Test] + public void Test_Get_Recursive_Val() + { + var doc = GetNode(1174); + var rVal = doc.GetRecursiveValue("testRecursive"); + var nullVal = doc.GetRecursiveValue("DoNotFindThis"); + Assert.AreEqual("This is the recursive val", rVal); + Assert.AreEqual("", nullVal); + } - [Test] - public void Get_Property_Value_Uses_Converter() - { - var doc = GetNode(1173); + [Test] + public void Get_Property_Value_Uses_Converter() + { + var doc = GetNode(1173); - var propVal = doc.GetPropertyValue("content"); + var propVal = doc.GetPropertyValue("content"); Assert.IsInstanceOf(typeof(IHtmlString), propVal); - Assert.AreEqual("
This is some content
", propVal.ToString()); + Assert.AreEqual("
This is some content
", propVal.ToString()); - var propVal2 = doc.GetPropertyValue("content"); + var propVal2 = doc.GetPropertyValue("content"); Assert.IsInstanceOf(typeof(IHtmlString), propVal2); Assert.AreEqual("
This is some content
", propVal2.ToString()); var propVal3 = doc.GetPropertyValue("Content"); Assert.IsInstanceOf(typeof(IHtmlString), propVal3); Assert.AreEqual("
This is some content
", propVal3.ToString()); - } + } - [Test] - public void Complex_Linq() - { - var doc = GetNode(1173); + [Test] + public void Complex_Linq() + { + var doc = GetNode(1173); - var result = doc.Ancestors().OrderBy(x => x.Level) - .Single() - .Descendants() - .FirstOrDefault(x => x.GetPropertyValue("selectedNodes", "").Split(',').Contains("1173")); + var result = doc.Ancestors().OrderBy(x => x.Level) + .Single() + .Descendants() + .FirstOrDefault(x => x.GetPropertyValue("selectedNodes", "").Split(',').Contains("1173")); - Assert.IsNotNull(result); - } + Assert.IsNotNull(result); + } - [Test] - public void Index() - { - var doc = GetNode(1173); - Assert.AreEqual(0, doc.Index()); - doc = GetNode(1176); - Assert.AreEqual(3, doc.Index()); - doc = GetNode(1177); - Assert.AreEqual(1, doc.Index()); - doc = GetNode(1178); - Assert.AreEqual(2, doc.Index()); - } + [Test] + public void Index() + { + var doc = GetNode(1173); + Assert.AreEqual(0, doc.Index()); + doc = GetNode(1176); + Assert.AreEqual(4, doc.Index()); + doc = GetNode(1177); + Assert.AreEqual(2, doc.Index()); + doc = GetNode(1178); + Assert.AreEqual(3, doc.Index()); + } - [Test] - public void Is_First() - { - var doc = GetNode(1046); //test root nodes - Assert.IsTrue(doc.IsFirst()); - doc = GetNode(1172); - Assert.IsFalse(doc.IsFirst()); - doc = GetNode(1173); //test normal nodes - Assert.IsTrue(doc.IsFirst()); - doc = GetNode(1175); - Assert.IsFalse(doc.IsFirst()); - } + [Test] + public void Is_First() + { + var doc = GetNode(1046); //test root nodes + Assert.IsTrue(doc.IsFirst()); + doc = GetNode(1172); + Assert.IsFalse(doc.IsFirst()); + doc = GetNode(1173); //test normal nodes + Assert.IsTrue(doc.IsFirst()); + doc = GetNode(1175); + Assert.IsFalse(doc.IsFirst()); + } - [Test] - public void Is_Not_First() - { - var doc = GetNode(1046); //test root nodes - Assert.IsFalse(doc.IsNotFirst()); - doc = GetNode(1172); - Assert.IsTrue(doc.IsNotFirst()); - doc = GetNode(1173); //test normal nodes - Assert.IsFalse(doc.IsNotFirst()); - doc = GetNode(1175); - Assert.IsTrue(doc.IsNotFirst()); - } + [Test] + public void Is_Not_First() + { + var doc = GetNode(1046); //test root nodes + Assert.IsFalse(doc.IsNotFirst()); + doc = GetNode(1172); + Assert.IsTrue(doc.IsNotFirst()); + doc = GetNode(1173); //test normal nodes + Assert.IsFalse(doc.IsNotFirst()); + doc = GetNode(1175); + Assert.IsTrue(doc.IsNotFirst()); + } - [Test] - public void Is_Position() - { - var doc = GetNode(1046); //test root nodes - Assert.IsTrue(doc.IsPosition(0)); - doc = GetNode(1172); - Assert.IsTrue(doc.IsPosition(1)); - doc = GetNode(1173); //test normal nodes - Assert.IsTrue(doc.IsPosition(0)); - doc = GetNode(1175); - Assert.IsTrue(doc.IsPosition(1)); - } + [Test] + public void Is_Position() + { + var doc = GetNode(1046); //test root nodes + Assert.IsTrue(doc.IsPosition(0)); + doc = GetNode(1172); + Assert.IsTrue(doc.IsPosition(1)); + doc = GetNode(1173); //test normal nodes + Assert.IsTrue(doc.IsPosition(0)); + doc = GetNode(1175); + Assert.IsTrue(doc.IsPosition(1)); + } - [Test] - public void Children_GroupBy_DocumentTypeAlias() - { - var doc = GetNode(1046); + [Test] + public void Children_GroupBy_DocumentTypeAlias() + { + var doc = GetNode(1046); - var found1 = doc.Children.GroupBy("DocumentTypeAlias"); + var found1 = doc.Children.GroupBy("DocumentTypeAlias"); - Assert.AreEqual(2, found1.Count()); - Assert.AreEqual(2, found1.Single(x => x.Key.ToString() == "Home").Count()); - Assert.AreEqual(1, found1.Single(x => x.Key.ToString() == "CustomDocument").Count()); - } + Assert.AreEqual(2, found1.Count()); + Assert.AreEqual(2, found1.Single(x => x.Key.ToString() == "Home").Count()); + Assert.AreEqual(1, found1.Single(x => x.Key.ToString() == "CustomDocument").Count()); + } - [Test] - public void Children_Where_DocumentTypeAlias() - { - var doc = GetNode(1046); + [Test] + public void Children_Where_DocumentTypeAlias() + { + var doc = GetNode(1046); - var found1 = doc.Children.Where("DocumentTypeAlias == \"CustomDocument\""); - var found2 = doc.Children.Where("DocumentTypeAlias == \"Home\""); + var found1 = doc.Children.Where("DocumentTypeAlias == \"CustomDocument\""); + var found2 = doc.Children.Where("DocumentTypeAlias == \"Home\""); - Assert.AreEqual(1, found1.Count()); - Assert.AreEqual(2, found2.Count()); - } + Assert.AreEqual(1, found1.Count()); + Assert.AreEqual(2, found2.Count()); + } - [Test] - public void Children_Order_By_Update_Date() - { - var doc = GetNode(1173); + [Test] + public void Children_Order_By_Update_Date() + { + var doc = GetNode(1173); - var ordered = doc.Children.OrderBy("UpdateDate"); + var ordered = doc.Children.OrderBy("UpdateDate"); - var correctOrder = new[] { 1178, 1177, 1174, 1176 }; - for (var i = 0; i < correctOrder.Length; i++) - { - Assert.AreEqual(correctOrder[i], ordered.ElementAt(i).Id); - } + var correctOrder = new[] { 1178, 1177, 1174, 1176 }; + for (var i = 0; i < correctOrder.Length; i++) + { + Assert.AreEqual(correctOrder[i], ordered.ElementAt(i).Id); + } - } + } - [Test] - public void FirstChild() - { - var doc = GetNode(1173); // has child nodes - Assert.IsNotNull(doc.FirstChild()); - Assert.IsNotNull(doc.FirstChild(x => true)); - Assert.IsNotNull(doc.FirstChild()); + [Test] + public void FirstChild() + { + var doc = GetNode(1173); // has child nodes + Assert.IsNotNull(doc.FirstChild()); + Assert.IsNotNull(doc.FirstChild(x => true)); + Assert.IsNotNull(doc.FirstChild()); - doc = GetNode(1175); // does not have child nodes - Assert.IsNull(doc.FirstChild()); - Assert.IsNull(doc.FirstChild(x => true)); - Assert.IsNull(doc.FirstChild()); - } + doc = GetNode(1175); // does not have child nodes + Assert.IsNull(doc.FirstChild()); + Assert.IsNull(doc.FirstChild(x => true)); + Assert.IsNull(doc.FirstChild()); + } + + [Test] + public void FirstChildAsT() + { + var doc = GetNode(1046); // has child nodes + var model = doc.FirstChild(); + + Assert.IsNotNull(model); + Assert.IsTrue(model.Id == 1173); + Assert.IsInstanceOf(model); + Assert.IsInstanceOf(model); + + model = doc.FirstChildAs(x => true); // predicate + + Assert.IsNotNull(model); + Assert.IsTrue(model.Id == 1173); + Assert.IsInstanceOf(model); + Assert.IsInstanceOf(model); + + doc = GetNode(1175); // does not have child nodes + Assert.IsNull(doc.FirstChildAs()); + Assert.IsNull(doc.FirstChildAs(x => true)); + } [Test] public void IsComposedOf() @@ -479,190 +507,388 @@ namespace Umbraco.Tests.PublishedContent Assert.IsTrue(isComposedOf); } - [Test] - public void HasProperty() - { - var doc = GetNode(1173); + [Test] + public void HasProperty() + { + var doc = GetNode(1173); - var hasProp = doc.HasProperty(Constants.Conventions.Content.UrlAlias); + var hasProp = doc.HasProperty(Constants.Conventions.Content.UrlAlias); Assert.IsTrue(hasProp); - } + } - [Test] - public void HasValue() - { - var doc = GetNode(1173); + [Test] + public void HasValue() + { + var doc = GetNode(1173); - var hasValue = doc.HasValue(Constants.Conventions.Content.UrlAlias); - var noValue = doc.HasValue("blahblahblah"); + var hasValue = doc.HasValue(Constants.Conventions.Content.UrlAlias); + var noValue = doc.HasValue("blahblahblah"); - Assert.IsTrue(hasValue); - Assert.IsFalse(noValue); - } + Assert.IsTrue(hasValue); + Assert.IsFalse(noValue); + } - [Test] - public void Ancestors_Where_Visible() - { - var doc = GetNode(1174); + [Test] + public void Ancestors_Where_Visible() + { + var doc = GetNode(1174); - var whereVisible = doc.Ancestors().Where("Visible"); - Assert.AreEqual(1, whereVisible.Count()); + var whereVisible = doc.Ancestors().Where("Visible"); + Assert.AreEqual(1, whereVisible.Count()); - } + } - [Test] - public void Visible() - { - var hidden = GetNode(1046); - var visible = GetNode(1173); + [Test] + public void Visible() + { + var hidden = GetNode(1046); + var visible = GetNode(1173); - Assert.IsFalse(hidden.IsVisible()); - Assert.IsTrue(visible.IsVisible()); - } + Assert.IsFalse(hidden.IsVisible()); + Assert.IsTrue(visible.IsVisible()); + } - [Test] - public void Ancestor_Or_Self() - { - var doc = GetNode(1173); + [Test] + public void Ancestor_Or_Self() + { + var doc = GetNode(1173); - var result = doc.AncestorOrSelf(); + var result = doc.AncestorOrSelf(); - Assert.IsNotNull(result); + Assert.IsNotNull(result); // ancestor-or-self has to be self! Assert.AreEqual(1173, result.Id); - } + } - [Test] - public void U4_4559() - { - var doc = GetNode(1174); - var result = doc.AncestorOrSelf(1); + [Test] + public void U4_4559() + { + var doc = GetNode(1174); + var result = doc.AncestorOrSelf(1); Assert.IsNotNull(result); Assert.AreEqual(1046, result.Id); - } + } - [Test] - public void Ancestors_Or_Self() - { - var doc = GetNode(1174); + [Test] + public void Ancestors_Or_Self() + { + var doc = GetNode(1174); - var result = doc.AncestorsOrSelf(); + var result = doc.AncestorsOrSelf(); - Assert.IsNotNull(result); + Assert.IsNotNull(result); - Assert.AreEqual(3, result.Count()); - Assert.IsTrue(result.Select(x => ((dynamic)x).Id).ContainsAll(new dynamic[] { 1174, 1173, 1046 })); - } + Assert.AreEqual(3, result.Count()); + Assert.IsTrue(result.Select(x => ((dynamic)x).Id).ContainsAll(new dynamic[] { 1174, 1173, 1046 })); + } - [Test] - public void Ancestors() - { - var doc = GetNode(1174); + [Test] + public void Ancestors() + { + var doc = GetNode(1174); - var result = doc.Ancestors(); + var result = doc.Ancestors(); - Assert.IsNotNull(result); + Assert.IsNotNull(result); - Assert.AreEqual(2, result.Count()); - Assert.IsTrue(result.Select(x => ((dynamic)x).Id).ContainsAll(new dynamic[] { 1173, 1046 })); - } + Assert.AreEqual(2, result.Count()); + Assert.IsTrue(result.Select(x => ((dynamic)x).Id).ContainsAll(new dynamic[] { 1173, 1046 })); + } - [Test] - public void Descendants_Or_Self() - { - var doc = GetNode(1046); + [Test] + public void IsAncestor() + { + // Structure: + // - Root : 1046 (no parent) + // -- Home: 1173 (parent 1046) + // -- Custom Doc: 1178 (parent 1173) + // --- Custom Doc2: 1179 (parent: 1178) + // -- Custom Doc4: 117 (parent 1173) + // - Custom Doc3: 1172 (no parent) - var result = doc.DescendantsOrSelf(); + var home = GetNode(1173); + var root = GetNode(1046); + var customDoc = GetNode(1178); + var customDoc2 = GetNode(1179); + var customDoc3 = GetNode(1172); + var customDoc4 = GetNode(117); - Assert.IsNotNull(result); + Assert.IsTrue(root.IsAncestor(customDoc4)); + Assert.IsFalse(root.IsAncestor(customDoc3)); + Assert.IsTrue(root.IsAncestor(customDoc2)); + Assert.IsTrue(root.IsAncestor(customDoc)); + Assert.IsTrue(root.IsAncestor(home)); + Assert.IsFalse(root.IsAncestor(root)); - Assert.AreEqual(8, result.Count()); - Assert.IsTrue(result.Select(x => ((dynamic)x).Id).ContainsAll(new dynamic[] { 1046, 1173, 1174, 1176, 1175 })); - } + Assert.IsTrue(home.IsAncestor(customDoc4)); + Assert.IsFalse(home.IsAncestor(customDoc3)); + Assert.IsTrue(home.IsAncestor(customDoc2)); + Assert.IsTrue(home.IsAncestor(customDoc)); + Assert.IsFalse(home.IsAncestor(home)); + Assert.IsFalse(home.IsAncestor(root)); - [Test] - public void Descendants() - { - var doc = GetNode(1046); + Assert.IsFalse(customDoc.IsAncestor(customDoc4)); + Assert.IsFalse(customDoc.IsAncestor(customDoc3)); + Assert.IsTrue(customDoc.IsAncestor(customDoc2)); + Assert.IsFalse(customDoc.IsAncestor(customDoc)); + Assert.IsFalse(customDoc.IsAncestor(home)); + Assert.IsFalse(customDoc.IsAncestor(root)); - var result = doc.Descendants(); + Assert.IsFalse(customDoc2.IsAncestor(customDoc4)); + Assert.IsFalse(customDoc2.IsAncestor(customDoc3)); + Assert.IsFalse(customDoc2.IsAncestor(customDoc2)); + Assert.IsFalse(customDoc2.IsAncestor(customDoc)); + Assert.IsFalse(customDoc2.IsAncestor(home)); + Assert.IsFalse(customDoc2.IsAncestor(root)); - Assert.IsNotNull(result); + Assert.IsFalse(customDoc3.IsAncestor(customDoc3)); + } - Assert.AreEqual(7, result.Count()); - Assert.IsTrue(result.Select(x => ((dynamic)x).Id).ContainsAll(new dynamic[] { 1173, 1174, 1176, 1175, 4444 })); - } + [Test] + public void IsAncestorOrSelf() + { + // Structure: + // - Root : 1046 (no parent) + // -- Home: 1173 (parent 1046) + // -- Custom Doc: 1178 (parent 1173) + // --- Custom Doc2: 1179 (parent: 1178) + // -- Custom Doc4: 117 (parent 1173) + // - Custom Doc3: 1172 (no parent) - [Test] - public void Up() - { - var doc = GetNode(1173); + var home = GetNode(1173); + var root = GetNode(1046); + var customDoc = GetNode(1178); + var customDoc2 = GetNode(1179); + var customDoc3 = GetNode(1172); + var customDoc4 = GetNode(117); - var result = doc.Up(); + Assert.IsTrue(root.IsAncestorOrSelf(customDoc4)); + Assert.IsFalse(root.IsAncestorOrSelf(customDoc3)); + Assert.IsTrue(root.IsAncestorOrSelf(customDoc2)); + Assert.IsTrue(root.IsAncestorOrSelf(customDoc)); + Assert.IsTrue(root.IsAncestorOrSelf(home)); + Assert.IsTrue(root.IsAncestorOrSelf(root)); - Assert.IsNotNull(result); + Assert.IsTrue(home.IsAncestorOrSelf(customDoc4)); + Assert.IsFalse(home.IsAncestorOrSelf(customDoc3)); + Assert.IsTrue(home.IsAncestorOrSelf(customDoc2)); + Assert.IsTrue(home.IsAncestorOrSelf(customDoc)); + Assert.IsTrue(home.IsAncestorOrSelf(home)); + Assert.IsFalse(home.IsAncestorOrSelf(root)); - Assert.AreEqual((int)1046, (int)result.Id); - } + Assert.IsFalse(customDoc.IsAncestorOrSelf(customDoc4)); + Assert.IsFalse(customDoc.IsAncestorOrSelf(customDoc3)); + Assert.IsTrue(customDoc.IsAncestorOrSelf(customDoc2)); + Assert.IsTrue(customDoc.IsAncestorOrSelf(customDoc)); + Assert.IsFalse(customDoc.IsAncestorOrSelf(home)); + Assert.IsFalse(customDoc.IsAncestorOrSelf(root)); - [Test] - public void Down() - { - var doc = GetNode(1173); + Assert.IsFalse(customDoc2.IsAncestorOrSelf(customDoc4)); + Assert.IsFalse(customDoc2.IsAncestorOrSelf(customDoc3)); + Assert.IsTrue(customDoc2.IsAncestorOrSelf(customDoc2)); + Assert.IsFalse(customDoc2.IsAncestorOrSelf(customDoc)); + Assert.IsFalse(customDoc2.IsAncestorOrSelf(home)); + Assert.IsFalse(customDoc2.IsAncestorOrSelf(root)); - var result = doc.Down(); + Assert.IsTrue(customDoc4.IsAncestorOrSelf(customDoc4)); + Assert.IsTrue(customDoc3.IsAncestorOrSelf(customDoc3)); + } - Assert.IsNotNull(result); - Assert.AreEqual((int)1174, (int)result.Id); - } + [Test] + public void Descendants_Or_Self() + { + var doc = GetNode(1046); - [Test] - public void Next() - { - var doc = GetNode(1173); + var result = doc.DescendantsOrSelf(); - var result = doc.Next(); + Assert.IsNotNull(result); - Assert.IsNotNull(result); + Assert.AreEqual(10, result.Count()); + Assert.IsTrue(result.Select(x => ((dynamic)x).Id).ContainsAll(new dynamic[] { 1046, 1173, 1174, 1176, 1175 })); + } - Assert.AreEqual((int)1175, (int)result.Id); - } + [Test] + public void Descendants() + { + var doc = GetNode(1046); - [Test] - public void Next_Without_Sibling() - { + var result = doc.Descendants(); + + Assert.IsNotNull(result); + + Assert.AreEqual(9, result.Count()); + Assert.IsTrue(result.Select(x => ((dynamic)x).Id).ContainsAll(new dynamic[] { 1173, 1174, 1176, 1175, 4444 })); + } + + [Test] + public void IsDescendant() + { + // Structure: + // - Root : 1046 (no parent) + // -- Home: 1173 (parent 1046) + // -- Custom Doc: 1178 (parent 1173) + // --- Custom Doc2: 1179 (parent: 1178) + // -- Custom Doc4: 117 (parent 1173) + // - Custom Doc3: 1172 (no parent) + + var home = GetNode(1173); + var root = GetNode(1046); + var customDoc = GetNode(1178); + var customDoc2 = GetNode(1179); + var customDoc3 = GetNode(1172); + var customDoc4 = GetNode(117); + + Assert.IsFalse(root.IsDescendant(root)); + Assert.IsFalse(root.IsDescendant(home)); + Assert.IsFalse(root.IsDescendant(customDoc)); + Assert.IsFalse(root.IsDescendant(customDoc2)); + Assert.IsFalse(root.IsDescendant(customDoc3)); + Assert.IsFalse(root.IsDescendant(customDoc4)); + + Assert.IsTrue(home.IsDescendant(root)); + Assert.IsFalse(home.IsDescendant(home)); + Assert.IsFalse(home.IsDescendant(customDoc)); + Assert.IsFalse(home.IsDescendant(customDoc2)); + Assert.IsFalse(home.IsDescendant(customDoc3)); + Assert.IsFalse(home.IsDescendant(customDoc4)); + + Assert.IsTrue(customDoc.IsDescendant(root)); + Assert.IsTrue(customDoc.IsDescendant(home)); + Assert.IsFalse(customDoc.IsDescendant(customDoc)); + Assert.IsFalse(customDoc.IsDescendant(customDoc2)); + Assert.IsFalse(customDoc.IsDescendant(customDoc3)); + Assert.IsFalse(customDoc.IsDescendant(customDoc4)); + + Assert.IsTrue(customDoc2.IsDescendant(root)); + Assert.IsTrue(customDoc2.IsDescendant(home)); + Assert.IsTrue(customDoc2.IsDescendant(customDoc)); + Assert.IsFalse(customDoc2.IsDescendant(customDoc2)); + Assert.IsFalse(customDoc2.IsDescendant(customDoc3)); + Assert.IsFalse(customDoc2.IsDescendant(customDoc4)); + + Assert.IsFalse(customDoc3.IsDescendant(customDoc3)); + } + + [Test] + public void IsDescendantOrSelf() + { + // Structure: + // - Root : 1046 (no parent) + // -- Home: 1173 (parent 1046) + // -- Custom Doc: 1178 (parent 1173) + // --- Custom Doc2: 1179 (parent: 1178) + // -- Custom Doc4: 117 (parent 1173) + // - Custom Doc3: 1172 (no parent) + + var home = GetNode(1173); + var root = GetNode(1046); + var customDoc = GetNode(1178); + var customDoc2 = GetNode(1179); + var customDoc3 = GetNode(1172); + var customDoc4 = GetNode(117); + + Assert.IsTrue(root.IsDescendantOrSelf(root)); + Assert.IsFalse(root.IsDescendantOrSelf(home)); + Assert.IsFalse(root.IsDescendantOrSelf(customDoc)); + Assert.IsFalse(root.IsDescendantOrSelf(customDoc2)); + Assert.IsFalse(root.IsDescendantOrSelf(customDoc3)); + Assert.IsFalse(root.IsDescendantOrSelf(customDoc4)); + + Assert.IsTrue(home.IsDescendantOrSelf(root)); + Assert.IsTrue(home.IsDescendantOrSelf(home)); + Assert.IsFalse(home.IsDescendantOrSelf(customDoc)); + Assert.IsFalse(home.IsDescendantOrSelf(customDoc2)); + Assert.IsFalse(home.IsDescendantOrSelf(customDoc3)); + Assert.IsFalse(home.IsDescendantOrSelf(customDoc4)); + + Assert.IsTrue(customDoc.IsDescendantOrSelf(root)); + Assert.IsTrue(customDoc.IsDescendantOrSelf(home)); + Assert.IsTrue(customDoc.IsDescendantOrSelf(customDoc)); + Assert.IsFalse(customDoc.IsDescendantOrSelf(customDoc2)); + Assert.IsFalse(customDoc.IsDescendantOrSelf(customDoc3)); + Assert.IsFalse(customDoc.IsDescendantOrSelf(customDoc4)); + + Assert.IsTrue(customDoc2.IsDescendantOrSelf(root)); + Assert.IsTrue(customDoc2.IsDescendantOrSelf(home)); + Assert.IsTrue(customDoc2.IsDescendantOrSelf(customDoc)); + Assert.IsTrue(customDoc2.IsDescendantOrSelf(customDoc2)); + Assert.IsFalse(customDoc2.IsDescendantOrSelf(customDoc3)); + Assert.IsFalse(customDoc2.IsDescendantOrSelf(customDoc4)); + + Assert.IsTrue(customDoc3.IsDescendantOrSelf(customDoc3)); + } + + [Test] + public void Up() + { + var doc = GetNode(1173); + + var result = doc.Up(); + + Assert.IsNotNull(result); + + Assert.AreEqual((int)1046, (int)result.Id); + } + + [Test] + public void Down() + { + var doc = GetNode(1173); + + var result = doc.Down(); + + Assert.IsNotNull(result); + + Assert.AreEqual((int)1174, (int)result.Id); + } + + [Test] + public void Next() + { + var doc = GetNode(1173); + + var result = doc.Next(); + + Assert.IsNotNull(result); + + Assert.AreEqual((int)1175, (int)result.Id); + } + + [Test] + public void Next_Without_Sibling() + { var doc = GetNode(1176); - Assert.IsNull(doc.Next()); - } + Assert.IsNull(doc.Next()); + } - [Test] - public void Previous_Without_Sibling() - { - var doc = GetNode(1173); + [Test] + public void Previous_Without_Sibling() + { + var doc = GetNode(1173); - Assert.IsNull(doc.Previous()); - } + Assert.IsNull(doc.Previous()); + } - [Test] - public void Previous() - { - var doc = GetNode(1176); + [Test] + public void Previous() + { + var doc = GetNode(1176); - var result = doc.Previous(); + var result = doc.Previous(); - Assert.IsNotNull(result); + Assert.IsNotNull(result); - Assert.AreEqual((int)1178, (int)result.Id); - } + Assert.AreEqual((int)1178, (int)result.Id); + } - [Test] - public void GetKey() - { - var key = Guid.Parse("CDB83BBC-A83B-4BA6-93B8-AADEF67D3C09"); + [Test] + public void GetKey() + { + var key = Guid.Parse("CDB83BBC-A83B-4BA6-93B8-AADEF67D3C09"); // doc is Home (a model) and GetKey unwraps and works var doc = GetNode(1176); @@ -671,8 +897,8 @@ namespace Umbraco.Tests.PublishedContent // wrapped is PublishedContentWrapped and WithKey unwraps var wrapped = new TestWrapped(doc); - Assert.AreEqual(key, wrapped.GetKey()); - } + Assert.AreEqual(key, wrapped.GetKey()); + } class TestWrapped : PublishedContentWrapped { @@ -690,8 +916,8 @@ namespace Umbraco.Tests.PublishedContent Assert.AreEqual(5548, prop.Value); } - public void CreateDetachedContentSample() - { + public void CreateDetachedContentSample() + { bool previewing = false; var t = PublishedContentType.Get(PublishedItemType.Content, "detachedSomething"); var values = new Dictionary(); @@ -705,36 +931,35 @@ namespace Umbraco.Tests.PublishedContent var c = new DetachedContent(properties); } - public void CreatedDetachedContentInConverterSample() - { + public void CreatedDetachedContentInConverterSample() + { // the converter args - PublishedPropertyType argPropertyType = null; - object argSource = null; - bool argPreview = false; + PublishedPropertyType argPropertyType = null; + bool argPreview = false; - var pt1 = new PublishedPropertyType("legend", 0, Constants.PropertyEditors.TextboxAlias); - var pt2 = new PublishedPropertyType("image", 0, Constants.PropertyEditors.MediaPickerAlias); - string val1 = ""; - int val2 = 0; + var pt1 = new PublishedPropertyType("legend", 0, Constants.PropertyEditors.TextboxAlias); + var pt2 = new PublishedPropertyType("image", 0, Constants.PropertyEditors.MediaPickerAlias); + string val1 = ""; + int val2 = 0; var c = new ImageWithLegendModel( PublishedProperty.GetDetached(pt1.Nested(argPropertyType), val1, argPreview), PublishedProperty.GetDetached(pt2.Nested(argPropertyType), val2, argPreview)); } - class ImageWithLegendModel - { - private IPublishedProperty _legendProperty; - private IPublishedProperty _imageProperty; + class ImageWithLegendModel + { + private IPublishedProperty _legendProperty; + private IPublishedProperty _imageProperty; - public ImageWithLegendModel(IPublishedProperty legendProperty, IPublishedProperty imageProperty) - { - _legendProperty = legendProperty; - _imageProperty = imageProperty; - } + public ImageWithLegendModel(IPublishedProperty legendProperty, IPublishedProperty imageProperty) + { + _legendProperty = legendProperty; + _imageProperty = imageProperty; + } public string Legend { get { return _legendProperty.GetValue(); } } public IPublishedContent Image { get { return _imageProperty.GetValue(); } } } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Tests/PublishedContent/StronglyTypedModels/Home.cs b/src/Umbraco.Tests/PublishedContent/StronglyTypedModels/Home.cs new file mode 100644 index 0000000000..d9a3807c25 --- /dev/null +++ b/src/Umbraco.Tests/PublishedContent/StronglyTypedModels/Home.cs @@ -0,0 +1,16 @@ +using System; +using System.Web; +using Umbraco.Core.Models; + +namespace Umbraco.Tests.PublishedContent.StronglyTypedModels +{ + /// + /// Used for testing strongly-typed published content extensions that work against the + /// + public class Home : TypedModelBase + { + public Home(IPublishedContent publishedContent) : base(publishedContent) + { + } + } +} diff --git a/src/Umbraco.Tests/Scheduling/BackgroundTaskRunnerTests.cs b/src/Umbraco.Tests/Scheduling/BackgroundTaskRunnerTests.cs index dee8a26743..0712056a30 100644 --- a/src/Umbraco.Tests/Scheduling/BackgroundTaskRunnerTests.cs +++ b/src/Umbraco.Tests/Scheduling/BackgroundTaskRunnerTests.cs @@ -943,8 +943,6 @@ namespace Umbraco.Tests.Scheduling throw new NotImplementedException(); } - private int i; - public async Task RunAsync(CancellationToken token) { Console.WriteLine("boom"); diff --git a/src/Umbraco.Tests/Services/ConsentServiceTests.cs b/src/Umbraco.Tests/Services/ConsentServiceTests.cs index a39bb892d9..fad057ce96 100644 --- a/src/Umbraco.Tests/Services/ConsentServiceTests.cs +++ b/src/Umbraco.Tests/Services/ConsentServiceTests.cs @@ -9,7 +9,7 @@ using Umbraco.Tests.TestHelpers; namespace Umbraco.Tests.Services { [TestFixture] - [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerFixture)] + [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerTest)] public class ConsentServiceTests : BaseServiceTest { [SetUp] @@ -121,5 +121,20 @@ namespace Umbraco.Tests.Services Assert.Throws(() => consentService.RegisterConsent("user/1234", "app1", "do-something", ConsentState.Granted | ConsentState.Revoked, "no comment")); } + + [Test] + public void CanRegisterConsentWithoutComment() + { + var consentService = ServiceContext.ConsentService; + + // Attept to add consent without a comment + consentService.RegisterConsent("user/1234", "app1", "consentWithoutComment", ConsentState.Granted); + + // Attempt to retrieve the consent we just added without a comment + var consents = consentService.LookupConsent(source: "user/1234", action: "consentWithoutComment").ToArray(); + + // Confirm we got our expected consent record + Assert.AreEqual(1, consents.Length); + } } } diff --git a/src/Umbraco.Tests/Services/Importing/ImportResources.Designer.cs b/src/Umbraco.Tests/Services/Importing/ImportResources.Designer.cs index c640d21aa7..d3e18fb8b4 100644 --- a/src/Umbraco.Tests/Services/Importing/ImportResources.Designer.cs +++ b/src/Umbraco.Tests/Services/Importing/ImportResources.Designer.cs @@ -313,7 +313,7 @@ namespace Umbraco.Tests.Services.Importing { /// <name>Template-Update</name> /// <version>0.1</version> /// <license url="http://www.opensource.org/licenses/mit-license.php">MIT license</license> - /// <url>http://our.umbraco.org/projects</url> + /// <url>https://our.umbraco.com/projects</url> /// <requirements> /// <major>3</major> /// <minor>0</minor> @@ -339,7 +339,7 @@ namespace Umbraco.Tests.Services.Importing { /// <name>Template-Update</name> /// <version>0.1</version> /// <license url="http://www.opensource.org/licenses/mit-license.php">MIT license</license> - /// <url>http://our.umbraco.org/projects</url> + /// <url>https://our.umbraco.com/projects</url> /// <requirements> /// <major>3</major> /// <minor>0</minor> diff --git a/src/Umbraco.Tests/Services/Importing/StandardMvc-Package.xml b/src/Umbraco.Tests/Services/Importing/StandardMvc-Package.xml index 82cbcc5d84..6238c8fbdb 100644 --- a/src/Umbraco.Tests/Services/Importing/StandardMvc-Package.xml +++ b/src/Umbraco.Tests/Services/Importing/StandardMvc-Package.xml @@ -177,7 +177,7 @@ StandardWebsiteMVC 2.0 MIT license - http://our.umbraco.org/projects/starter-kits/standard-website-mvc + https://our.umbraco.com/projects/starter-kits/standard-website-mvc 3 0 @@ -218,7 +218,7 @@ Google Maps - A map macro that you can use within Rich Text Areas Contact Us -

Contact Us on TwitterWe'd love to hear how this package has helped you and how it can be improved. Get in touch on the project website or via twitter

]]> +

Contact Us on TwitterWe'd love to hear how this package has helped you and how it can be improved. Get in touch on the project website or via twitter

]]>
Standard Website MVC, Company Address, Glasgow, Postcode
diff --git a/src/Umbraco.Tests/Services/Importing/TemplateOnly-Package.xml b/src/Umbraco.Tests/Services/Importing/TemplateOnly-Package.xml index 1f29ffb806..93f9b92750 100644 --- a/src/Umbraco.Tests/Services/Importing/TemplateOnly-Package.xml +++ b/src/Umbraco.Tests/Services/Importing/TemplateOnly-Package.xml @@ -6,7 +6,7 @@ Template-Update 0.1 MIT license - http://our.umbraco.org/projects + https://our.umbraco.com/projects 3 0 diff --git a/src/Umbraco.Tests/Services/Importing/TemplateOnly-Updated-Package.xml b/src/Umbraco.Tests/Services/Importing/TemplateOnly-Updated-Package.xml index 1225b36fa2..2a13898397 100644 --- a/src/Umbraco.Tests/Services/Importing/TemplateOnly-Updated-Package.xml +++ b/src/Umbraco.Tests/Services/Importing/TemplateOnly-Updated-Package.xml @@ -6,7 +6,7 @@ Template-Update 0.1 MIT license - http://our.umbraco.org/projects + https://our.umbraco.com/projects 3 0 diff --git a/src/Umbraco.Tests/Services/Importing/uBlogsy-Package.xml b/src/Umbraco.Tests/Services/Importing/uBlogsy-Package.xml index 98e12465f5..b134cbbd97 100644 --- a/src/Umbraco.Tests/Services/Importing/uBlogsy-Package.xml +++ b/src/Umbraco.Tests/Services/Importing/uBlogsy-Package.xml @@ -332,7 +332,7 @@ uBlogsy 3.0 MIT license - http://our.umbraco.org/projects/starter-kits/ublogsy + https://our.umbraco.com/projects/starter-kits/ublogsy 3 0 diff --git a/src/Umbraco.Tests/Services/PerformanceTests.cs b/src/Umbraco.Tests/Services/PerformanceTests.cs index 69f39392d6..c91c8b031a 100644 --- a/src/Umbraco.Tests/Services/PerformanceTests.cs +++ b/src/Umbraco.Tests/Services/PerformanceTests.cs @@ -314,7 +314,7 @@ namespace Umbraco.Tests.Services Umbraco Development

UmbracoUmbraco the the leading ASP.NET open source CMS, under pinning over 150,000 websites. Our Certified Developers are experts in developing high performance and feature rich websites.

]]>
Contact Us -

Contact Us on TwitterWe'd love to hear how this package has helped you and how it can be improved. Get in touch on the project website or via twitter

]]>
+

Contact Us on TwitterWe'd love to hear how this package has helped you and how it can be improved. Get in touch on the project website or via twitter

]]>
Standard Website MVC, Company Address, Glasgow, Postcode
Copyright &copy; 2012 Your Company diff --git a/src/Umbraco.Tests/TeamCity.proj b/src/Umbraco.Tests/TeamCity.proj deleted file mode 100644 index 0bc83a35f4..0000000000 --- a/src/Umbraco.Tests/TeamCity.proj +++ /dev/null @@ -1,19 +0,0 @@ - - - - ..\..\tools\MSBuildCommunityTasks - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Umbraco.Tests/TestHelpers/BaseSeleniumTest.cs b/src/Umbraco.Tests/TestHelpers/BaseSeleniumTest.cs deleted file mode 100644 index ef039630f3..0000000000 --- a/src/Umbraco.Tests/TestHelpers/BaseSeleniumTest.cs +++ /dev/null @@ -1,156 +0,0 @@ -using System; -using System.Data.SqlServerCe; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Linq.Dynamic; -using System.Runtime.InteropServices; -using System.Text; -using System.Web.Management; -using Moq; -using NUnit.Framework; -using OpenQA.Selenium; -using OpenQA.Selenium.Firefox; -using Umbraco.Core; -using Umbraco.Core.Logging; -using Umbraco.Core.Persistence; -using Umbraco.Core.Persistence.Migrations.Initial; -using Umbraco.Core.Persistence.SqlSyntax; - -namespace Umbraco.Tests.TestHelpers -{ - public class BaseSeleniumTest - { - internal IWebDriver Driver; - internal string BaseUrl; - - private StringBuilder _verificationErrors; - private UmbracoDatabase _database; - - protected ApplicationContext ApplicationContext - { - get { return ApplicationContext.Current; } - } - - [SetUp] - public virtual void Initialize() - { - - // Disable medium trust - var transform = TransformWebConfig("Release"); - - var assemblyPath = TestHelper.CurrentAssemblyDirectory; - assemblyPath = Path.Combine(assemblyPath, @"..\..\..\Umbraco.Web.UI\"); - var webUiPath = Path.GetFullPath(new Uri(assemblyPath).LocalPath); - - var installedPackagesConfig = string.Format("{0}App_Data\\packages\\installed\\installedPackages.config", webUiPath); - if (File.Exists(installedPackagesConfig)) - File.Delete(installedPackagesConfig); - - var databaseDataPath = string.Format(@"{0}\App_Data\Umbraco.sdf", webUiPath); - var connectionString = string.Format(@"Data Source={0}", databaseDataPath); - - //Create the Sql CE database - using (var engine = new SqlCeEngine(connectionString)) - { - if (File.Exists(databaseDataPath) == false) - engine.CreateDatabase(); - } - - var syntaxProvider = new SqlCeSyntaxProvider(); - SqlSyntaxContext.SqlSyntaxProvider = syntaxProvider; - - _database = new UmbracoDatabase(connectionString, Constants.DatabaseProviders.SqlCe, Mock.Of()); - - // First remove anything in the database - var creation = new DatabaseSchemaCreation(_database, Mock.Of(), syntaxProvider); - creation.UninstallDatabaseSchema(); - - // Then populate it with fresh data - _database.CreateDatabaseSchema(false); - - _database.Execute("UPDATE umbracoUser SET userName = 'admin', userPassword = 'W477AMlLwwJQeAGlPZKiEILr8TA=', userEmail = 'none' WHERE id = 0"); // password: test - - // Recycle app pool so the new user can log in - //var webConfigFilePath = string.Format(@"{0}\web.config", webUiPath); - //File.SetLastWriteTime(webConfigFilePath, DateTime.Now); - - // Disable medium trust - transform = TransformWebConfig("Release"); - - Driver = new FirefoxDriver(); - BaseUrl = "http://localhost:61639/"; - _verificationErrors = new StringBuilder(); - } - - [TearDown] - public virtual void TearDown() - { - try - { - Driver.Quit(); - } - catch (Exception) - { - // Ignore errors if unable to close the browser - } - - // Re-enable medium trust - var transform = TransformWebConfig("Debug"); - - Assert.AreEqual("", _verificationErrors.ToString()); - } - - private static string TransformWebConfig(string configurationToUse) - { - var assemblyPath = TestHelper.CurrentAssemblyDirectory; - var toolsPath = Path.Combine(assemblyPath, @"..\..\..\..\tools\ConfigTransformTool\"); - var webUiPath = Path.GetFullPath(new Uri(Path.Combine(assemblyPath, @"..\..\..\Umbraco.Web.UI\")).LocalPath); - - var fileToTransform = webUiPath + "web.config"; - var transformFile = string.Format("{0}web.Template.{1}.config", webUiPath, configurationToUse); - - var psi = new ProcessStartInfo(string.Format("{0}ctt.exe", toolsPath), string.Format("s:\"{0}\" t:\"{1}\" d:\"{2}\" pw v", fileToTransform, transformFile, fileToTransform)) - { - WorkingDirectory = Environment.CurrentDirectory, - UseShellExecute = false, - RedirectStandardOutput = true, - RedirectStandardError = true, - CreateNoWindow = true - }; - - string[] result = {string.Empty}; - using (var process = new Process { StartInfo = psi }) - { - // delegate for writing the process output to the response output - Action dataReceived = ((sender, e) => - { - if (e.Data != null) // sometimes a random event is received with null data, not sure why - I prefer to leave it out - { - result[0] += e.Data; - result[0] += "\r\n"; - } - }); - - process.OutputDataReceived += new DataReceivedEventHandler(dataReceived); - process.ErrorDataReceived += new DataReceivedEventHandler(dataReceived); - - // start the process and start reading the standard and error outputs - process.Start(); - process.BeginErrorReadLine(); - process.BeginOutputReadLine(); - - // wait for the process to exit - process.WaitForExit(); - - // an exit code other than 0 generally means an error - if (process.ExitCode != 0) - { - result[0] = result[0] + "\r\n - Exited with exitcode " + process.ExitCode; - } - } - - return result[0]; - } - } -} diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index d2d94bc694..86c36a8d76 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -190,6 +190,7 @@ + @@ -385,7 +386,6 @@ - @@ -437,8 +437,6 @@ - - diff --git a/src/Umbraco.Web.UI.Client/.eslintrc b/src/Umbraco.Web.UI.Client/.eslintrc index 205d8dcf50..1b39098cfc 100644 --- a/src/Umbraco.Web.UI.Client/.eslintrc +++ b/src/Umbraco.Web.UI.Client/.eslintrc @@ -3,37 +3,8 @@ "browser": true }, - "plugins": [ - "angular" - ], - "rules": { - "eqeqeq": 2, - "curly": 2, - - "no-unused-vars": 1, - "no-eval": 1, - "no-delete-var": 1, - "quotes": 1, - "dot-notation": 1, - - "no-use-before-define": 0, - "angular/ng_controller_as": 1, - "angular/ng_controller_as_vm": 1, - - - "strict": 0, - "no-irregular-whitespace": 0, - "no-mixed-spaces-and-tabs": 0, - "no-multi-spaces": 0, - "key-spacing": 0, - "semi-spacing": 0, - "space-infix-ops": 0, - "comma-spacing": 0, - "no-trailing-spaces": 0, - "eol-last": 0, - "no-underscore-dangle": 0, - "camelcase": 0 + "comma-dangle": ["error", "never"] }, "globals": { diff --git a/src/Umbraco.Web.UI.Client/gulpfile.js b/src/Umbraco.Web.UI.Client/gulpfile.js index afaaadf050..5c24a22150 100644 --- a/src/Umbraco.Web.UI.Client/gulpfile.js +++ b/src/Umbraco.Web.UI.Client/gulpfile.js @@ -12,6 +12,9 @@ const imagemin = require('gulp-imagemin'); var _ = require('lodash'); var MergeStream = require('merge-stream'); +// js +const eslint = require('gulp-eslint'); + //Less + css var postcss = require('gulp-postcss'); var less = require('gulp-less'); @@ -30,6 +33,11 @@ Helper functions function processJs(files, out) { return gulp.src(files) + // check for js errors + .pipe(eslint()) + // outputs the lint results to the console + .pipe(eslint.format()) + // sort files in stream by path or any custom sort comparator .pipe(sort()) .pipe(concat(out)) .pipe(wrap('(function(){\n%= body %\n})();')) @@ -351,7 +359,7 @@ gulp.task('docs', [], function (cb) { title: "Umbraco Backoffice UI API Documentation", dest: 'docs/api', styles: ['docs/umb-docs.css'], - image: "https://our.umbraco.org/assets/images/logo.svg" + image: "https://our.umbraco.com/assets/images/logo.svg" } return gulpDocs.sections({ diff --git a/src/Umbraco.Web.UI.Client/lib/tinymce/skins/umbraco/skin.min.css b/src/Umbraco.Web.UI.Client/lib/tinymce/skins/umbraco/skin.min.css index c17e10b917..6fa010bce0 100755 --- a/src/Umbraco.Web.UI.Client/lib/tinymce/skins/umbraco/skin.min.css +++ b/src/Umbraco.Web.UI.Client/lib/tinymce/skins/umbraco/skin.min.css @@ -1 +1 @@ -.mce-container,.mce-container *,.mce-widget,.mce-widget *{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#000;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-container ::-webkit-scrollbar{width:8px;height:8px;-webkit-border-radius:4px}.mce-container ::-webkit-scrollbar-track,.mce-container ::-webkit-scrollbar-track-piece{background-color:transparent}.mce-container ::-webkit-scrollbar-thumb{background-color:rgba(53,57,71,0.3);width:6px;height:6px;-webkit-border-radius:4px}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:visible!important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#FFF;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;border-radius:2px}.mce-wordcount{float:right;padding:8px}.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #c5c5c5;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:center;padding:2px}.mce-charmap td:hover{background:#d9d9d9}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover{border-color:#c5c5c5}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#e8e8e8;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#c4daff;background:#deeafa}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fdfdfd,#ddd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdfdfd),to(#ddd));background-image:-webkit-linear-gradient(top,#fdfdfd,#ddd);background-image:-o-linear-gradient(top,#fdfdfd,#ddd);background-image:linear-gradient(to bottom,#fdfdfd,#ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd',endColorstr='#ffdddddd',GradientType=0);zoom:1}.mce-floatpanel{position:absolute;-webkit-box-shadow:#ccc 5px 5px 5px;-moz-box-shadow:#ccc 5px 5px 5px;box-shadow:#ccc 5px 5px 5px}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{position:absolute;top:0;left:0;background:#fff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#FFF;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#FFF;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #EEE;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#CCC;text-shadow:0 1px 0 white;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#AAA}.mce-window-head .mce-title{display:inline-block;*display:inline;*zoom:1;line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:whiteSmoke;border-top:1px solid #DDD;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000;-moz-box-shadow:0 0 5px #000;box-shadow:0 0 5px #000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:0;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #c5c5c5;position:relative;color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fff,#d9d9d9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#d9d9d9));background-image:-webkit-linear-gradient(top,#fff,#d9d9d9);background-image:-o-linear-gradient(top,#fff,#d9d9d9);background-image:linear-gradient(to bottom,#fff,#d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffd9d9d9',GradientType=0);zoom:1;border-color:#d9d9d9 #d9d9d9 #b3b3b3;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.mce-btn:hover,.mce-btn:focus{text-decoration:none;color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#e3e3e3;background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#ccc));background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(to bottom,#f2f2f2,#ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffcccccc',GradientType=0);zoom:1;border-color:#ccc #ccc #a6a6a6;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-btn.mce-disabled,.mce-btn.mce-disabled:hover{cursor:default;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.65;filter:alpha(opacity=65);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#d6d6d6;background-image:-moz-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e6e6e6),to(#bfbfbf));background-image:-webkit-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:-o-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:linear-gradient(to bottom,#e6e6e6,#bfbfbf);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6',endColorstr='#ffbfbfbf',GradientType=0);zoom:1;border-color:#bfbfbf #bfbfbf #999;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{color:#fff;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);zoom:1;border-color:#04c #04c #002b80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-primary:hover,.mce-primary:focus{color:#fff;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#005fb3;background-image:-moz-linear-gradient(top,#0077b3,#003cb3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0077b3),to(#003cb3));background-image:-webkit-linear-gradient(top,#0077b3,#003cb3);background-image:-o-linear-gradient(top,#0077b3,#003cb3);background-image:linear-gradient(to bottom,#0077b3,#003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3',endColorstr='#ff003cb3',GradientType=0);zoom:1;border-color:#003cb3 #003cb3 #026;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-primary button{color:#333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:3px 5px;font-size:12px;line-height:15px}.mce-btn-small i{margin-top:0}.mce-btn .mce-caret{margin-top:8px;*margin-top:6px;margin-left:0}.mce-btn-small .mce-caret{margin-top:6px;*margin-top:4px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #444;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#999}.mce-caret.mce-up{border-bottom:4px solid #444;border-top:0}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-btn:hover,.mce-btn-group .mce-btn:focus{color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#e3e3e3;background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#ccc));background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(to bottom,#f2f2f2,#ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffcccccc',GradientType=0);zoom:1;border-color:#ccc #ccc #a6a6a6;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-btn-group .mce-btn.mce-disabled,.mce-btn-group .mce-btn.mce-disabled:hover{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fff,#d9d9d9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#d9d9d9));background-image:-webkit-linear-gradient(top,#fff,#d9d9d9);background-image:-o-linear-gradient(top,#fff,#d9d9d9);background-image:linear-gradient(to bottom,#fff,#d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffd9d9d9',GradientType=0);zoom:1;border-color:#d9d9d9 #d9d9d9 #b3b3b3;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-btn-group .mce-btn.mce-active,.mce-btn-group .mce-btn.mce-active:hover,.mce-btn-group .mce-btn:active{color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#d6d6d6;background-image:-moz-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e6e6e6),to(#bfbfbf));background-image:-webkit-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:-o-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:linear-gradient(to bottom,#e6e6e6,#bfbfbf);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6',endColorstr='#ffbfbfbf',GradientType=0);zoom:1;border-color:#bfbfbf #bfbfbf #999;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.mce-btn-group .mce-btn.mce-disabled button{opacity:.65;filter:alpha(opacity=65);zoom:1}.mce-btn-group .mce-first{border-left:1px solid #c5c5c5;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #c5c5c5;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fdfdfd,#ddd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdfdfd),to(#ddd));background-image:-webkit-linear-gradient(top,#fdfdfd,#ddd);background-image:-o-linear-gradient(top,#fdfdfd,#ddd);background-image:linear-gradient(to bottom,#fdfdfd,#ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd',endColorstr='#ffdddddd',GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0}.mce-checked i.mce-i-checkbox{color:#000;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox{border:1px solid #59a5e1;border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}.mce-colorbutton .mce-ico{position:relative}.mce-colorpicker{background:#FFF}.mce-colorbutton-grid{margin:4px}.mce-grid td div{border:1px solid #808080;width:12px;height:12px;margin:2px;cursor:pointer}.mce-grid td div:hover{border-color:black}.mce-grid td div:focus{border-color:#59a5e1;outline:1px solid rgba(82,168,236,0.8);border-color:rgba(82,168,236,0.8)}.mce-colorbutton{position:relative}.mce-colorbutton .mce-preview{display:block;position:absolute;left:50%;top:50%;margin-left:-8px;margin-top:7px;background:gray;width:16px;height:2px;overflow:hidden}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;width:100px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.mce-combobox input{border-color:1px solid #c5c5c5;border-right-color:rgba(0,0,0,0.15);height:28px}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox *:focus{border-color:#59a5e1;border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#000}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:gray;color:white}.mce-path .mce-divider{display:inline}.mce-fieldset{border:0 solid #9e9e9e;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-iframe{border:0 solid #c5c5c5;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);border:0 solid #c5c5c5;overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label-disabled .mce-text{color:#999}.mce-label.mce-multiline{white-space:pre-wrap}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #ddd}.mce-menubar .mce-menubtn button{color:#000}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubtn:focus{border-color:transparent;background:#ddd;filter:none}.mce-menubtn.mce-disabled span{color:#999}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-listbox span{width:100%;display:block;overflow:hidden}.mce-menu-item{display:block;padding:6px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal}.mce-menu-item.mce-disabled .mce-text{color:#999}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0);zoom:1}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:white}.mce-menu-shortcut{display:inline-block;color:#999}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 20px 0 20px}.mce-menu-item .mce-caret{margin-top:6px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #666}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret{border-left-color:#FFF}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item-sep,.mce-menu-item-sep:hover{padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#e5e5e5;border-bottom:1px solid white;cursor:default;filter:none}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item.mce-active{background-color:#c8def4;outline:1px solid #c5c5c5}.mce-menu-item-checkbox.mce-active{background-color:#FFF;outline:0}.mce-menu{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#FFF;border:1px solid #CCC;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline;*zoom:1}.mce-menu-sub{margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}i.mce-radio{padding:1px;margin:0 3px 0 0;background-color:#fafafa;border:1px solid #cacece;-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fdfdfd,#ddd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdfdfd),to(#ddd));background-image:-webkit-linear-gradient(top,#fdfdfd,#ddd);background-image:-o-linear-gradient(top,#fdfdfd,#ddd);background-image:linear-gradient(to bottom,#fdfdfd,#ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd',endColorstr='#ffdddddd',GradientType=0);zoom:1}i.mce-radio:after{font-family:Arial;font-size:12px;color:#000;content:'\25cf'}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#000}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#c5c5c5;border-right-color:#c5c5c5}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #ccc}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #ccc;border-width:1px 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-textbox{background:#FFF;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);display:inline-block;-webkit-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:normal;color:#000}.mce-textbox:focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-inserttime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-untitled:before{content:"\e029"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e026"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#BBB}.mce-i-tablerowprops:before{content:"\e604"}.mce-i-tablecellprops:before{content:"\e605"}.mce-i-table2:before{content:"\e606"}.mce-i-tablemergecells:before{content:"\e607"}.mce-i-tableinsertcolbefore:before{content:"\e608"}.mce-i-tableinsertcolafter:before{content:"\e609"}.mce-i-tableinsertrowbefore:before{content:"\e60a"}.mce-i-tableinsertrowafter:before{content:"\e60b"}.mce-i-tablesplitcells:before{content:"\e60d"}.mce-i-tabledelete:before{content:"\e60e"}.mce-i-tableleftheader:before{content:"\e62a"}.mce-i-tabletopheader:before{content:"\e62b"}.mce-i-tabledeleterow:before{content:"\e800"}.mce-i-tabledeletecol:before{content:"\e801"} \ No newline at end of file +.mce-container,.mce-container *,.mce-widget,.mce-widget *{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#000;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-container ::-webkit-scrollbar{width:8px;height:8px;-webkit-border-radius:4px}.mce-container ::-webkit-scrollbar-track,.mce-container ::-webkit-scrollbar-track-piece{background-color:transparent}.mce-container ::-webkit-scrollbar-thumb{background-color:rgba(53,57,71,0.3);width:6px;height:6px;-webkit-border-radius:4px}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:visible!important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#FFF;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;border-radius:2px}.mce-wordcount{float:right;padding:8px}.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #c5c5c5;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:center;padding:2px}.mce-charmap td:hover{background:#d9d9d9}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover{border-color:#c5c5c5}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#e8e8e8;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#c4daff;background:#deeafa}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fdfdfd,#ddd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdfdfd),to(#ddd));background-image:-webkit-linear-gradient(top,#fdfdfd,#ddd);background-image:-o-linear-gradient(top,#fdfdfd,#ddd);background-image:linear-gradient(to bottom,#fdfdfd,#ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd',endColorstr='#ffdddddd',GradientType=0);zoom:1}.mce-floatpanel{position:absolute;-webkit-box-shadow:#ccc 5px 5px 5px;-moz-box-shadow:#ccc 5px 5px 5px;box-shadow:#ccc 5px 5px 5px}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{position:absolute;top:0;left:0;background:#fff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#FFF;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#FFF;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #EEE;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#CCC;text-shadow:0 1px 0 white;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#AAA}.mce-window-head .mce-title{display:inline-block;*display:inline;*zoom:1;line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:whiteSmoke;border-top:1px solid #DDD;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000;-moz-box-shadow:0 0 5px #000;box-shadow:0 0 5px #000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:0;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #c5c5c5;position:relative;color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fff,#d9d9d9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#d9d9d9));background-image:-webkit-linear-gradient(top,#fff,#d9d9d9);background-image:-o-linear-gradient(top,#fff,#d9d9d9);background-image:linear-gradient(to bottom,#fff,#d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffd9d9d9',GradientType=0);zoom:1;border-color:#d9d9d9 #d9d9d9 #b3b3b3;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.mce-btn:hover,.mce-btn:focus{text-decoration:none;color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#e3e3e3;background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#ccc));background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(to bottom,#f2f2f2,#ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffcccccc',GradientType=0);zoom:1;border-color:#ccc #ccc #a6a6a6;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-btn.mce-disabled,.mce-btn.mce-disabled:hover{cursor:default;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.65;filter:alpha(opacity=65);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#d6d6d6;background-image:-moz-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e6e6e6),to(#bfbfbf));background-image:-webkit-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:-o-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:linear-gradient(to bottom,#e6e6e6,#bfbfbf);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6',endColorstr='#ffbfbfbf',GradientType=0);zoom:1;border-color:#bfbfbf #bfbfbf #999;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{color:#fff;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);zoom:1;border-color:#04c #04c #002b80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-primary:hover,.mce-primary:focus{color:#fff;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#005fb3;background-image:-moz-linear-gradient(top,#0077b3,#003cb3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0077b3),to(#003cb3));background-image:-webkit-linear-gradient(top,#0077b3,#003cb3);background-image:-o-linear-gradient(top,#0077b3,#003cb3);background-image:linear-gradient(to bottom,#0077b3,#003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3',endColorstr='#ff003cb3',GradientType=0);zoom:1;border-color:#003cb3 #003cb3 #026;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-primary button{color:#333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:3px 5px;font-size:12px;line-height:15px}.mce-btn-small i{margin-top:0}.mce-btn .mce-caret{margin-top:8px;*margin-top:6px;margin-left:0}.mce-btn-small .mce-caret{margin-top:6px;*margin-top:4px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #444;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#999}.mce-caret.mce-up{border-bottom:4px solid #444;border-top:0}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-btn:hover,.mce-btn-group .mce-btn:focus{color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#e3e3e3;background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#ccc));background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(to bottom,#f2f2f2,#ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffcccccc',GradientType=0);zoom:1;border-color:#ccc #ccc #a6a6a6;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-btn-group .mce-btn.mce-disabled,.mce-btn-group .mce-btn.mce-disabled:hover{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fff,#d9d9d9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#d9d9d9));background-image:-webkit-linear-gradient(top,#fff,#d9d9d9);background-image:-o-linear-gradient(top,#fff,#d9d9d9);background-image:linear-gradient(to bottom,#fff,#d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffd9d9d9',GradientType=0);zoom:1;border-color:#d9d9d9 #d9d9d9 #b3b3b3;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-btn-group .mce-btn.mce-active,.mce-btn-group .mce-btn.mce-active:hover,.mce-btn-group .mce-btn:active{color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#d6d6d6;background-image:-moz-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e6e6e6),to(#bfbfbf));background-image:-webkit-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:-o-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:linear-gradient(to bottom,#e6e6e6,#bfbfbf);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6',endColorstr='#ffbfbfbf',GradientType=0);zoom:1;border-color:#bfbfbf #bfbfbf #999;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.mce-btn-group .mce-btn.mce-disabled button{opacity:.65;filter:alpha(opacity=65);zoom:1}.mce-btn-group .mce-first{border-left:1px solid #c5c5c5;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #c5c5c5;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fdfdfd,#ddd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdfdfd),to(#ddd));background-image:-webkit-linear-gradient(top,#fdfdfd,#ddd);background-image:-o-linear-gradient(top,#fdfdfd,#ddd);background-image:linear-gradient(to bottom,#fdfdfd,#ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd',endColorstr='#ffdddddd',GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0}.mce-checked i.mce-i-checkbox{color:#000;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox{border:1px solid #59a5e1;border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}.mce-colorbutton .mce-ico{position:relative}.mce-colorpicker{background:#FFF}.mce-colorbutton-grid{margin:4px}.mce-grid td div{border:1px solid #808080;width:12px;height:12px;margin:2px;cursor:pointer}.mce-grid td div:hover{border-color:black}.mce-grid td div:focus{border-color:#59a5e1;outline:1px solid rgba(82,168,236,0.8);border-color:rgba(82,168,236,0.8)}.mce-colorbutton{position:relative}.mce-colorbutton .mce-preview{display:block;position:absolute;left:50%;top:50%;margin-left:-8px;margin-top:7px;background:gray;width:16px;height:2px;overflow:hidden}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;width:100px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.mce-combobox input{border-color:1px solid #c5c5c5;border-right-color:rgba(0,0,0,0.15);height:28px}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox *:focus{border-color:#59a5e1;border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#000}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:gray;color:white}.mce-path .mce-divider{display:inline}.mce-fieldset{border:0 solid #9e9e9e;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-iframe{border:0 solid #c5c5c5;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);border:0 solid #c5c5c5;overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label-disabled .mce-text{color:#999}.mce-label.mce-multiline{white-space:pre-wrap}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #ddd}.mce-menubar .mce-menubtn button{color:#000}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubtn:focus{border-color:transparent;background:#ddd;filter:none}.mce-menubtn.mce-disabled span{color:#999}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-listbox span{width:100%;display:block;overflow:hidden}.mce-menu-item{display:block;padding:6px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal}.mce-menu-item.mce-disabled .mce-text{color:#999}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0);zoom:1}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:white}.mce-menu-shortcut{display:inline-block;color:#999}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 20px 0 20px}.mce-menu-item .mce-caret{margin-top:6px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #666}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret{border-left-color:#FFF}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item-sep,.mce-menu-item-sep:hover{padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#e5e5e5;border-bottom:1px solid white;cursor:default;filter:none}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item.mce-active{background-color:#c8def4;outline:1px solid #c5c5c5}.mce-menu-item-checkbox.mce-active{background-color:#FFF;outline:0}.mce-menu{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#FFF;border:1px solid #CCC;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline;*zoom:1}.mce-menu-sub{margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}i.mce-radio{padding:1px;margin:0 3px 0 0;background-color:#fafafa;border:1px solid #cacece;-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fdfdfd,#ddd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdfdfd),to(#ddd));background-image:-webkit-linear-gradient(top,#fdfdfd,#ddd);background-image:-o-linear-gradient(top,#fdfdfd,#ddd);background-image:linear-gradient(to bottom,#fdfdfd,#ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd',endColorstr='#ffdddddd',GradientType=0);zoom:1}i.mce-radio:after{font-family:Arial;font-size:12px;color:#000;content:'\25cf'}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#000}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#c5c5c5;border-right-color:#c5c5c5}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #ccc}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #ccc;border-width:1px 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-textbox{background:#FFF;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);display:inline-block;-webkit-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:normal;color:#000}.mce-textbox:focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-inserttime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-untitled:before{content:"\e029"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e026"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#BBB}.mce-i-tablerowprops:before{content:"\e604"}.mce-i-tablecellprops:before{content:"\e605"}.mce-i-table2:before{content:"\e606"}.mce-i-tablemergecells:before{content:"\e607"}.mce-i-tableinsertcolbefore:before{content:"\e608"}.mce-i-tableinsertcolafter:before{content:"\e609"}.mce-i-tableinsertrowbefore:before{content:"\e60a"}.mce-i-tableinsertrowafter:before{content:"\e60b"}.mce-i-tablesplitcells:before{content:"\e60d"}.mce-i-tabledelete:before{content:"\e60e"}.mce-i-tableleftheader:before{content:"\e62a"}.mce-i-tabletopheader:before{content:"\e62b"}.mce-i-tabledeleterow:before{content:"\e800"}.mce-i-tabledeletecol:before{content:"\e801"}.mce-colorbtn-trans div{text-align: center;vertical-align: middle;font-weight: bold;font-size: 20px;line-height: 16px;color: #707070;}.mce-grid td.mce-grid-cell div{border: 1px solid #d6d6d6;width: 15px;height: 15px;margin: 0;cursor: pointer;} \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json new file mode 100644 index 0000000000..b11de54152 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -0,0 +1,10487 @@ +{ + "name": "umbraco", + "version": "7.1.2", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "abbrev": { + "version": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", + "dev": true + }, + "accepts": { + "version": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz", + "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=", + "dev": true, + "requires": { + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "negotiator": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz" + } + }, + "accord": { + "version": "https://registry.npmjs.org/accord/-/accord-0.28.0.tgz", + "integrity": "sha1-vsUWovci59UPX59C+Bt387lUSLo=", + "dev": true, + "requires": { + "convert-source-map": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "indx": "https://registry.npmjs.org/indx/-/indx-0.2.3.tgz", + "lodash.clone": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", + "lodash.defaults": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "lodash.flatten": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "lodash.merge": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "lodash.partialright": "https://registry.npmjs.org/lodash.partialright/-/lodash.partialright-4.2.1.tgz", + "lodash.pick": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "lodash.uniq": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "uglify-js": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "when": "https://registry.npmjs.org/when/-/when-3.7.8.tgz" + }, + "dependencies": { + "semver": { + "version": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha1-3Eu8emyp2Rbe5dQ1FvAJK1j3uKs=", + "dev": true + } + } + }, + "acorn": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", + "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", + "dev": true + }, + "acorn-jsx": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz", + "integrity": "sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw==", + "dev": true, + "requires": { + "acorn": "5.7.1" + } + }, + "after": { + "version": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "ajv": { + "version": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" + } + }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + }, + "align-text": { + "version": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "longest": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + }, + "dependencies": { + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + } + } + } + }, + "alphanum-sort": { + "version": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amdefine": { + "version": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "angular": { + "version": "https://registry.npmjs.org/angular/-/angular-1.3.20.tgz", + "integrity": "sha1-sjo9fF5/mffZW5tNSbmsNVJpuu4=", + "dev": true + }, + "angular-animate": { + "version": "https://registry.npmjs.org/angular-animate/-/angular-animate-1.3.20.tgz", + "integrity": "sha1-0XB8cn+K0N8hxKLewgzX/ElFtSo=", + "dev": true + }, + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "requires": { + "ansi-wrap": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz" + } + }, + "ansi-cyan": { + "version": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", + "dev": true, + "requires": { + "ansi-wrap": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz" + } + }, + "ansi-escapes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "dev": true + }, + "ansi-gray": { + "version": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "requires": { + "ansi-wrap": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz" + } + }, + "ansi-red": { + "version": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "dev": true, + "requires": { + "ansi-wrap": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz" + } + }, + "ansi-regex": { + "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "ansi-wrap": { + "version": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true + }, + "anymatch": { + "version": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=", + "dev": true, + "requires": { + "micromatch": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" + }, + "dependencies": { + "arr-diff": { + "version": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" + } + }, + "array-unique": { + "version": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "preserve": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "repeat-element": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz" + } + }, + "expand-brackets": { + "version": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz" + } + }, + "extglob": { + "version": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + } + }, + "is-extglob": { + "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + } + }, + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + } + }, + "micromatch": { + "version": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "braces": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "expand-brackets": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "extglob": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "filename-regex": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "object.omit": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "parse-glob": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "regex-cache": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz" + } + } + } + }, + "archive-type": { + "version": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz", + "integrity": "sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y=", + "dev": true, + "requires": { + "file-type": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz" + }, + "dependencies": { + "file-type": { + "version": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + } + } + }, + "archy": { + "version": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "argparse": { + "version": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "dev": true, + "requires": { + "sprintf-js": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + } + }, + "arr-diff": { + "version": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true + }, + "arr-union": { + "version": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-differ": { + "version": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-each": { + "version": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true + }, + "array-find-index": { + "version": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-slice": { + "version": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha1-42jqFfibxwaff/uJrsOmx9SsItQ=", + "dev": true + }, + "array-union": { + "version": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + } + }, + "array-uniq": { + "version": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arraybuffer.slice": { + "version": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true, + "optional": true + }, + "asn1": { + "version": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "assign-symbols": { + "version": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha1-YaKau2/MAm/qd+VtHG7FOnlZUfQ=", + "dev": true, + "requires": { + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz" + } + }, + "async-each": { + "version": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-each-series": { + "version": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz", + "integrity": "sha1-9C/YFV048hpbjqB8KOBj7RcAsTg=", + "dev": true, + "optional": true + }, + "asynckit": { + "version": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "dev": true + }, + "autoprefixer": { + "version": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true, + "requires": { + "browserslist": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "caniuse-db": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000836.tgz", + "normalize-range": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "num2fraction": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "aws-sign2": { + "version": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha1-1NDpudv8p3vwjusKikcVUP454ok=", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "js-tokens": "3.0.2" + } + }, + "backo2": { + "version": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "dev": true, + "requires": { + "cache-base": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "class-utils": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "component-emitter": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "define-property": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "mixin-deep": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "pascalcase": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" + }, + "dependencies": { + "define-property": { + "version": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" + } + }, + "is-accessor-descriptor": { + "version": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz" + } + }, + "is-data-descriptor": { + "version": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz" + } + }, + "is-descriptor": { + "version": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "is-data-descriptor": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz" + } + } + } + }, + "base64-arraybuffer": { + "version": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-url": { + "version": "https://registry.npmjs.org/base64-url/-/base64-url-1.2.1.tgz", + "integrity": "sha1-GZ/WYXAqDnt9yubgaYuwicUvbXg=", + "dev": true + }, + "base64id": { + "version": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "basic-auth": { + "version": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz", + "integrity": "sha1-Awk1sB3nyblKgksp8/zLdQ06UpA=", + "dev": true + }, + "basic-auth-connect": { + "version": "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz", + "integrity": "sha1-/bC0OWLKe0BFanwrtI/hc9otISI=", + "dev": true + }, + "batch": { + "version": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", + "integrity": "sha1-PzQU84AyF0O/wQQvmoP/HVgk1GQ=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + } + }, + "beeper": { + "version": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "dev": true + }, + "better-assert": { + "version": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz" + } + }, + "bin-build": { + "version": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz", + "integrity": "sha1-EfjdYfcP/Por3KpbRvXo/t1CIcw=", + "dev": true, + "optional": true, + "requires": { + "archive-type": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz", + "decompress": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz", + "download": "https://registry.npmjs.org/download/-/download-4.4.3.tgz", + "exec-series": "https://registry.npmjs.org/exec-series/-/exec-series-1.0.3.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "tempfile": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", + "url-regex": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz" + }, + "dependencies": { + "tempfile": { + "version": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", + "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=", + "dev": true, + "optional": true, + "requires": { + "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "uuid": "2.0.3" + } + }, + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true, + "optional": true + } + } + }, + "bin-check": { + "version": "https://registry.npmjs.org/bin-check/-/bin-check-2.0.0.tgz", + "integrity": "sha1-hvjm9CU4k99g3DFpV/WvAqywWTA=", + "dev": true, + "optional": true, + "requires": { + "executable": "https://registry.npmjs.org/executable/-/executable-1.1.0.tgz" + } + }, + "bin-version": { + "version": "https://registry.npmjs.org/bin-version/-/bin-version-1.0.4.tgz", + "integrity": "sha1-nrSY7m/Xb3q5p8FgQ2+JV5Q1144=", + "dev": true, + "optional": true, + "requires": { + "find-versions": "https://registry.npmjs.org/find-versions/-/find-versions-1.2.1.tgz" + } + }, + "bin-version-check": { + "version": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-2.1.0.tgz", + "integrity": "sha1-5OXfKQuQaffRETJAMe/BP90RpbA=", + "dev": true, + "optional": true, + "requires": { + "bin-version": "https://registry.npmjs.org/bin-version/-/bin-version-1.0.4.tgz", + "minimist": "1.2.0", + "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "semver-truncate": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } + } + }, + "bin-wrapper": { + "version": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-3.0.2.tgz", + "integrity": "sha1-Z9MwYmLksaXy+I7iNGT2plVneus=", + "dev": true, + "optional": true, + "requires": { + "bin-check": "https://registry.npmjs.org/bin-check/-/bin-check-2.0.0.tgz", + "bin-version-check": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-2.1.0.tgz", + "download": "https://registry.npmjs.org/download/-/download-4.4.3.tgz", + "each-async": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz", + "lazy-req": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", + "os-filter-obj": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-1.0.3.tgz" + } + }, + "binary-extensions": { + "version": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "bl": { + "version": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha1-oWCRFxcQPAdBDO9j71Gzl8Alr5w=", + "dev": true, + "requires": { + "readable-stream": "2.3.6", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "1.0.0", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "1.1.1", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + } + } + }, + "blob": { + "version": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, + "bluebird": { + "version": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha1-2VUfnemPH82h5oPRfukaBgLuLrk=", + "dev": true + }, + "body-parser": { + "version": "https://registry.npmjs.org/body-parser/-/body-parser-1.13.3.tgz", + "integrity": "sha1-wIzzMMM1jhUQFqBXRvE/ApyX+pc=", + "dev": true, + "requires": { + "bytes": "https://registry.npmjs.org/bytes/-/bytes-2.1.0.tgz", + "content-type": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "depd": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz", + "http-errors": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", + "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.11.tgz", + "on-finished": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "qs": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz", + "raw-body": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", + "type-is": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "boolbase": { + "version": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boom": { + "version": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" + } + }, + "bower": { + "version": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz", + "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=", + "dev": true + }, + "bower-installer": { + "version": "https://registry.npmjs.org/bower-installer/-/bower-installer-1.3.6.tgz", + "integrity": "sha1-z3g5tlQh0rJwqyLHT8hYpV46E3A=", + "dev": true, + "requires": { + "async": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "bower": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz", + "colors": "https://registry.npmjs.org/colors/-/colors-1.2.4.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "node-fs": "https://registry.npmjs.org/node-fs/-/node-fs-0.1.7.tgz", + "nopt": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz" + } + }, + "brace-expansion": { + "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "dev": true, + "requires": { + "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } + }, + "braces": { + "version": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "fill-range": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "repeat-element": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "snapdragon": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "snapdragon-node": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "split-string": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "to-regex": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" + }, + "dependencies": { + "extend-shallow": { + "version": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + } + } + } + }, + "browserslist": { + "version": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000836.tgz", + "electron-to-chromium": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.45.tgz" + } + }, + "buffer-alloc": { + "version": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha1-iQ3ZDZI6hz4I4Q5f1RpX5bfM4Ow=", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "buffer-fill": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz" + } + }, + "buffer-alloc-unsafe": { + "version": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha1-vX3CauKXLQ7aJTvgYdupkjScGfA=", + "dev": true + }, + "buffer-fill": { + "version": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "buffer-from": { + "version": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", + "integrity": "sha1-FfS5vO8BIETfMRQsFDM8r24CYNA=", + "dev": true, + "optional": true + }, + "buffer-to-vinyl": { + "version": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz", + "integrity": "sha1-APFfruOreh3aLN5tkSG//dB7ImI=", + "dev": true, + "requires": { + "file-type": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "uuid": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz" + }, + "dependencies": { + "file-type": { + "version": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + }, + "uuid": { + "version": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + }, + "vinyl": { + "version": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz" + } + } + } + }, + "bufferstreams": { + "version": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-1.0.1.tgz", + "integrity": "sha1-z7GtlWjTujz+k1upq92VLeiKqyo=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" + } + }, + "builtin-modules": { + "version": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "bytes": { + "version": "https://registry.npmjs.org/bytes/-/bytes-2.1.0.tgz", + "integrity": "sha1-rJPEEOL/ycx89LRks4KJBn9eR7Q=", + "dev": true + }, + "cache-base": { + "version": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "dev": true, + "requires": { + "collection-visit": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "component-emitter": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "get-value": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "has-value": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "set-value": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "to-object-path": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "union-value": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "unset-value": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "0.2.0" + } + }, + "callsite": { + "version": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "camelcase-keys": { + "version": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "map-obj": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + }, + "dependencies": { + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "caniuse-api": { + "version": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true, + "requires": { + "browserslist": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "caniuse-db": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000836.tgz", + "lodash.memoize": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "lodash.uniq": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" + } + }, + "caniuse-db": { + "version": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000836.tgz", + "integrity": "sha1-eItsj28CmRdDsYzbvVT5bQW0uVo=", + "dev": true + }, + "canonical-path": { + "version": "https://registry.npmjs.org/canonical-path/-/canonical-path-0.0.2.tgz", + "integrity": "sha1-4x65N6jJPuKgHfGDl5RyGQKHRXQ=", + "dev": true + }, + "capture-stack-trace": { + "version": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "dev": true + }, + "caseless": { + "version": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "caw": { + "version": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz", + "integrity": "sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ=", + "dev": true, + "requires": { + "get-proxy": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz", + "is-obj": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "tunnel-agent": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz" + }, + "dependencies": { + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + }, + "tunnel-agent": { + "version": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true + } + } + }, + "center-align": { + "version": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "lazy-cache": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz" + } + }, + "chalk": { + "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + }, + "dependencies": { + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "chokidar": { + "version": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "async-each": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "glob-parent": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "is-binary-path": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "readdirp": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz" + }, + "dependencies": { + "glob-parent": { + "version": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + } + }, + "is-extglob": { + "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + } + } + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "clap": { + "version": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" + } + }, + "class-utils": { + "version": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "dev": true, + "requires": { + "arr-union": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "define-property": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "static-extend": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" + }, + "dependencies": { + "define-property": { + "version": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" + } + } + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "right-align": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz" + } + }, + "clone": { + "version": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-buffer": { + "version": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-stats": { + "version": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "cloneable-readable": { + "version": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", + "integrity": "sha1-1ZHe5Kj4vBXaQ86X3O66E9Q+KmU=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz" + }, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + } + } + }, + "co": { + "version": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "coa": { + "version": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "dev": true, + "requires": { + "q": "https://registry.npmjs.org/q/-/q-1.5.1.tgz" + } + }, + "collection-visit": { + "version": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "object-visit": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" + } + }, + "color": { + "version": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "color-convert": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "color-string": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz" + } + }, + "color-convert": { + "version": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha1-wSYRB66y8pTr/+ye2eytUppgl+0=", + "dev": true, + "requires": { + "color-name": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + } + }, + "color-name": { + "version": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true, + "requires": { + "color-name": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + } + }, + "color-support": { + "version": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha1-k4NDeaHMmgxh+C9S8NBDIiUb1aI=", + "dev": true + }, + "colormin": { + "version": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true, + "requires": { + "color": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "css-color-names": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "has": "https://registry.npmjs.org/has/-/has-1.0.1.tgz" + } + }, + "colors": { + "version": "https://registry.npmjs.org/colors/-/colors-1.2.4.tgz", + "integrity": "sha1-4MtB0+SyCAazv8J/RVnwG5S8L3w=", + "dev": true + }, + "combine-lists": { + "version": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", + "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "dev": true, + "requires": { + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz" + } + }, + "combined-stream": { + "version": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + } + }, + "commander": { + "version": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "dev": true, + "requires": { + "graceful-readlink": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" + } + }, + "component-bind": { + "version": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "component-inherit": { + "version": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "compressible": { + "version": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz", + "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=", + "dev": true, + "requires": { + "mime-db": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz" + } + }, + "compression": { + "version": "https://registry.npmjs.org/compression/-/compression-1.5.2.tgz", + "integrity": "sha1-sDuNhub4rSloPLqN+R3cb/x3s5U=", + "dev": true, + "requires": { + "accepts": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz", + "bytes": "https://registry.npmjs.org/bytes/-/bytes-2.1.0.tgz", + "compressible": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "on-headers": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "vary": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "concat-map": { + "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "typedarray": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + }, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + } + } + }, + "concat-with-sourcemaps": { + "version": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha1-1OqT8FriV5CVG5nns7CeOQikCC4=", + "dev": true, + "requires": { + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + }, + "dependencies": { + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "connect": { + "version": "https://registry.npmjs.org/connect/-/connect-2.30.2.tgz", + "integrity": "sha1-jam8vooFTT0xjXTf7JA7XDmhtgk=", + "dev": true, + "requires": { + "basic-auth-connect": "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz", + "body-parser": "https://registry.npmjs.org/body-parser/-/body-parser-1.13.3.tgz", + "bytes": "https://registry.npmjs.org/bytes/-/bytes-2.1.0.tgz", + "compression": "https://registry.npmjs.org/compression/-/compression-1.5.2.tgz", + "connect-timeout": "https://registry.npmjs.org/connect-timeout/-/connect-timeout-1.6.2.tgz", + "content-type": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "cookie": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz", + "cookie-parser": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.5.tgz", + "cookie-signature": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "csurf": "https://registry.npmjs.org/csurf/-/csurf-1.8.3.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "depd": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz", + "errorhandler": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.4.3.tgz", + "express-session": "https://registry.npmjs.org/express-session/-/express-session-1.11.3.tgz", + "finalhandler": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.0.tgz", + "fresh": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", + "http-errors": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", + "method-override": "https://registry.npmjs.org/method-override/-/method-override-2.3.10.tgz", + "morgan": "https://registry.npmjs.org/morgan/-/morgan-1.6.1.tgz", + "multiparty": "https://registry.npmjs.org/multiparty/-/multiparty-3.3.2.tgz", + "on-headers": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "pause": "https://registry.npmjs.org/pause/-/pause-0.1.0.tgz", + "qs": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz", + "response-time": "https://registry.npmjs.org/response-time/-/response-time-2.3.2.tgz", + "serve-favicon": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.3.2.tgz", + "serve-index": "https://registry.npmjs.org/serve-index/-/serve-index-1.7.3.tgz", + "serve-static": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.3.tgz", + "type-is": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "utils-merge": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "vhost": "https://registry.npmjs.org/vhost/-/vhost-3.0.2.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "connect-livereload": { + "version": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.5.4.tgz", + "integrity": "sha1-gBV9E3HJ83zBQDmrGJWXDRGdw7w=", + "dev": true + }, + "connect-timeout": { + "version": "https://registry.npmjs.org/connect-timeout/-/connect-timeout-1.6.2.tgz", + "integrity": "sha1-3ppexh4zoStu2qt7XwYumMWZuI4=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "http-errors": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "on-headers": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "console-stream": { + "version": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", + "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=", + "dev": true, + "optional": true + }, + "consolidate": { + "version": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz", + "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=", + "dev": true, + "requires": { + "bluebird": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz" + } + }, + "content-type": { + "version": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", + "dev": true + }, + "convert-source-map": { + "version": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "cookie": { + "version": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz", + "integrity": "sha1-5zSlwUF/zkctWu+Cw4HKu2TRpDU=", + "dev": true + }, + "cookie-parser": { + "version": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.5.tgz", + "integrity": "sha1-nXVVcPtdF4kHcSJ6AjFNm+fPg1Y=", + "dev": true, + "requires": { + "cookie": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz", + "cookie-signature": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + } + }, + "cookie-signature": { + "version": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-descriptor": { + "version": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz", + "integrity": "sha1-D+bUW/PKw6w2Sp1y3nV29OsiG50=", + "dev": true + }, + "core-util-is": { + "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha1-YXPOvVb6wELB9DkO33r2wHx8uJI=", + "dev": true, + "requires": { + "is-directory": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "parse-json": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "require-from-string": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz" + }, + "dependencies": { + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "crc": { + "version": "https://registry.npmjs.org/crc/-/crc-3.3.0.tgz", + "integrity": "sha1-+mIuG8OIvyVzCQgta2UgDOZwkLo=", + "dev": true + }, + "create-error-class": { + "version": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz" + } + }, + "cross-spawn": { + "version": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "shebang-command": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "which": "https://registry.npmjs.org/which/-/which-1.3.0.tgz" + }, + "dependencies": { + "lru-cache": { + "version": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha1-oRdc80lt/IQ2wVbDNLSVWZK85pw=", + "dev": true, + "optional": true, + "requires": { + "pseudomap": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "yallist": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" + } + } + } + }, + "cryptiles": { + "version": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz" + } + }, + "csrf": { + "version": "https://registry.npmjs.org/csrf/-/csrf-3.0.6.tgz", + "integrity": "sha1-thEg3c7q/JHnbtUxO7XAsmZ7cQo=", + "dev": true, + "requires": { + "rndm": "https://registry.npmjs.org/rndm/-/rndm-1.2.0.tgz", + "tsscmp": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz", + "uid-safe": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.4.tgz" + } + }, + "css-color-names": { + "version": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-select": { + "version": "https://registry.npmjs.org/css-select/-/css-select-1.3.0-rc0.tgz", + "integrity": "sha1-b5MZaqrnN2ZuoQNqjLFKj8t6kjE=", + "dev": true, + "optional": true, + "requires": { + "boolbase": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "css-what": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "domutils": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "nth-check": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz" + } + }, + "css-select-base-adapter": { + "version": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.0.tgz", + "integrity": "sha1-AQKz0UYw34bD65+p9UVicBBs+ZA=", + "dev": true, + "optional": true + }, + "css-tree": { + "version": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha25.tgz", + "integrity": "sha1-G7+r+/bu708B2RCP8u3Qvi/jVZc=", + "dev": true, + "optional": true, + "requires": { + "mdn-data": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + } + }, + "css-url-regex": { + "version": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", + "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", + "dev": true, + "optional": true + }, + "css-what": { + "version": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true, + "optional": true + }, + "cssnano": { + "version": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true, + "requires": { + "autoprefixer": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "defined": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "has": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "postcss-calc": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "postcss-colormin": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "postcss-convert-values": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "postcss-discard-comments": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "postcss-discard-duplicates": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "postcss-discard-empty": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "postcss-discard-overridden": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "postcss-discard-unused": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "postcss-filter-plugins": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", + "postcss-merge-idents": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "postcss-merge-longhand": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "postcss-merge-rules": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "postcss-minify-font-values": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "postcss-minify-gradients": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "postcss-minify-params": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "postcss-minify-selectors": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "postcss-normalize-charset": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "postcss-normalize-url": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "postcss-ordered-values": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "postcss-reduce-idents": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "postcss-reduce-initial": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "postcss-reduce-transforms": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "postcss-svgo": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "postcss-unique-selectors": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "postcss-zindex": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz" + } + }, + "csso": { + "version": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true, + "requires": { + "clap": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + } + }, + "csurf": { + "version": "https://registry.npmjs.org/csurf/-/csurf-1.8.3.tgz", + "integrity": "sha1-I/KhO/HY/OHQyZZYg5RELLqGpWo=", + "dev": true, + "requires": { + "cookie": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz", + "cookie-signature": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "csrf": "https://registry.npmjs.org/csrf/-/csrf-3.0.6.tgz", + "http-errors": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz" + } + }, + "currently-unhandled": { + "version": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" + } + }, + "custom-event": { + "version": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "dashdash": { + "version": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + }, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "dateformat": { + "version": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "dev": true + }, + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + } + }, + "decamelize": { + "version": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "decompress": { + "version": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz", + "integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=", + "dev": true, + "requires": { + "buffer-to-vinyl": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz", + "concat-stream": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "decompress-tar": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz", + "decompress-tarbz2": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz", + "decompress-targz": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-3.1.0.tgz", + "decompress-unzip": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-3.4.0.tgz", + "stream-combiner2": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "vinyl-assign": "https://registry.npmjs.org/vinyl-assign/-/vinyl-assign-1.2.1.tgz", + "vinyl-fs": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz" + }, + "dependencies": { + "arr-diff": { + "version": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" + } + }, + "array-unique": { + "version": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "preserve": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "repeat-element": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz" + } + }, + "expand-brackets": { + "version": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz" + } + }, + "extglob": { + "version": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + } + }, + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "glob-stream": { + "version": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", + "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", + "dev": true, + "requires": { + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "glob-parent": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "micromatch": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "ordered-read-streams": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", + "through2": "0.6.5", + "to-absolute-glob": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", + "unique-stream": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz" + }, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + } + } + }, + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "is-extglob": { + "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + } + }, + "micromatch": { + "version": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "braces": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "expand-brackets": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "extglob": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "filename-regex": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "object.omit": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "parse-glob": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "regex-cache": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz" + } + }, + "ordered-read-streams": { + "version": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", + "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", + "dev": true, + "requires": { + "is-stream": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "readable-stream": "2.3.6" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "1.0.0", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "1.1.1", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + }, + "strip-bom": { + "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + } + }, + "strip-bom-stream": { + "version": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", + "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", + "dev": true, + "requires": { + "first-chunk-stream": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" + } + }, + "unique-stream": { + "version": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", + "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", + "dev": true, + "requires": { + "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "through2-filter": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz" + } + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz" + } + }, + "vinyl-fs": { + "version": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", + "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", + "dev": true, + "requires": { + "duplexify": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", + "glob-stream": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "gulp-sourcemaps": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", + "is-valid-glob": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", + "lazystream": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "lodash.isequal": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "merge-stream": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "readable-stream": "2.3.6", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "strip-bom-stream": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "through2-filter": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", + "vali-date": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "vinyl": "1.2.0" + } + } + } + }, + "decompress-tar": { + "version": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz", + "integrity": "sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=", + "dev": true, + "requires": { + "is-tar": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "strip-dirs": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz", + "tar-stream": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz" + }, + "dependencies": { + "clone": { + "version": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "vinyl": { + "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz" + } + } + } + }, + "decompress-tarbz2": { + "version": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz", + "integrity": "sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=", + "dev": true, + "requires": { + "is-bzip2": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz", + "object-assign": "2.1.1", + "seek-bzip": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", + "strip-dirs": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz", + "tar-stream": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", + "through2": "0.6.5", + "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "vinyl": { + "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "0.2.0", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz" + } + } + } + }, + "decompress-targz": { + "version": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-3.1.0.tgz", + "integrity": "sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=", + "dev": true, + "requires": { + "is-gzip": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", + "object-assign": "2.1.1", + "strip-dirs": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz", + "tar-stream": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", + "through2": "0.6.5", + "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "vinyl": { + "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "0.2.0", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz" + } + } + } + }, + "decompress-unzip": { + "version": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-3.4.0.tgz", + "integrity": "sha1-YUdbQVIGa74/7hL51inRX+ZHjus=", + "dev": true, + "requires": { + "is-zip": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz", + "read-all-stream": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", + "stat-mode": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", + "strip-dirs": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "vinyl": "1.2.0", + "yauzl": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz" + }, + "dependencies": { + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz" + } + } + } + }, + "deep-extend": { + "version": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw=", + "dev": true + }, + "deep-is": { + "version": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "defaults": { + "version": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + } + }, + "define-properties": { + "version": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "object-keys": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz" + } + }, + "define-property": { + "version": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "dev": true, + "requires": { + "is-descriptor": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz" + } + }, + "is-data-descriptor": { + "version": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz" + } + }, + "is-descriptor": { + "version": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "is-data-descriptor": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz" + } + } + } + }, + "defined": { + "version": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" + }, + "dependencies": { + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "arrify": "1.0.1", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + } + } + }, + "delayed-stream": { + "version": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "depd": { + "version": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz", + "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo=", + "dev": true + }, + "deprecated": { + "version": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", + "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", + "dev": true + }, + "destroy": { + "version": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-file": { + "version": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "di": { + "version": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz" + } + }, + "dom-serialize": { + "version": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "ent": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "void-elements": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz" + } + }, + "dom-serializer": { + "version": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "optional": true, + "requires": { + "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "entities": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz" + }, + "dependencies": { + "domelementtype": { + "version": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true, + "optional": true + } + } + }, + "domelementtype": { + "version": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true, + "optional": true + }, + "domutils": { + "version": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "optional": true, + "requires": { + "dom-serializer": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz" + } + }, + "download": { + "version": "https://registry.npmjs.org/download/-/download-4.4.3.tgz", + "integrity": "sha1-qlX9rTktldS2jowr4D4MKqIbqaw=", + "dev": true, + "requires": { + "caw": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz", + "concat-stream": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "each-async": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz", + "filenamify": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz", + "got": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", + "gulp-decompress": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-1.2.0.tgz", + "gulp-rename": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", + "is-url": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "read-all-stream": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", + "readable-stream": "2.3.6", + "stream-combiner2": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "vinyl": "1.2.0", + "vinyl-fs": "2.4.4", + "ware": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "preserve": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "repeat-element": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "glob-stream": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", + "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", + "dev": true, + "requires": { + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "glob": "5.0.15", + "glob-parent": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "micromatch": "2.3.11", + "ordered-read-streams": "0.3.0", + "through2": "0.6.5", + "to-absolute-glob": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", + "unique-stream": "2.2.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + } + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "object.omit": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "parse-glob": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "regex-cache": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz" + } + }, + "ordered-read-streams": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", + "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", + "dev": true, + "requires": { + "is-stream": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "readable-stream": "2.3.6" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "1.0.0", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "1.1.1", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + } + }, + "strip-bom-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", + "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", + "dev": true, + "requires": { + "first-chunk-stream": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "strip-bom": "2.0.0" + } + }, + "unique-stream": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", + "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", + "dev": true, + "requires": { + "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "through2-filter": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz" + } + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz" + } + }, + "vinyl-fs": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", + "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", + "dev": true, + "requires": { + "duplexify": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", + "glob-stream": "5.3.5", + "graceful-fs": "4.1.11", + "gulp-sourcemaps": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", + "is-valid-glob": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", + "lazystream": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "lodash.isequal": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "merge-stream": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "readable-stream": "2.3.6", + "strip-bom": "2.0.0", + "strip-bom-stream": "1.0.0", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "through2-filter": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", + "vali-date": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "vinyl": "1.2.0" + } + } + } + }, + "duplexer": { + "version": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "duplexer2": { + "version": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" + } + }, + "duplexify": { + "version": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", + "integrity": "sha1-WSkD9dgLONA3IgVBJk1poZj7NBA=", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "2.3.6", + "stream-shift": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz" + }, + "dependencies": { + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "1.0.0", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "1.1.1", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + } + } + }, + "each-async": { + "version": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz", + "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=", + "dev": true, + "requires": { + "onetime": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "set-immediate-shim": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz" + } + }, + "ecc-jsbn": { + "version": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + } + }, + "ee-first": { + "version": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.45.tgz", + "integrity": "sha1-RYrBscXHYM6IEaFtK/vZfsMLr7g=", + "dev": true + }, + "encodeurl": { + "version": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", + "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", + "dev": true, + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.3.3.tgz" + }, + "dependencies": { + "once": { + "version": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true, + "requires": { + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + } + } + }, + "engine.io": { + "version": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", + "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "dev": true, + "requires": { + "accepts": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "base64id": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "cookie": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "engine.io-parser": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "ws": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz" + }, + "dependencies": { + "accepts": { + "version": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "dev": true, + "requires": { + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "negotiator": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz" + } + }, + "cookie": { + "version": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + }, + "negotiator": { + "version": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + } + } + }, + "engine.io-client": { + "version": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", + "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "dev": true, + "requires": { + "component-emitter": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "component-inherit": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "engine.io-parser": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "has-cors": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "parsejson": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "parseqs": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "parseuri": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "ws": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "xmlhttprequest-ssl": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "yeast": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-parser": { + "version": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "dev": true, + "requires": { + "after": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "arraybuffer.slice": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "base64-arraybuffer": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "blob": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "has-binary": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "wtf-8": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz" + } + }, + "ent": { + "version": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "entities": { + "version": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true, + "optional": true + }, + "errno": { + "version": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", + "dev": true, + "optional": true, + "requires": { + "prr": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" + } + }, + "error-ex": { + "version": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + } + }, + "errorhandler": { + "version": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.4.3.tgz", + "integrity": "sha1-t7cO2PNZ6duICS8tIMD4MUIK2D8=", + "dev": true, + "requires": { + "accepts": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + }, + "dependencies": { + "accepts": { + "version": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "negotiator": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz" + } + }, + "negotiator": { + "version": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + } + } + }, + "es-abstract": { + "version": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha1-nbvdJ8aFbwABQhyhh4LXhr+KYWU=", + "dev": true, + "requires": { + "es-to-primitive": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "function-bind": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "has": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "is-callable": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "is-regex": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz" + } + }, + "es-to-primitive": { + "version": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "is-date-object": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "is-symbol": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz" + } + }, + "es6-promise": { + "version": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", + "dev": true + }, + "escape-html": { + "version": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha1-264X75bI5L7bE1b0UE+kzC98t+I=", + "dev": true, + "requires": { + "esprima": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "optionator": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + }, + "dependencies": { + "esprima": { + "version": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "optional": true + } + } + }, + "eslint": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.3.0.tgz", + "integrity": "sha512-N/tCqlMKkyNvAvLu+zI9AqDasnSLt00K+Hu8kdsERliC9jYEc8ck12XtjvOXrBKu8fK6RrBcN9bat6Xk++9jAg==", + "dev": true, + "requires": { + "ajv": "6.5.2", + "babel-code-frame": "6.26.0", + "chalk": "2.4.1", + "cross-spawn": "6.0.5", + "debug": "3.1.0", + "doctrine": "2.1.0", + "eslint-scope": "4.0.0", + "eslint-utils": "1.3.1", + "eslint-visitor-keys": "1.0.0", + "espree": "4.0.0", + "esquery": "1.0.1", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "file-entry-cache": "2.0.0", + "functional-red-black-tree": "1.0.1", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "globals": "11.7.0", + "ignore": "4.0.3", + "imurmurhash": "0.1.4", + "inquirer": "5.2.0", + "is-resolvable": "1.1.0", + "js-yaml": "3.12.0", + "json-stable-stringify-without-jsonify": "1.0.1", + "levn": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "natural-compare": "1.4.0", + "optionator": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "path-is-inside": "1.0.2", + "pluralize": "7.0.0", + "progress": "2.0.0", + "regexpp": "2.0.0", + "require-uncached": "1.0.3", + "semver": "5.5.0", + "string.prototype.matchall": "2.0.0", + "strip-ansi": "4.0.0", + "strip-json-comments": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "table": "4.0.3", + "text-table": "0.2.0" + }, + "dependencies": { + "ajv": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", + "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", + "dev": true, + "requires": { + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "supports-color": "5.4.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "1.0.4", + "path-key": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "semver": "5.5.0", + "shebang-command": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "which": "https://registry.npmjs.org/which/-/which-1.3.0.tgz" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "esprima": "4.0.1" + } + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "eslint-scope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "dev": true, + "requires": { + "esrecurse": "4.2.1", + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz" + } + }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-4.0.0.tgz", + "integrity": "sha512-kapdTCt1bjmspxStVKX6huolXVV5ZfyZguY1lcfhVVZstce3bqxH9mcLzNn3/mlgW6wQ732+0fuG9v7h0ZQoKg==", + "dev": true, + "requires": { + "acorn": "5.7.1", + "acorn-jsx": "4.1.1" + } + }, + "esprima": { + "version": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz" + } + }, + "estemplate": { + "version": "https://registry.npmjs.org/estemplate/-/estemplate-0.5.1.tgz", + "integrity": "sha1-FxSp1GGQc4rJWLyv1J4CnNpWo54=", + "dev": true, + "requires": { + "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz" + } + }, + "estraverse": { + "version": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", + "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=", + "dev": true + }, + "event-stream": { + "version": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "dev": true, + "requires": { + "duplexer": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "from": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "map-stream": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "pause-stream": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "split": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "stream-combiner": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + } + }, + "eventemitter3": { + "version": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha1-CQtNbNvWRe0Qv3UNS1QHlC17oWM=", + "dev": true + }, + "exec-buffer": { + "version": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", + "integrity": "sha1-sWhtvZBMfPmC5lLB9aebHlVzCCs=", + "dev": true, + "optional": true, + "requires": { + "execa": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "p-finally": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "pify": "3.0.0", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "tempfile": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "optional": true + } + } + }, + "exec-series": { + "version": "https://registry.npmjs.org/exec-series/-/exec-series-1.0.3.tgz", + "integrity": "sha1-bSV6m+rEgqhyx3g7yGFYOfx3FDo=", + "dev": true, + "optional": true, + "requires": { + "async-each-series": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } + }, + "execa": { + "version": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "optional": true, + "requires": { + "cross-spawn": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "get-stream": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "is-stream": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "npm-run-path": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "p-finally": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "signal-exit": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "strip-eof": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" + } + }, + "executable": { + "version": "https://registry.npmjs.org/executable/-/executable-1.1.0.tgz", + "integrity": "sha1-h3mA6REvM5EGbaNyZd562ENKtNk=", + "dev": true, + "optional": true, + "requires": { + "meow": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz" + } + }, + "expand-braces": { + "version": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", + "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "dev": true, + "requires": { + "array-slice": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "braces": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz" + }, + "dependencies": { + "array-slice": { + "version": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "array-unique": { + "version": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", + "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "dev": true, + "requires": { + "expand-range": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz" + } + }, + "expand-range": { + "version": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", + "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "dev": true, + "requires": { + "is-number": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz" + } + }, + "is-number": { + "version": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", + "dev": true + }, + "repeat-string": { + "version": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", + "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "dev": true + } + } + }, + "expand-brackets": { + "version": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "define-property": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "posix-character-classes": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "regex-not": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "snapdragon": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "to-regex": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" + }, + "dependencies": { + "define-property": { + "version": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" + } + }, + "extend-shallow": { + "version": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + } + } + } + }, + "expand-range": { + "version": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz" + }, + "dependencies": { + "fill-range": { + "version": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha1-6x53OrsFbc2N8r/favWbizqTZWU=", + "dev": true, + "requires": { + "is-number": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "isobject": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "randomatic": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "repeat-element": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + } + }, + "is-number": { + "version": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + } + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isobject": { + "version": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + } + }, + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + } + } + } + }, + "expand-tilde": { + "version": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz" + } + }, + "express-session": { + "version": "https://registry.npmjs.org/express-session/-/express-session-1.11.3.tgz", + "integrity": "sha1-XMmPP1/4Ttg1+Ry/CqvQxxB0AK8=", + "dev": true, + "requires": { + "cookie": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz", + "cookie-signature": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "crc": "https://registry.npmjs.org/crc/-/crc-3.3.0.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "depd": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz", + "on-headers": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "uid-safe": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.0.0.tgz", + "utils-merge": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "uid-safe": { + "version": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.0.0.tgz", + "integrity": "sha1-p/PGymSh9qXQTsDvPkw9U2cxcTc=", + "dev": true, + "requires": { + "base64-url": "https://registry.npmjs.org/base64-url/-/base64-url-1.2.1.tgz" + } + } + } + }, + "extend": { + "version": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extend-shallow": { + "version": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" + }, + "dependencies": { + "is-extendable": { + "version": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + } + } + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "0.4.2", + "iconv-lite": "0.4.23", + "tmp": "0.0.33" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + } + } + } + }, + "extglob": { + "version": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "define-property": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "expand-brackets": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "fragment-cache": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "regex-not": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "snapdragon": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "to-regex": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" + }, + "dependencies": { + "define-property": { + "version": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" + } + }, + "extend-shallow": { + "version": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + } + }, + "is-accessor-descriptor": { + "version": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz" + } + }, + "is-data-descriptor": { + "version": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz" + } + }, + "is-descriptor": { + "version": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "is-data-descriptor": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz" + } + } + } + }, + "extract-zip": { + "version": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz", + "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=", + "dev": true, + "requires": { + "concat-stream": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "yauzl": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz" + }, + "dependencies": { + "mkdirp": { + "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "dev": true, + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + } + } + } + }, + "extsprintf": { + "version": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fancy-log": { + "version": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", + "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", + "dev": true, + "requires": { + "ansi-gray": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "color-support": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "time-stamp": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "faye-websocket": { + "version": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz" + } + }, + "fd-slicer": { + "version": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" + } + }, + "figures": { + "version": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "optional": true, + "requires": { + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "1.3.0", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } + }, + "file-type": { + "version": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", + "dev": true + }, + "filename-regex": { + "version": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "filename-reserved-regex": { + "version": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", + "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=", + "dev": true + }, + "filenamify": { + "version": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz", + "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=", + "dev": true, + "requires": { + "filename-reserved-regex": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", + "strip-outer": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "trim-repeated": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz" + } + }, + "fill-range": { + "version": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "is-number": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "to-regex-range": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" + }, + "dependencies": { + "extend-shallow": { + "version": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + } + } + } + }, + "finalhandler": { + "version": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.0.tgz", + "integrity": "sha1-llpS2ejQXSuFdUhUH7ibU6JJfZs=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.2.tgz", + "on-finished": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "unpipe": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + } + }, + "escape-html": { + "version": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.2.tgz", + "integrity": "sha1-130y+pjjjC9BroXpJ44ODmuhAiw=", + "dev": true + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "find-index": { + "version": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", + "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", + "dev": true + }, + "find-up": { + "version": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "find-versions": { + "version": "https://registry.npmjs.org/find-versions/-/find-versions-1.2.1.tgz", + "integrity": "sha1-y96fEuOFdaCvG+G5osXV/Y8Ya2I=", + "dev": true, + "optional": true, + "requires": { + "array-uniq": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "meow": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "semver-regex": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz" + } + }, + "findup-sync": { + "version": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "micromatch": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "resolve-dir": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" + } + }, + "fined": { + "version": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", + "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", + "dev": true, + "requires": { + "expand-tilde": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "is-plain-object": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "object.defaults": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "object.pick": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "parse-filepath": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz" + } + }, + "first-chunk-stream": { + "version": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", + "dev": true + }, + "flagged-respawn": { + "version": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz", + "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=", + "dev": true + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "flatten": { + "version": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "dev": true + }, + "follow-redirects": { + "version": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", + "integrity": "sha1-2BIPRRgZD1Wqxlu2/HuF/NZm1qo=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + } + } + } + }, + "for-in": { + "version": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" + } + }, + "foreach": { + "version": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forever-agent": { + "version": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz" + } + }, + "fragment-cache": { + "version": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" + } + }, + "fresh": { + "version": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", + "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=", + "dev": true + }, + "from": { + "version": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, + "fs-constants": { + "version": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha1-a+Dem+mYzhavivwkSXue6bfM2a0=", + "dev": true + }, + "fs-extra": { + "version": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "jsonfile": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "klaw": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz" + }, + "dependencies": { + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "fs-readfile-promise": { + "version": "https://registry.npmjs.org/fs-readfile-promise/-/fs-readfile-promise-2.0.1.tgz", + "integrity": "sha1-gAI4I5gfn//+AWCei+Zo9prknnA=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz" + }, + "dependencies": { + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "fs.realpath": { + "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gaze": { + "version": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", + "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", + "dev": true, + "requires": { + "globule": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz" + } + }, + "get-proxy": { + "version": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz", + "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=", + "dev": true, + "requires": { + "rc": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" + } + }, + "get-stdin": { + "version": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "optional": true + }, + "get-value": { + "version": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + }, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "gifsicle": { + "version": "https://registry.npmjs.org/gifsicle/-/gifsicle-3.0.4.tgz", + "integrity": "sha1-9Fy17RAWW2ZdySng6TKLbIId+js=", + "dev": true, + "optional": true, + "requires": { + "bin-build": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz", + "bin-wrapper": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-3.0.2.tgz", + "logalot": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz" + } + }, + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "glob-base": { + "version": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + }, + "dependencies": { + "glob-parent": { + "version": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + } + }, + "is-extglob": { + "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + } + } + } + }, + "glob-parent": { + "version": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "path-dirname": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz" + } + }, + "glob-stream": { + "version": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", + "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", + "dev": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", + "glob2base": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "ordered-read-streams": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "unique-stream": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz" + }, + "dependencies": { + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", + "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", + "dev": true, + "requires": { + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + } + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "dev": true, + "requires": { + "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + } + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + } + } + }, + "glob-watcher": { + "version": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", + "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", + "dev": true, + "requires": { + "gaze": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz" + } + }, + "glob2base": { + "version": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", + "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", + "dev": true, + "requires": { + "find-index": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz" + } + }, + "global-modules": { + "version": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o=", + "dev": true, + "requires": { + "global-prefix": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "is-windows": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "resolve-dir": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" + } + }, + "global-prefix": { + "version": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "homedir-polyfill": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "ini": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "is-windows": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "which": "https://registry.npmjs.org/which/-/which-1.3.0.tgz" + } + }, + "globals": { + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz", + "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==", + "dev": true + }, + "globby": { + "version": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "globule": { + "version": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", + "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", + "dev": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz" + }, + "dependencies": { + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz" + } + }, + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", + "dev": true + }, + "inherits": { + "version": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + }, + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", + "dev": true + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "dev": true, + "requires": { + "lru-cache": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "sigmund": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" + } + } + } + }, + "glogg": { + "version": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", + "integrity": "sha1-3PdY5EeJzD89MsHzVio2duajSBA=", + "dev": true, + "requires": { + "sparkles": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz" + } + }, + "got": { + "version": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", + "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", + "dev": true, + "requires": { + "create-error-class": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "duplexer2": "0.1.4", + "is-redirect": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "is-retry-allowed": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "is-stream": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "lowercase-keys": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "node-status-codes": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "parse-json": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "read-all-stream": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", + "readable-stream": "2.3.6", + "timed-out": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", + "unzip-response": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", + "url-parse-lax": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz" + }, + "dependencies": { + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "2.3.6" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "1.0.0", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "1.1.1", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + } + } + }, + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", + "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", + "dev": true, + "requires": { + "natives": "https://registry.npmjs.org/natives/-/natives-1.1.3.tgz" + } + }, + "graceful-readlink": { + "version": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "gulp": { + "version": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", + "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", + "dev": true, + "requires": { + "archy": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "deprecated": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", + "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "interpret": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "liftoff": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "orchestrator": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", + "pretty-hrtime": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "tildify": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", + "v8flags": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "vinyl-fs": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz" + }, + "dependencies": { + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "gulp-concat": { + "version": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", + "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", + "dev": true, + "requires": { + "concat-with-sourcemaps": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz" + }, + "dependencies": { + "clone": { + "version": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "dev": true + }, + "clone-stats": { + "version": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "replace-ext": { + "version": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "vinyl": { + "version": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", + "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "clone-buffer": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "cloneable-readable": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", + "remove-trailing-separator": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz" + } + } + } + }, + "gulp-connect": { + "version": "https://registry.npmjs.org/gulp-connect/-/gulp-connect-5.0.0.tgz", + "integrity": "sha1-8v3zBq6RFGg2jCKF8teC8T7dr04=", + "dev": true, + "requires": { + "connect": "https://registry.npmjs.org/connect/-/connect-2.30.2.tgz", + "connect-livereload": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.5.4.tgz", + "event-stream": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "tiny-lr": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz" + } + }, + "gulp-decompress": { + "version": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-1.2.0.tgz", + "integrity": "sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc=", + "dev": true, + "requires": { + "archive-type": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz", + "decompress": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz", + "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "readable-stream": "2.3.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "1.0.0", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "1.1.1", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + } + } + }, + "gulp-eslint": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gulp-eslint/-/gulp-eslint-5.0.0.tgz", + "integrity": "sha512-9GUqCqh85C7rP9120cpxXuZz2ayq3BZc85pCTuPJS03VQYxne0aWPIXWx6LSvsGPa3uRqtSO537vaugOh+5cXg==", + "dev": true, + "requires": { + "eslint": "5.3.0", + "fancy-log": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", + "plugin-error": "1.0.1" + }, + "dependencies": { + "plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "dev": true, + "requires": { + "ansi-colors": "1.1.0", + "arr-diff": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "arr-union": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" + } + } + } + }, + "gulp-imagemin": { + "version": "https://registry.npmjs.org/gulp-imagemin/-/gulp-imagemin-4.1.0.tgz", + "integrity": "sha1-XONH8dFwb+08yPF3fKkJSlg7ULc=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "fancy-log": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", + "imagemin": "https://registry.npmjs.org/imagemin/-/imagemin-5.3.1.tgz", + "imagemin-gifsicle": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-5.2.0.tgz", + "imagemin-jpegtran": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-5.0.2.tgz", + "imagemin-optipng": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz", + "imagemin-svgo": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-6.0.0.tgz", + "plugin-error": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "plur": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", + "pretty-bytes": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "through2-concurrent": "https://registry.npmjs.org/through2-concurrent/-/through2-concurrent-1.1.1.tgz" + }, + "dependencies": { + "ansi-styles": { + "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "requires": { + "color-convert": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz" + } + }, + "chalk": { + "version": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", + "dev": true, + "requires": { + "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz" + } + }, + "has-flag": { + "version": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha1-HGszdALCE3YF7+GfEP7DkPb6q1Q=", + "dev": true, + "requires": { + "has-flag": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + } + } + } + }, + "gulp-less": { + "version": "https://registry.npmjs.org/gulp-less/-/gulp-less-3.5.0.tgz", + "integrity": "sha1-gBT0ad38ZUTX3aUAmN7wNxu7T3g=", + "dev": true, + "requires": { + "accord": "https://registry.npmjs.org/accord/-/accord-0.28.0.tgz", + "less": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "plugin-error": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "vinyl-sourcemaps-apply": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz" + }, + "dependencies": { + "replace-ext": { + "version": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + } + } + }, + "gulp-ngdocs": { + "version": "https://registry.npmjs.org/gulp-ngdocs/-/gulp-ngdocs-0.3.0.tgz", + "integrity": "sha1-J7Z6Ql6zh1ImNFq4lgTXN/Y1fCE=", + "dev": true, + "requires": { + "angular": "https://registry.npmjs.org/angular/-/angular-1.3.20.tgz", + "angular-animate": "https://registry.npmjs.org/angular-animate/-/angular-animate-1.3.20.tgz", + "canonical-path": "https://registry.npmjs.org/canonical-path/-/canonical-path-0.0.2.tgz", + "extend": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", + "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.0.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz", + "marked": "https://registry.npmjs.org/marked/-/marked-0.3.2.tgz", + "merge-stream": "https://registry.npmjs.org/merge-stream/-/merge-stream-0.1.5.tgz", + "path": "https://registry.npmjs.org/path/-/path-0.4.9.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-0.6.1.tgz", + "vinyl-fs": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.7.tgz" + }, + "dependencies": { + "ansi-regex": { + "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", + "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", + "dev": true + }, + "ansi-styles": { + "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", + "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", + "dev": true + }, + "chalk": { + "version": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", + "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", + "dev": true, + "requires": { + "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz" + } + }, + "clone": { + "version": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "dateformat": { + "version": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "meow": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz" + } + }, + "extend": { + "version": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", + "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=", + "dev": true + }, + "gulp-util": { + "version": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.0.tgz", + "integrity": "sha1-b+7cR9aXKCO6zplH/F9GvYo0Zuc=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", + "dateformat": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz", + "lodash._reinterpolate": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz", + "lodash.template": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz", + "multipipe": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", + "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz" + }, + "dependencies": { + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", + "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz" + } + } + } + }, + "has-ansi": { + "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", + "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", + "dev": true, + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz" + } + }, + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz", + "integrity": "sha1-W3cjA03aTSYuWkb7LFjXzCL3FCA=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz", + "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI=", + "dev": true + }, + "lodash.defaults": { + "version": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz", + "integrity": "sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=", + "dev": true, + "requires": { + "lodash._objecttypes": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", + "lodash.keys": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz" + } + }, + "lodash.escape": { + "version": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz", + "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=", + "dev": true, + "requires": { + "lodash._escapehtmlchar": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz", + "lodash._reunescapedhtml": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz", + "lodash.keys": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz" + } + }, + "lodash.keys": { + "version": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", + "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", + "dev": true, + "requires": { + "lodash._isnative": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz", + "lodash._shimkeys": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", + "lodash.isobject": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz" + } + }, + "lodash.template": { + "version": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz", + "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=", + "dev": true, + "requires": { + "lodash._escapestringchar": "https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz", + "lodash._reinterpolate": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz", + "lodash.defaults": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz", + "lodash.escape": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz", + "lodash.keys": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", + "lodash.templatesettings": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz", + "lodash.values": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz" + } + }, + "lodash.templatesettings": { + "version": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz", + "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=", + "dev": true, + "requires": { + "lodash._reinterpolate": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz", + "lodash.escape": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz" + } + }, + "merge-stream": { + "version": "https://registry.npmjs.org/merge-stream/-/merge-stream-0.1.5.tgz", + "integrity": "sha1-5oIPet267gA/SMpKWMfFolPV4Fw=", + "dev": true, + "requires": { + "through2": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz" + }, + "dependencies": { + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", + "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz" + } + } + } + }, + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz", + "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + }, + "strip-ansi": { + "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", + "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", + "dev": true, + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz" + } + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", + "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", + "dev": true + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-0.6.1.tgz", + "integrity": "sha1-90KzKJPovSYUbnieT9LMssB6cX4=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + }, + "dependencies": { + "xtend": { + "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + } + } + }, + "vinyl": { + "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz", + "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=", + "dev": true, + "requires": { + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz" + } + }, + "vinyl-fs": { + "version": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.7.tgz", + "integrity": "sha1-LiXP5t9cgIGPl/9Be/XCGkHkpJs=", + "dev": true, + "requires": { + "glob-stream": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", + "glob-watcher": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-0.6.1.tgz", + "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz" + }, + "dependencies": { + "vinyl": { + "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz" + } + } + } + }, + "xtend": { + "version": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", + "dev": true + } + } + }, + "gulp-open": { + "version": "https://registry.npmjs.org/gulp-open/-/gulp-open-2.1.0.tgz", + "integrity": "sha1-rAHu6JjXenrAgS+tTz1T0IaH1Bw=", + "dev": true, + "requires": { + "colors": "https://registry.npmjs.org/colors/-/colors-1.2.4.tgz", + "open": "https://registry.npmjs.org/open/-/open-0.0.5.tgz", + "plugin-log": "https://registry.npmjs.org/plugin-log/-/plugin-log-0.1.0.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz" + } + }, + "gulp-postcss": { + "version": "https://registry.npmjs.org/gulp-postcss/-/gulp-postcss-6.4.0.tgz", + "integrity": "sha1-eKMuPIeqbNzsWuHJBeGW1HjoxdU=", + "dev": true, + "requires": { + "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "postcss-load-config": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", + "vinyl-sourcemaps-apply": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz" + } + }, + "gulp-rename": { + "version": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", + "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=", + "dev": true + }, + "gulp-sort": { + "version": "https://registry.npmjs.org/gulp-sort/-/gulp-sort-2.0.0.tgz", + "integrity": "sha1-xnYqLx8N4KP8WVohWZ0/rI26Gso=", + "dev": true, + "requires": { + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz" + } + }, + "gulp-sourcemaps": { + "version": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", + "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", + "dev": true, + "requires": { + "convert-source-map": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "graceful-fs": "4.1.11", + "strip-bom": "2.0.0", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "vinyl": "1.2.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + } + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz" + } + } + } + }, + "gulp-util": { + "version": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "dev": true, + "requires": { + "array-differ": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "array-uniq": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "beeper": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "dateformat": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "fancy-log": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", + "gulplog": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "has-gulplog": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "lodash._reescape": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "lodash._reevaluate": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "lodash._reinterpolate": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "lodash.template": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "multipipe": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz" + }, + "dependencies": { + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + } + } + }, + "gulp-watch": { + "version": "https://registry.npmjs.org/gulp-watch/-/gulp-watch-4.3.11.tgz", + "integrity": "sha1-Fi/FY96fx3DpH5p845VVE6mhGMA=", + "dev": true, + "requires": { + "anymatch": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "chokidar": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "glob-parent": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "slash": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "vinyl-file": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-2.0.0.tgz" + }, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + }, + "vinyl": { + "version": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz" + } + } + } + }, + "gulp-wrap": { + "version": "https://registry.npmjs.org/gulp-wrap/-/gulp-wrap-0.13.0.tgz", + "integrity": "sha1-kPsLSieiZkM4Mv98YSLbXB7olMY=", + "dev": true, + "requires": { + "consolidate": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz", + "es6-promise": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "fs-readfile-promise": "https://registry.npmjs.org/fs-readfile-promise/-/fs-readfile-promise-2.0.1.tgz", + "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "node.extend": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.6.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "tryit": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", + "vinyl-bufferstream": "https://registry.npmjs.org/vinyl-bufferstream/-/vinyl-bufferstream-1.0.1.tgz" + } + }, + "gulp-wrap-js": { + "version": "https://registry.npmjs.org/gulp-wrap-js/-/gulp-wrap-js-0.4.1.tgz", + "integrity": "sha1-3uYqpISqupVHqT0f9c0MPQvtwDE=", + "dev": true, + "requires": { + "escodegen": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "estemplate": "https://registry.npmjs.org/estemplate/-/estemplate-0.5.1.tgz", + "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "vinyl-sourcemaps-apply": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.1.4.tgz" + }, + "dependencies": { + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + } + }, + "vinyl-sourcemaps-apply": { + "version": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.1.4.tgz", + "integrity": "sha1-xfy9Q+LyOEI8LcmL3db3m3K8NFs=", + "dev": true, + "requires": { + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz" + } + } + } + }, + "gulplog": { + "version": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "requires": { + "glogg": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz" + } + }, + "har-schema": { + "version": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true + }, + "har-validator": { + "version": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "requires": { + "ajv": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "har-schema": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz" + } + }, + "has": { + "version": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + } + }, + "has-ansi": { + "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + } + }, + "has-binary": { + "version": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "dev": true, + "requires": { + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + } + }, + "has-cors": { + "version": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-gulplog": { + "version": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "dev": true, + "requires": { + "sparkles": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz" + } + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-value": { + "version": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "has-values": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + } + }, + "has-values": { + "version": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" + }, + "dependencies": { + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + } + } + } + }, + "hasha": { + "version": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", + "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", + "dev": true, + "requires": { + "is-stream": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "hawk": { + "version": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "cryptiles": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "sntp": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" + } + }, + "hoek": { + "version": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "homedir-polyfill": { + "version": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true, + "requires": { + "parse-passwd": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" + } + }, + "hosted-git-info": { + "version": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha1-IyNbKasjDFdqqw1PE/wEawsDgiI=", + "dev": true + }, + "html-comment-regex": { + "version": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", + "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", + "dev": true + }, + "http-errors": { + "version": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", + "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "statuses": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + } + }, + "http-parser-js": { + "version": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.12.tgz", + "integrity": "sha1-uc+/Sizybw/DSxDKFImid3HjR08=", + "dev": true + }, + "http-proxy": { + "version": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha1-etOElGWPhGBeL220Q230EPTlvpo=", + "dev": true, + "requires": { + "eventemitter3": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "follow-redirects": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", + "requires-port": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + } + }, + "http-signature": { + "version": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "jsprim": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "sshpk": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz" + } + }, + "iconv-lite": { + "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.11.tgz", + "integrity": "sha1-LstC/SlHRJIiCaLnxATayHk9it4=", + "dev": true + }, + "ignore": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.3.tgz", + "integrity": "sha512-Z/vAH2GGIEATQnBVXMclE2IGV6i0GyVngKThcGZ5kHgHMxLo9Ow2+XHRq1aEKEej5vOF1TPJNbvX6J/anT0M7A==", + "dev": true + }, + "image-size": { + "version": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, + "imagemin": { + "version": "https://registry.npmjs.org/imagemin/-/imagemin-5.3.1.tgz", + "integrity": "sha1-8Zwu7h5xumxlWMUV+fyWaAGJptQ=", + "dev": true, + "requires": { + "file-type": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "globby": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "make-dir": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "p-pipe": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz" + }, + "dependencies": { + "replace-ext": { + "version": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + } + } + }, + "imagemin-gifsicle": { + "version": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-5.2.0.tgz", + "integrity": "sha1-N4FSTEV2Eu8EkWrzQkGitCv8tAo=", + "dev": true, + "optional": true, + "requires": { + "exec-buffer": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", + "gifsicle": "https://registry.npmjs.org/gifsicle/-/gifsicle-3.0.4.tgz", + "is-gif": "https://registry.npmjs.org/is-gif/-/is-gif-1.0.0.tgz" + } + }, + "imagemin-jpegtran": { + "version": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-5.0.2.tgz", + "integrity": "sha1-5ogiY7j3kW/duABkDPddLpcNKtY=", + "dev": true, + "optional": true, + "requires": { + "exec-buffer": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", + "is-jpg": "https://registry.npmjs.org/is-jpg/-/is-jpg-1.0.1.tgz", + "jpegtran-bin": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-3.2.0.tgz" + } + }, + "imagemin-optipng": { + "version": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz", + "integrity": "sha1-0i2kEsCfX/AKQzmWC5ioix2+hpU=", + "dev": true, + "optional": true, + "requires": { + "exec-buffer": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", + "is-png": "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz", + "optipng-bin": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-3.1.4.tgz" + } + }, + "imagemin-svgo": { + "version": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-6.0.0.tgz", + "integrity": "sha1-LdjIKUa+Qqjiy8rjxb8Ae8K4ueg=", + "dev": true, + "optional": true, + "requires": { + "buffer-from": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", + "is-svg": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "svgo": "https://registry.npmjs.org/svgo/-/svgo-1.0.5.tgz" + }, + "dependencies": { + "coa": { + "version": "https://registry.npmjs.org/coa/-/coa-2.0.1.tgz", + "integrity": "sha1-8/iwsVBz411wJj+xBCyywCPbOK8=", + "dev": true, + "optional": true, + "requires": { + "q": "https://registry.npmjs.org/q/-/q-1.5.1.tgz" + } + }, + "colors": { + "version": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true, + "optional": true + }, + "csso": { + "version": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", + "integrity": "sha1-e564vmFiiXPBsmHhadLwJACOdYs=", + "dev": true, + "optional": true, + "requires": { + "css-tree": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz" + }, + "dependencies": { + "css-tree": { + "version": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha1-P6nU7zFCy9HDAedmTB81K9gvWjk=", + "dev": true, + "optional": true, + "requires": { + "mdn-data": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + } + } + } + }, + "esprima": { + "version": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", + "dev": true, + "optional": true + }, + "js-yaml": { + "version": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha1-LnhEFka9RoLpY/IrbpKCPDCcYtw=", + "dev": true, + "optional": true, + "requires": { + "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "esprima": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + } + }, + "svgo": { + "version": "https://registry.npmjs.org/svgo/-/svgo-1.0.5.tgz", + "integrity": "sha1-cEA2TAYqBTirrP9EAc6momp6OJo=", + "dev": true, + "optional": true, + "requires": { + "coa": "https://registry.npmjs.org/coa/-/coa-2.0.1.tgz", + "colors": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "css-select": "https://registry.npmjs.org/css-select/-/css-select-1.3.0-rc0.tgz", + "css-select-base-adapter": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.0.tgz", + "css-tree": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha25.tgz", + "css-url-regex": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", + "csso": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", + "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "object.values": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", + "sax": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "stable": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "unquote": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "util.promisify": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz" + } + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz" + } + }, + "indexes-of": { + "version": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "indx": { + "version": "https://registry.npmjs.org/indx/-/indx-0.2.3.tgz", + "integrity": "sha1-Fdz1bunPZcAjTFE8J/vVgOcPvFA=", + "dev": true + }, + "inflight": { + "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + }, + "inherits": { + "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=", + "dev": true + }, + "inquirer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", + "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", + "dev": true, + "requires": { + "ansi-escapes": "3.1.0", + "chalk": "2.4.1", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.2.0", + "figures": "2.0.0", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rxjs": "5.5.11", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "supports-color": "5.4.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "interpret": { + "version": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "ip-regex": { + "version": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", + "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", + "dev": true, + "optional": true + }, + "irregular-plurals": { + "version": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz", + "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=", + "dev": true + }, + "is": { + "version": "https://registry.npmjs.org/is/-/is-3.2.1.tgz", + "integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU=", + "dev": true + }, + "is-absolute": { + "version": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha1-OV4a6EsR8mrReV5zwXN45IowFXY=", + "dev": true, + "requires": { + "is-relative": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "is-windows": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" + } + }, + "is-absolute-url": { + "version": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + }, + "dependencies": { + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + } + } + } + }, + "is-arrayish": { + "version": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz" + } + }, + "is-buffer": { + "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + }, + "is-builtin-module": { + "version": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" + } + }, + "is-bzip2": { + "version": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz", + "integrity": "sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=", + "dev": true + }, + "is-callable": { + "version": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha1-HhrfIZ4e62hNaR+dagX/DTCiTXU=", + "dev": true + }, + "is-data-descriptor": { + "version": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + }, + "dependencies": { + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + } + } + } + }, + "is-date-object": { + "version": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "is-data-descriptor": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" + }, + "dependencies": { + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "is-directory": { + "version": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz" + } + }, + "is-extendable": { + "version": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-gif": { + "version": "https://registry.npmjs.org/is-gif/-/is-gif-1.0.0.tgz", + "integrity": "sha1-ptKumIkwB7/6l6HYwB1jIFgyCX4=", + "dev": true, + "optional": true + }, + "is-glob": { + "version": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + } + }, + "is-gzip": { + "version": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", + "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=", + "dev": true + }, + "is-jpg": { + "version": "https://registry.npmjs.org/is-jpg/-/is-jpg-1.0.1.tgz", + "integrity": "sha1-KW1X/dmc4BBDSnKD40armhA16XU=", + "dev": true, + "optional": true + }, + "is-natural-number": { + "version": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz", + "integrity": "sha1-fUxXKDd+84bD4ZSpkRv1fG3DNec=", + "dev": true + }, + "is-number": { + "version": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + }, + "dependencies": { + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + } + } + } + }, + "is-obj": { + "version": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-odd": { + "version": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha1-dkZiRnH9fqVYzNmieVGC8pWPGyQ=", + "dev": true, + "requires": { + "is-number": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz" + }, + "dependencies": { + "is-number": { + "version": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=", + "dev": true + } + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-obj": { + "version": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, + "requires": { + "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + } + }, + "is-png": { + "version": "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz", + "integrity": "sha1-1XSxK/J1wDUEVVcLDltXqwYgd84=", + "dev": true, + "optional": true + }, + "is-posix-bracket": { + "version": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-redirect": { + "version": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-regex": { + "version": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "https://registry.npmjs.org/has/-/has-1.0.1.tgz" + } + }, + "is-relative": { + "version": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha1-obtpNc6MXboei5dUubLcwCDiJg0=", + "dev": true, + "requires": { + "is-unc-path": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-retry-allowed": { + "version": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-stream": { + "version": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-svg": { + "version": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true, + "requires": { + "html-comment-regex": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz" + } + }, + "is-symbol": { + "version": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, + "is-tar": { + "version": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz", + "integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=", + "dev": true + }, + "is-typedarray": { + "version": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unc-path": { + "version": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha1-1zHoiY7QkKEsNSrS6u1Qla0yLJ0=", + "dev": true, + "requires": { + "unc-path-regex": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz" + } + }, + "is-url": { + "version": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha1-BKTfRtKMTP89c9Af8Gq+sxihqlI=", + "dev": true + }, + "is-utf8": { + "version": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-valid-glob": { + "version": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", + "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", + "dev": true + }, + "is-windows": { + "version": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", + "dev": true + }, + "is-zip": { + "version": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz", + "integrity": "sha1-R7Co/004p2QxzP2ZqOFaTIa6IyU=", + "dev": true + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "isbinaryfile": { + "version": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", + "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", + "dev": true + }, + "isexe": { + "version": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jasmine-core": { + "version": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.5.2.tgz", + "integrity": "sha1-b2G9eQYeJ/Q+b5NV5Es8bKtv8pc=", + "dev": true + }, + "jpegtran-bin": { + "version": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-3.2.0.tgz", + "integrity": "sha1-9g7PSumZwL2tLp+83ytvCYHnops=", + "dev": true, + "optional": true, + "requires": { + "bin-build": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz", + "bin-wrapper": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-3.0.2.tgz", + "logalot": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz" + } + }, + "js-base64": { + "version": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", + "integrity": "sha1-LlRewrDylX9BNWUQIFIU6Y+tZYI=", + "dev": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz" + } + }, + "jsbn": { + "version": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "json-schema": { + "version": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify": { + "version": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "jsonfile": { + "version": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz" + }, + "dependencies": { + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true, + "optional": true + } + } + }, + "jsonify": { + "version": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "json-schema": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "verror": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + }, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "karma": { + "version": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz", + "integrity": "sha1-hcwI6eCiLXzpzKN8ShvoJPaisa4=", + "dev": true, + "requires": { + "bluebird": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "body-parser": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "chokidar": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "colors": "https://registry.npmjs.org/colors/-/colors-1.2.4.tgz", + "combine-lists": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", + "connect": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "core-js": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz", + "di": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "dom-serialize": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "expand-braces": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "http-proxy": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "isbinaryfile": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "log4js": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", + "mime": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "optimist": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "qjobs": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "range-parser": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "socket.io": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "tmp": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "useragent": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz" + }, + "dependencies": { + "body-parser": { + "version": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "dev": true, + "requires": { + "bytes": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "content-type": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "depd": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "http-errors": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "on-finished": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "qs": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "raw-body": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "type-is": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz" + } + }, + "bytes": { + "version": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "connect": { + "version": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "finalhandler": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "utils-merge": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + } + }, + "depd": { + "version": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "finalhandler": { + "version": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "encodeurl": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "on-finished": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "statuses": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "unpipe": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + }, + "dependencies": { + "statuses": { + "version": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "http-errors": { + "version": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "setprototypeof": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "statuses": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + } + }, + "iconv-lite": { + "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=", + "dev": true + }, + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "qs": { + "version": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg=", + "dev": true + }, + "range-parser": { + "version": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "dev": true, + "requires": { + "bytes": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "http-errors": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "unpipe": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + }, + "dependencies": { + "depd": { + "version": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "http-errors": { + "version": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "setprototypeof": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "statuses": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + } + }, + "setprototypeof": { + "version": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + } + } + }, + "utils-merge": { + "version": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + } + } + }, + "karma-jasmine": { + "version": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz", + "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=", + "dev": true + }, + "karma-phantomjs-launcher": { + "version": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz", + "integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=", + "dev": true, + "requires": { + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "phantomjs-prebuilt": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz" + } + }, + "kew": { + "version": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", + "dev": true + }, + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + }, + "klaw": { + "version": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz" + }, + "dependencies": { + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true, + "optional": true + } + } + }, + "lazy-cache": { + "version": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lazy-req": { + "version": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", + "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=", + "dev": true, + "optional": true + }, + "lazystream": { + "version": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "2.3.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "1.0.0", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "1.1.1", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + } + } + }, + "less": { + "version": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", + "integrity": "sha1-zBJg9RyQCp7A2R+2mYE54CUHtjs=", + "dev": true, + "requires": { + "errno": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "image-size": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "mime": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "promise": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "request": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + }, + "dependencies": { + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true, + "optional": true + } + } + }, + "levn": { + "version": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "type-check": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + } + }, + "liftoff": { + "version": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", + "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", + "dev": true, + "requires": { + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "findup-sync": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "fined": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", + "flagged-respawn": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz", + "is-plain-object": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "object.map": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "rechoir": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz" + } + }, + "livereload-js": { + "version": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.3.0.tgz", + "integrity": "sha1-w6si6Kr1vzUF2A0JjLrWdyZUjJo=", + "dev": true + }, + "load-json-file": { + "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "parse-json": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" + }, + "dependencies": { + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "strip-bom": { + "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + } + } + } + }, + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha1-G3eTz3JZ6jj7NmHU04syYK+K5Oc=", + "dev": true + }, + "lodash._basecopy": { + "version": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basetostring": { + "version": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "dev": true + }, + "lodash._basevalues": { + "version": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true + }, + "lodash._escapehtmlchar": { + "version": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz", + "integrity": "sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=", + "dev": true, + "requires": { + "lodash._htmlescapes": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz" + } + }, + "lodash._escapestringchar": { + "version": "https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz", + "integrity": "sha1-7P4iYYoq3lC/7qQ5N+Ud9m8O23I=", + "dev": true + }, + "lodash._getnative": { + "version": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._htmlescapes": { + "version": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz", + "integrity": "sha1-MtFL8IRLbeb4tioFG09nwii2JMs=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._isnative": { + "version": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz", + "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw=", + "dev": true + }, + "lodash._objecttypes": { + "version": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", + "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=", + "dev": true + }, + "lodash._reescape": { + "version": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "dev": true + }, + "lodash._reevaluate": { + "version": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash._reunescapedhtml": { + "version": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz", + "integrity": "sha1-dHxPxAED6zu4oJduVx96JlnpO6c=", + "dev": true, + "requires": { + "lodash._htmlescapes": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz", + "lodash.keys": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz" + }, + "dependencies": { + "lodash.keys": { + "version": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", + "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", + "dev": true, + "requires": { + "lodash._isnative": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz", + "lodash._shimkeys": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", + "lodash.isobject": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz" + } + } + } + }, + "lodash._root": { + "version": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash._shimkeys": { + "version": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", + "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=", + "dev": true, + "requires": { + "lodash._objecttypes": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz" + } + }, + "lodash.clone": { + "version": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", + "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=", + "dev": true + }, + "lodash.defaults": { + "version": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.escape": { + "version": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "dev": true, + "requires": { + "lodash._root": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz" + } + }, + "lodash.flatten": { + "version": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "lodash.isarguments": { + "version": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.isequal": { + "version": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, + "lodash.isobject": { + "version": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", + "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", + "dev": true, + "requires": { + "lodash._objecttypes": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz" + } + }, + "lodash.keys": { + "version": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "lodash.isarguments": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "lodash.isarray": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz" + } + }, + "lodash.memoize": { + "version": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.merge": { + "version": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha1-rcJdnLmbk5HFliTzefu6YNcRHVQ=", + "dev": true + }, + "lodash.partialright": { + "version": "https://registry.npmjs.org/lodash.partialright/-/lodash.partialright-4.2.1.tgz", + "integrity": "sha1-ATDYDoM2MmTUAHTzKbij56ihzEs=", + "dev": true + }, + "lodash.pick": { + "version": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "dev": true + }, + "lodash.restparam": { + "version": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.template": { + "version": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "dev": true, + "requires": { + "lodash._basecopy": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "lodash._basetostring": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "lodash._basevalues": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "lodash._isiterateecall": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "lodash._reinterpolate": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "lodash.escape": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "lodash.keys": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "lodash.restparam": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "lodash.templatesettings": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz" + } + }, + "lodash.templatesettings": { + "version": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "dev": true, + "requires": { + "lodash._reinterpolate": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "lodash.escape": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz" + } + }, + "lodash.uniq": { + "version": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "lodash.values": { + "version": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz", + "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=", + "dev": true, + "requires": { + "lodash.keys": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz" + }, + "dependencies": { + "lodash.keys": { + "version": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", + "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", + "dev": true, + "requires": { + "lodash._isnative": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz", + "lodash._shimkeys": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", + "lodash.isobject": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz" + } + } + } + }, + "log4js": { + "version": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", + "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz" + }, + "dependencies": { + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + } + } + }, + "logalot": { + "version": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", + "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=", + "dev": true, + "optional": true, + "requires": { + "figures": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "squeak": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz" + } + }, + "longest": { + "version": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loud-rejection": { + "version": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "signal-exit": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz" + } + }, + "lowercase-keys": { + "version": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=", + "dev": true + }, + "lpad-align": { + "version": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", + "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=", + "dev": true, + "optional": true, + "requires": { + "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "indent-string": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "longest": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "meow": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz" + } + }, + "lru-cache": { + "version": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "macaddress": { + "version": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", + "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", + "dev": true + }, + "make-dir": { + "version": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=", + "dev": true, + "requires": { + "pify": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + }, + "dependencies": { + "pify": { + "version": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "make-iterator": { + "version": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha1-KbM/MSqo9UfEpeSQ9Wr87JkTOtY=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz" + } + }, + "map-cache": { + "version": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-stream": { + "version": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "dev": true + }, + "map-visit": { + "version": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" + } + }, + "marked": { + "version": "https://registry.npmjs.org/marked/-/marked-0.3.2.tgz", + "integrity": "sha1-AV2xWIZEOPJKZL3WGgQotBhwbQk=", + "dev": true + }, + "math-expression-evaluator": { + "version": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", + "dev": true + }, + "math-random": { + "version": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, + "mdn-data": { + "version": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha1-ULXU/8RXUnZXPE7tuHgIEqhBnwE=", + "dev": true + }, + "media-typer": { + "version": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "meow": { + "version": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "loud-rejection": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "map-obj": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "normalize-package-data": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "read-pkg-up": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "redent": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "trim-newlines": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz" + }, + "dependencies": { + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "merge-stream": { + "version": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz" + }, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + } + } + }, + "method-override": { + "version": "https://registry.npmjs.org/method-override/-/method-override-2.3.10.tgz", + "integrity": "sha1-49r41d7hDdLc59SuiNYrvud0drQ=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "methods": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "vary": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + }, + "dependencies": { + "vary": { + "version": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + } + } + }, + "methods": { + "version": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "braces": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "define-property": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "extglob": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "fragment-cache": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "nanomatch": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "object.pick": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "regex-not": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "snapdragon": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "to-regex": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" + } + }, + "mime": { + "version": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", + "dev": true + }, + "mime-db": { + "version": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha1-o0kgUKXLm2NFBUHjnZeI0icng9s=", + "dev": true + }, + "mime-types": { + "version": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha1-bzI/YKg9ERRvgx/xH9ZuL+VQO7g=", + "dev": true, + "requires": { + "mime-db": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + } + }, + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mixin-deep": { + "version": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", + "dev": true, + "requires": { + "for-in": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" + }, + "dependencies": { + "is-extendable": { + "version": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + } + } + } + }, + "mkdirp": { + "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + } + }, + "morgan": { + "version": "https://registry.npmjs.org/morgan/-/morgan-1.6.1.tgz", + "integrity": "sha1-X9gYOYxoGcuiinzWZk8pL+HAu/I=", + "dev": true, + "requires": { + "basic-auth": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "depd": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz", + "on-finished": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "on-headers": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multiparty": { + "version": "https://registry.npmjs.org/multiparty/-/multiparty-3.3.2.tgz", + "integrity": "sha1-Nd5oBNwZZD5SSfPT473GyM4wHT8=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "stream-counter": "https://registry.npmjs.org/stream-counter/-/stream-counter-0.2.0.tgz" + } + }, + "multipipe": { + "version": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "dev": true, + "requires": { + "duplexer2": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz" + } + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nanomatch": { + "version": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha1-h59xUMstq3pHElkGbBBO7m4Pp8I=", + "dev": true, + "requires": { + "arr-diff": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "define-property": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "fragment-cache": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "is-odd": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "is-windows": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "object.pick": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "regex-not": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "snapdragon": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "to-regex": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" + } + }, + "natives": { + "version": "https://registry.npmjs.org/natives/-/natives-1.1.3.tgz", + "integrity": "sha1-RKV5vmRQfqLW7RygSpQVkVz3VVg=", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz", + "integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g=", + "dev": true + }, + "nice-try": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", + "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", + "dev": true + }, + "node-fs": { + "version": "https://registry.npmjs.org/node-fs/-/node-fs-0.1.7.tgz", + "integrity": "sha1-MjI8zLRsn78PwRgS1FAhzDHTJbs=", + "dev": true + }, + "node-status-codes": { + "version": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", + "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=", + "dev": true + }, + "node.extend": { + "version": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.6.tgz", + "integrity": "sha1-p7iCyC1sk6SGOlUEvV3o7IYli5Y=", + "dev": true, + "requires": { + "is": "https://registry.npmjs.org/is/-/is-3.2.1.tgz" + } + }, + "nopt": { + "version": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + } + }, + "normalize-package-data": { + "version": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", + "dev": true, + "requires": { + "hosted-git-info": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "is-builtin-module": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "validate-npm-package-license": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz" + } + }, + "normalize-path": { + "version": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" + } + }, + "normalize-range": { + "version": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "prepend-http": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "query-string": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "sort-keys": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz" + } + }, + "npm-run-path": { + "version": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "optional": true, + "requires": { + "path-key": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + } + }, + "nth-check": { + "version": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, + "optional": true, + "requires": { + "boolbase": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + } + }, + "num2fraction": { + "version": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-component": { + "version": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-copy": { + "version": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "define-property": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + }, + "dependencies": { + "define-property": { + "version": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" + } + }, + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + } + } + } + }, + "object-keys": { + "version": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha1-CcU4VTd1dTEMymL1W7M0q/97PtI=", + "dev": true + }, + "object-visit": { + "version": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + } + }, + "object.defaults": { + "version": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "requires": { + "array-each": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "array-slice": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "for-own": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + } + }, + "object.getownpropertydescriptors": { + "version": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "optional": true, + "requires": { + "define-properties": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "es-abstract": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz" + } + }, + "object.map": { + "version": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "requires": { + "for-own": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "make-iterator": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz" + } + }, + "object.omit": { + "version": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + }, + "dependencies": { + "for-own": { + "version": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" + } + } + } + }, + "object.pick": { + "version": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + } + }, + "object.values": { + "version": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", + "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", + "dev": true, + "optional": true, + "requires": { + "define-properties": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "es-abstract": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "function-bind": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "has": "https://registry.npmjs.org/has/-/has-1.0.1.tgz" + } + }, + "on-finished": { + "version": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + } + }, + "on-headers": { + "version": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + }, + "onetime": { + "version": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "open": { + "version": "https://registry.npmjs.org/open/-/open-0.0.5.tgz", + "integrity": "sha1-QsPhjslUZra/DcQvOilFw/DK2Pw=", + "dev": true + }, + "optimist": { + "version": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz" + } + }, + "optionator": { + "version": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "fast-levenshtein": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "levn": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "prelude-ls": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "type-check": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + }, + "dependencies": { + "wordwrap": { + "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "options": { + "version": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true + }, + "optipng-bin": { + "version": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-3.1.4.tgz", + "integrity": "sha1-ldNPLEiHBPb9cGBr/qDGWfHZXYQ=", + "dev": true, + "optional": true, + "requires": { + "bin-build": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz", + "bin-wrapper": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-3.0.2.tgz", + "logalot": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz" + } + }, + "orchestrator": { + "version": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", + "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", + "dev": true, + "requires": { + "end-of-stream": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", + "sequencify": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", + "stream-consume": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz" + } + }, + "ordered-read-streams": { + "version": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", + "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", + "dev": true + }, + "os-filter-obj": { + "version": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-1.0.3.tgz", + "integrity": "sha1-WRUzDZDs7VV9LZOKMcbdIU2cY60=", + "dev": true, + "optional": true + }, + "os-homedir": { + "version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-finally": { + "version": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-pipe": { + "version": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", + "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=", + "dev": true + }, + "parse-filepath": { + "version": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "requires": { + "is-absolute": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "map-cache": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "path-root": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz" + } + }, + "parse-glob": { + "version": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "is-dotfile": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + }, + "dependencies": { + "is-extglob": { + "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + } + } + } + }, + "parse-json": { + "version": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz" + } + }, + "parse-passwd": { + "version": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parsejson": { + "version": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "dev": true, + "requires": { + "better-assert": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz" + } + }, + "parseqs": { + "version": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz" + } + }, + "parseuri": { + "version": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz" + } + }, + "parseurl": { + "version": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "pascalcase": { + "version": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path": { + "version": "https://registry.npmjs.org/path/-/path-0.4.9.tgz", + "integrity": "sha1-OAxo0BJz5D+TaNetUP7l4+jUd/A=", + "dev": true + }, + "path-dirname": { + "version": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "path-is-absolute": { + "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-root": { + "version": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz" + } + }, + "path-root-regex": { + "version": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "path-type": { + "version": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + }, + "dependencies": { + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "pause": { + "version": "https://registry.npmjs.org/pause/-/pause-0.1.0.tgz", + "integrity": "sha1-68ikqGGf8LioGsFRPDQ0/0af23Q=", + "dev": true + }, + "pause-stream": { + "version": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, + "requires": { + "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + } + }, + "pend": { + "version": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true + }, + "phantomjs-prebuilt": { + "version": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", + "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=", + "dev": true, + "requires": { + "es6-promise": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "extract-zip": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz", + "fs-extra": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "hasha": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", + "kew": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "progress": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "request": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "request-progress": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", + "which": "https://registry.npmjs.org/which/-/which-1.3.0.tgz" + }, + "dependencies": { + "es6-promise": { + "version": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha1-3EIhwrFlGHYL2MOaUtjzVvwA7Sk=", + "dev": true + } + } + }, + "pify": { + "version": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + } + }, + "plugin-error": { + "version": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", + "dev": true, + "requires": { + "ansi-cyan": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "ansi-red": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "arr-diff": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "arr-union": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz" + }, + "dependencies": { + "arr-diff": { + "version": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", + "dev": true, + "requires": { + "arr-flatten": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "array-slice": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz" + } + }, + "arr-union": { + "version": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", + "dev": true + }, + "array-slice": { + "version": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "extend-shallow": { + "version": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz" + } + }, + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", + "dev": true + } + } + }, + "plugin-log": { + "version": "https://registry.npmjs.org/plugin-log/-/plugin-log-0.1.0.tgz", + "integrity": "sha1-hgSc9qsQgzOYqTHzaJy67nteEzM=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "dateformat": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz" + }, + "dependencies": { + "dateformat": { + "version": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "meow": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz" + } + } + } + }, + "plur": { + "version": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", + "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", + "dev": true, + "requires": { + "irregular-plurals": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "posix-character-classes": { + "version": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "js-base64": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz" + } + }, + "postcss-calc": { + "version": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "postcss-message-helpers": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "reduce-css-calc": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz" + } + }, + "postcss-colormin": { + "version": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true, + "requires": { + "colormin": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "postcss-convert-values": { + "version": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "postcss-discard-comments": { + "version": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz" + } + }, + "postcss-discard-duplicates": { + "version": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz" + } + }, + "postcss-discard-empty": { + "version": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz" + } + }, + "postcss-discard-overridden": { + "version": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz" + } + }, + "postcss-discard-unused": { + "version": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "uniqs": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz" + } + }, + "postcss-filter-plugins": { + "version": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", + "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "uniqid": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz" + } + }, + "postcss-load-config": { + "version": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", + "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "dev": true, + "requires": { + "cosmiconfig": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "postcss-load-options": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", + "postcss-load-plugins": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz" + } + }, + "postcss-load-options": { + "version": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", + "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "dev": true, + "requires": { + "cosmiconfig": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } + }, + "postcss-load-plugins": { + "version": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", + "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "dev": true, + "requires": { + "cosmiconfig": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } + }, + "postcss-merge-idents": { + "version": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true, + "requires": { + "has": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "postcss-merge-longhand": { + "version": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz" + } + }, + "postcss-merge-rules": { + "version": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true, + "requires": { + "browserslist": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "caniuse-api": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "postcss-selector-parser": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "vendors": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz" + } + }, + "postcss-message-helpers": { + "version": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "postcss-minify-font-values": { + "version": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true, + "requires": { + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "postcss-minify-gradients": { + "version": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "postcss-minify-params": { + "version": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true, + "requires": { + "alphanum-sort": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "uniqs": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz" + } + }, + "postcss-minify-selectors": { + "version": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true, + "requires": { + "alphanum-sort": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "has": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "postcss-selector-parser": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz" + } + }, + "postcss-normalize-charset": { + "version": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz" + } + }, + "postcss-normalize-url": { + "version": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true, + "requires": { + "is-absolute-url": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "normalize-url": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "postcss-ordered-values": { + "version": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "postcss-reduce-idents": { + "version": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "postcss-reduce-initial": { + "version": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz" + } + }, + "postcss-reduce-transforms": { + "version": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true, + "requires": { + "has": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "postcss-selector-parser": { + "version": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true, + "requires": { + "flatten": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "indexes-of": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "uniq": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" + } + }, + "postcss-svgo": { + "version": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true, + "requires": { + "is-svg": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "svgo": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz" + } + }, + "postcss-unique-selectors": { + "version": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true, + "requires": { + "alphanum-sort": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "uniqs": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz" + } + }, + "postcss-value-parser": { + "version": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "postcss-zindex": { + "version": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true, + "requires": { + "has": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "uniqs": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz" + } + }, + "prelude-ls": { + "version": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-bytes": { + "version": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", + "dev": true + }, + "pretty-hrtime": { + "version": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "process-nextick-args": { + "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=", + "dev": true + }, + "progress": { + "version": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "promise": { + "version": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", + "dev": true, + "optional": true, + "requires": { + "asap": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" + } + }, + "prr": { + "version": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true, + "optional": true + }, + "pseudomap": { + "version": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "punycode": { + "version": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qjobs": { + "version": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha1-xF6cYYAL0IfviNfiVkI73Unl0HE=", + "dev": true + }, + "qs": { + "version": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz", + "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc=", + "dev": true + }, + "query-string": { + "version": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "strict-uri-encode": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" + } + }, + "random-bytes": { + "version": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=", + "dev": true + }, + "randomatic": { + "version": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "integrity": "sha1-01SQAw6091eN4pLObfsEqRoSiSM=", + "dev": true, + "requires": { + "is-number": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "math-random": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz" + }, + "dependencies": { + "is-number": { + "version": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=", + "dev": true + } + } + }, + "range-parser": { + "version": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz", + "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU=", + "dev": true + }, + "raw-body": { + "version": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", + "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", + "dev": true, + "requires": { + "bytes": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "unpipe": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + }, + "dependencies": { + "bytes": { + "version": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", + "dev": true + }, + "iconv-lite": { + "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", + "dev": true + } + } + }, + "rc": { + "version": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=", + "dev": true, + "requires": { + "deep-extend": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "ini": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "minimist": "1.2.0", + "strip-json-comments": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "read-all-stream": { + "version": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", + "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", + "dev": true, + "requires": { + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "readable-stream": "2.3.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "1.0.0", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "1.1.1", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + } + } + }, + "read-pkg": { + "version": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "normalize-package-data": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "path-type": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" + } + }, + "read-pkg-up": { + "version": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "read-pkg": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" + } + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + }, + "readdirp": { + "version": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "set-immediate-shim": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz" + }, + "dependencies": { + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + } + } + }, + "rechoir": { + "version": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz" + } + }, + "redent": { + "version": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "strip-indent": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz" + } + }, + "reduce-css-calc": { + "version": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true, + "requires": { + "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "math-expression-evaluator": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "reduce-function-call": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz" + }, + "dependencies": { + "balanced-match": { + "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "reduce-function-call": { + "version": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", + "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "dev": true, + "requires": { + "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz" + }, + "dependencies": { + "balanced-match": { + "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "regex-cache": { + "version": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", + "dev": true, + "requires": { + "is-equal-shallow": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz" + } + }, + "regex-not": { + "version": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "dev": true, + "requires": { + "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "safe-regex": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" + } + }, + "regexp.prototype.flags": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", + "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", + "dev": true, + "requires": { + "define-properties": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz" + } + }, + "regexpp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.0.tgz", + "integrity": "sha512-g2FAVtR8Uh8GO1Nv5wpxW7VFVwHcCEr4wyA8/MHiRkO8uHoR5ntAA8Uq3P1vvMTX/BeQiRVSpDGLd+Wn5HNOTA==", + "dev": true + }, + "remove-trailing-separator": { + "version": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz" + } + }, + "replace-ext": { + "version": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "request": { + "version": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "requires": { + "aws-sign2": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "aws4": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "caseless": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "forever-agent": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "form-data": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "har-validator": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "hawk": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "http-signature": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "is-typedarray": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "oauth-sign": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "performance-now": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "qs": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "stringstream": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "tunnel-agent": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "uuid": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz" + }, + "dependencies": { + "qs": { + "version": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + } + } + }, + "request-progress": { + "version": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", + "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", + "dev": true, + "requires": { + "throttleit": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz" + } + }, + "require-from-string": { + "version": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + } + }, + "requires-port": { + "version": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha1-qt1lY3T9KYruiVvAJrgpdBhnf9M=", + "dev": true, + "requires": { + "path-parse": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz" + } + }, + "resolve-dir": { + "version": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "global-modules": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "resolve-url": { + "version": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "response-time": { + "version": "https://registry.npmjs.org/response-time/-/response-time-2.3.2.tgz", + "integrity": "sha1-/6cbq5UtYvfB1Jt0NDVfvGjf/Fo=", + "dev": true, + "requires": { + "depd": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "on-headers": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz" + }, + "dependencies": { + "depd": { + "version": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + } + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "2.0.1", + "signal-exit": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz" + }, + "dependencies": { + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + } + } + }, + "ret": { + "version": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", + "dev": true + }, + "right-align": { + "version": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz" + } + }, + "rimraf": { + "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=", + "dev": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz" + } + }, + "rndm": { + "version": "https://registry.npmjs.org/rndm/-/rndm-1.2.0.tgz", + "integrity": "sha1-8z/pz7Urv9UgqhgyO8ZdsRCht2w=", + "dev": true + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "2.1.0" + } + }, + "run-sequence": { + "version": "https://registry.npmjs.org/run-sequence/-/run-sequence-2.2.1.tgz", + "integrity": "sha1-HOZD2jb9jH6n4akynaM/wriJhJU=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "fancy-log": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", + "plugin-error": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz" + } + }, + "rxjs": { + "version": "5.5.11", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.11.tgz", + "integrity": "sha512-3bjO7UwWfA2CV7lmwYMBzj4fQ6Cq+ftHc2MvUe+WMS7wcdJ1LosDWmdjPQanYp2dBRj572p7PeU81JUxHKOcBA==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, + "safe-buffer": { + "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", + "dev": true + }, + "safe-regex": { + "version": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sax": { + "version": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", + "dev": true + }, + "seek-bzip": { + "version": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "dev": true, + "requires": { + "commander": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz" + } + }, + "semver": { + "version": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "semver-regex": { + "version": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", + "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", + "dev": true, + "optional": true + }, + "semver-truncate": { + "version": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", + "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", + "dev": true, + "optional": true, + "requires": { + "semver": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz" + }, + "dependencies": { + "semver": { + "version": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha1-3Eu8emyp2Rbe5dQ1FvAJK1j3uKs=", + "dev": true, + "optional": true + } + } + }, + "send": { + "version": "https://registry.npmjs.org/send/-/send-0.13.2.tgz", + "integrity": "sha1-dl52B8gFVFK7pvCwUllTUJhgNt4=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "depd": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "destroy": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "etag": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", + "fresh": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", + "http-errors": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", + "mime": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "on-finished": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "range-parser": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz", + "statuses": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + } + }, + "depd": { + "version": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "statuses": { + "version": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", + "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=", + "dev": true + } + } + }, + "sequencify": { + "version": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", + "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", + "dev": true + }, + "serve-favicon": { + "version": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.3.2.tgz", + "integrity": "sha1-3UGeJo3gEqtysxnTN/IQUBP5OB8=", + "dev": true, + "requires": { + "etag": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", + "fresh": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz" + }, + "dependencies": { + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "serve-index": { + "version": "https://registry.npmjs.org/serve-index/-/serve-index-1.7.3.tgz", + "integrity": "sha1-egV/xu4o3GP2RWbl+lexEahq7NI=", + "dev": true, + "requires": { + "accepts": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz", + "batch": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "http-errors": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "serve-static": { + "version": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.3.tgz", + "integrity": "sha1-zlpuzTEB/tXsCYJ9rCKpwpv7BTU=", + "dev": true, + "requires": { + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "send": "https://registry.npmjs.org/send/-/send-0.13.2.tgz" + } + }, + "set-immediate-shim": { + "version": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", + "dev": true, + "requires": { + "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "is-plain-object": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "split-string": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" + }, + "dependencies": { + "extend-shallow": { + "version": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + } + } + } + }, + "setprototypeof": { + "version": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=", + "dev": true + }, + "shebang-command": { + "version": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + } + }, + "shebang-regex": { + "version": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "sigmund": { + "version": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "signal-exit": { + "version": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0" + } + }, + "snapdragon": { + "version": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", + "dev": true, + "requires": { + "base": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "define-property": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "map-cache": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "source-map-resolve": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", + "use": "https://registry.npmjs.org/use/-/use-3.1.0.tgz" + }, + "dependencies": { + "define-property": { + "version": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" + } + }, + "extend-shallow": { + "version": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + } + } + } + }, + "snapdragon-node": { + "version": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "dev": true, + "requires": { + "define-property": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "snapdragon-util": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" + }, + "dependencies": { + "define-property": { + "version": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" + } + }, + "is-accessor-descriptor": { + "version": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz" + } + }, + "is-data-descriptor": { + "version": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz" + } + }, + "is-descriptor": { + "version": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "is-data-descriptor": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz" + } + } + } + }, + "snapdragon-util": { + "version": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + }, + "dependencies": { + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + } + } + } + }, + "sntp": { + "version": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" + } + }, + "socket.io": { + "version": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", + "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "engine.io": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", + "has-binary": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "socket.io-adapter": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "socket.io-client": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", + "socket.io-parser": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + }, + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "socket.io-parser": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-client": { + "version": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", + "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "dev": true, + "requires": { + "backo2": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "component-bind": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "component-emitter": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "engine.io-client": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", + "has-binary": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "object-component": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "parseuri": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "socket.io-parser": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "to-array": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-parser": { + "version": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "dev": true, + "requires": { + "component-emitter": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "json3": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz" + }, + "dependencies": { + "component-emitter": { + "version": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", + "dev": true + }, + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "sort-keys": { + "version": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + } + }, + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", + "integrity": "sha1-etD1k/IoFZjoVN+A8ZquS5LXoRo=", + "dev": true, + "requires": { + "atob": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "decode-uri-component": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "resolve-url": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "source-map-url": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "urix": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" + } + }, + "source-map-url": { + "version": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "sparkles": { + "version": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", + "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", + "dev": true + }, + "spdx-correct": { + "version": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha1-BaW01xU6GVvJLDxCW2nzsqlSTII=", + "dev": true, + "requires": { + "spdx-expression-parse": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "spdx-license-ids": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz" + } + }, + "spdx-exceptions": { + "version": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha1-LHrmEFbHFKW5ubKyr30xHvXHj+k=", + "dev": true + }, + "spdx-expression-parse": { + "version": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=", + "dev": true, + "requires": { + "spdx-exceptions": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "spdx-license-ids": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz" + } + }, + "spdx-license-ids": { + "version": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha1-enzShHDMbToc/m1miG9rxDDTrIc=", + "dev": true + }, + "split": { + "version": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true, + "requires": { + "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + } + }, + "split-string": { + "version": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "dev": true, + "requires": { + "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" + } + }, + "sprintf-js": { + "version": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "squeak": { + "version": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", + "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=", + "dev": true, + "optional": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "console-stream": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", + "lpad-align": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz" + } + }, + "sshpk": { + "version": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "dev": true, + "requires": { + "asn1": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "bcrypt-pbkdf": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "dashdash": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "ecc-jsbn": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "getpass": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + }, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "stable": { + "version": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=", + "dev": true, + "optional": true + }, + "stat-mode": { + "version": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", + "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=", + "dev": true + }, + "static-extend": { + "version": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "object-copy": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" + }, + "dependencies": { + "define-property": { + "version": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" + } + } + } + }, + "statuses": { + "version": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-combiner": { + "version": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "dev": true, + "requires": { + "duplexer": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz" + } + }, + "stream-combiner2": { + "version": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "requires": { + "duplexer2": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "readable-stream": "2.3.6" + }, + "dependencies": { + "duplexer2": { + "version": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "2.3.6" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "1.0.0", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "1.1.1", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + } + } + }, + "stream-consume": { + "version": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz", + "integrity": "sha1-0721mMK9CugrjKx6xQsRB6eZbEg=", + "dev": true + }, + "stream-counter": { + "version": "https://registry.npmjs.org/stream-counter/-/stream-counter-0.2.0.tgz", + "integrity": "sha1-3tJmVWMZyLDiIoErnPOyb6fZR94=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" + } + }, + "stream-shift": { + "version": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "strict-uri-encode": { + "version": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "string.prototype.matchall": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-2.0.0.tgz", + "integrity": "sha512-WoZ+B2ypng1dp4iFLF2kmZlwwlE19gmjgKuhL1FJfDgCREWb3ye3SDVHSzLH6bxfnvYmkCxbzkmWcQZHA4P//Q==", + "dev": true, + "requires": { + "define-properties": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "es-abstract": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "function-bind": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "has-symbols": "1.0.0", + "regexp.prototype.flags": "1.2.0" + } + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "stringstream": { + "version": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + } + }, + "strip-bom": { + "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", + "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", + "dev": true, + "requires": { + "first-chunk-stream": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "is-utf8": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + } + }, + "strip-bom-stream": { + "version": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz", + "integrity": "sha1-+H217yYT9paKpUWr/h7HKLaoKco=", + "dev": true, + "requires": { + "first-chunk-stream": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" + }, + "dependencies": { + "first-chunk-stream": { + "version": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", + "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz" + } + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + }, + "strip-bom": { + "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + } + } + } + }, + "strip-dirs": { + "version": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz", + "integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "is-absolute": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", + "is-natural-number": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "sum-up": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz" + }, + "dependencies": { + "is-absolute": { + "version": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", + "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=", + "dev": true, + "requires": { + "is-relative": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz" + } + }, + "is-relative": { + "version": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", + "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=", + "dev": true + }, + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "strip-eof": { + "version": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "optional": true + }, + "strip-indent": { + "version": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" + } + }, + "strip-json-comments": { + "version": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "strip-outer": { + "version": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha1-sv0qv2YEudHmATBXGV34Nrip1jE=", + "dev": true, + "requires": { + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + } + }, + "sum-up": { + "version": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz", + "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" + } + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz" + } + }, + "svgo": { + "version": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true, + "requires": { + "coa": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "colors": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "csso": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "sax": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "whet.extend": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz" + }, + "dependencies": { + "colors": { + "version": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + } + } + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + }, + "table": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", + "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", + "dev": true, + "requires": { + "ajv": "6.5.2", + "ajv-keywords": "3.2.0", + "chalk": "2.4.1", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "slice-ansi": "1.0.0", + "string-width": "2.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", + "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", + "dev": true, + "requires": { + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "supports-color": "5.4.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "tar-stream": { + "version": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", + "integrity": "sha1-+E7xaWJp1iI8pI9uHu7eP36B85U=", + "dev": true, + "requires": { + "bl": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "buffer-alloc": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "end-of-stream": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "fs-constants": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "readable-stream": "2.3.6", + "to-buffer": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + }, + "dependencies": { + "end-of-stream": { + "version": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=", + "dev": true, + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "1.0.0", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "1.1.1", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + } + } + }, + "temp-dir": { + "version": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "dev": true, + "optional": true + }, + "tempfile": { + "version": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", + "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=", + "dev": true, + "optional": true, + "requires": { + "temp-dir": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "uuid": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throttleit": { + "version": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", + "dev": true + }, + "through": { + "version": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + }, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + } + } + }, + "through2-concurrent": { + "version": "https://registry.npmjs.org/through2-concurrent/-/through2-concurrent-1.1.1.tgz", + "integrity": "sha1-EctOpMnjG8puTB5tukjRxyjDUks=", + "dev": true, + "requires": { + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz" + } + }, + "through2-filter": { + "version": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", + "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", + "dev": true, + "requires": { + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "tildify": { + "version": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", + "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", + "dev": true, + "requires": { + "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" + } + }, + "time-stamp": { + "version": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + }, + "timed-out": { + "version": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", + "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=", + "dev": true + }, + "tiny-lr": { + "version": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz", + "integrity": "sha1-s/26gC5dVqM8L28QeUsy5Hescp0=", + "dev": true, + "requires": { + "body-parser": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "faye-websocket": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "livereload-js": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.3.0.tgz", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "qs": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz" + }, + "dependencies": { + "body-parser": { + "version": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", + "integrity": "sha1-EBXLH+LEQ4WCWVgdtTMy+NDPUPk=", + "dev": true, + "requires": { + "bytes": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz", + "content-type": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "depd": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "http-errors": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", + "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "on-finished": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "qs": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz", + "raw-body": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", + "type-is": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz" + }, + "dependencies": { + "qs": { + "version": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz", + "integrity": "sha1-qfMRQq9GjLcrJbMBNrokVoNJFr4=", + "dev": true + } + } + }, + "bytes": { + "version": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz", + "integrity": "sha1-/TVGSkA/b5EXwt42Cez/nK4ABYg=", + "dev": true + }, + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + } + }, + "depd": { + "version": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "iconv-lite": { + "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", + "dev": true + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "qs": { + "version": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz", + "integrity": "sha1-TZMuXH6kEcynajEtOaYGIA/VDNk=", + "dev": true + } + } + }, + "tmp": { + "version": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "dev": true, + "requires": { + "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + } + }, + "to-absolute-glob": { + "version": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", + "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", + "dev": true, + "requires": { + "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" + }, + "dependencies": { + "extend-shallow": { + "version": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + } + } + } + }, + "to-array": { + "version": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-buffer": { + "version": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha1-STvUj2LXxD/N7TE6A9ytsuEhOoA=", + "dev": true + }, + "to-object-path": { + "version": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + }, + "dependencies": { + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + } + } + } + }, + "to-regex": { + "version": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "dev": true, + "requires": { + "define-property": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "regex-not": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "safe-regex": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" + } + }, + "to-regex-range": { + "version": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + } + }, + "tough-cookie": { + "version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha1-7GDO44rGdQY//JelwYlwV47oNlU=", + "dev": true, + "requires": { + "punycode": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + } + }, + "trim-newlines": { + "version": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-repeated": { + "version": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "dev": true, + "requires": { + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + } + }, + "tryit": { + "version": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", + "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", + "dev": true + }, + "tsscmp": { + "version": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz", + "integrity": "sha1-fcSjOvcVgatDN9qR2FylQn69mpc=", + "dev": true + }, + "tunnel-agent": { + "version": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + }, + "tweetnacl": { + "version": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-check": { + "version": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + } + }, + "type-is": { + "version": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha1-+JzjQVQcZysl7nrjxz3uOyvlAZQ=", + "dev": true, + "requires": { + "media-typer": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz" + } + }, + "typedarray": { + "version": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "uglify-to-browserify": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "yargs": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz" + } + }, + "uglify-to-browserify": { + "version": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "uid-safe": { + "version": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.4.tgz", + "integrity": "sha1-Otbzg2jG1MjHXsF2I/t5qh0HHYE=", + "dev": true, + "requires": { + "random-bytes": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz" + } + }, + "ultron": { + "version": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "unc-path-regex": { + "version": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, + "union-value": { + "version": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "get-value": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "set-value": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz" + }, + "dependencies": { + "extend-shallow": { + "version": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + } + }, + "set-value": { + "version": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "is-plain-object": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "to-object-path": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" + } + } + } + }, + "uniq": { + "version": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqid": { + "version": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", + "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", + "dev": true, + "requires": { + "macaddress": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz" + } + }, + "uniqs": { + "version": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-stream": { + "version": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", + "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", + "dev": true + }, + "unpipe": { + "version": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unquote": { + "version": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true, + "optional": true + }, + "unset-value": { + "version": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + }, + "dependencies": { + "has-value": { + "version": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "has-values": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "isobject": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" + }, + "dependencies": { + "isobject": { + "version": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + } + } + } + }, + "has-values": { + "version": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "unzip-response": { + "version": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", + "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "urix": { + "version": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url-parse-lax": { + "version": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz" + } + }, + "url-regex": { + "version": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", + "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", + "dev": true, + "optional": true, + "requires": { + "ip-regex": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz" + } + }, + "use": { + "version": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha1-FHFr8D/f79AwQK71jYtLhfOnxUQ=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz" + } + }, + "user-home": { + "version": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, + "useragent": { + "version": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha1-IX+UOtVAyyEoZYqyP8lg9qiMmXI=", + "dev": true, + "requires": { + "lru-cache": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "tmp": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz" + }, + "dependencies": { + "lru-cache": { + "version": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha1-oRdc80lt/IQ2wVbDNLSVWZK85pw=", + "dev": true, + "requires": { + "pseudomap": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "yallist": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" + } + } + } + }, + "util-deprecate": { + "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=", + "dev": true, + "optional": true, + "requires": { + "define-properties": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "object.getownpropertydescriptors": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz" + } + }, + "utils-merge": { + "version": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", + "dev": true + }, + "uuid": { + "version": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha1-EsUou51Y0LkmXZovbw/ovhf/HxQ=", + "dev": true + }, + "v8flags": { + "version": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true, + "requires": { + "user-home": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz" + } + }, + "vali-date": { + "version": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", + "dev": true + }, + "validate-npm-package-license": { + "version": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha1-gWQ7y+8b3+zUYjeT3EZIlIupgzg=", + "dev": true, + "requires": { + "spdx-correct": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "spdx-expression-parse": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz" + } + }, + "vary": { + "version": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz", + "integrity": "sha1-meSYFWaihhGN+yuBc1ffeZM3bRA=", + "dev": true + }, + "vendors": { + "version": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", + "integrity": "sha1-f8te759WI7FWvOqJ7DfWNnbyGAE=", + "dev": true + }, + "verror": { + "version": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + }, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "vhost": { + "version": "https://registry.npmjs.org/vhost/-/vhost-3.0.2.tgz", + "integrity": "sha1-L7HezUxGaqiLD5NBrzPcGv8keNU=", + "dev": true + }, + "vinyl": { + "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz" + } + }, + "vinyl-assign": { + "version": "https://registry.npmjs.org/vinyl-assign/-/vinyl-assign-1.2.1.tgz", + "integrity": "sha1-TRmIkbVRWRHXcajNnFSApGoHSkU=", + "dev": true, + "requires": { + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "readable-stream": "2.3.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "1.0.0", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "string_decoder": "1.1.1", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + } + } + } + }, + "vinyl-bufferstream": { + "version": "https://registry.npmjs.org/vinyl-bufferstream/-/vinyl-bufferstream-1.0.1.tgz", + "integrity": "sha1-BTeGn1gO/6TKRay0dXnkuf5jCBo=", + "dev": true, + "requires": { + "bufferstreams": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-1.0.1.tgz" + } + }, + "vinyl-file": { + "version": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-2.0.0.tgz", + "integrity": "sha1-p+v1/779obfRjRQPyweyI++2dRo=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "strip-bom-stream": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz", + "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz" + }, + "dependencies": { + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "strip-bom": { + "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + } + }, + "vinyl": { + "version": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz" + } + } + } + }, + "vinyl-fs": { + "version": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", + "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", + "dev": true, + "requires": { + "defaults": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "glob-stream": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", + "glob-watcher": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz" + }, + "dependencies": { + "clone": { + "version": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "vinyl": { + "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz" + } + } + } + }, + "vinyl-sourcemaps-apply": { + "version": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", + "dev": true, + "requires": { + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + } + }, + "void-elements": { + "version": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "ware": { + "version": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz", + "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", + "dev": true, + "requires": { + "wrap-fn": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz" + } + }, + "websocket-driver": { + "version": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "dev": true, + "requires": { + "http-parser-js": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.12.tgz", + "websocket-extensions": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz" + } + }, + "websocket-extensions": { + "version": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha1-XS/yKXcAPsaHpLhwc9+7rBRszyk=", + "dev": true + }, + "when": { + "version": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", + "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=", + "dev": true + }, + "whet.extend": { + "version": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true + }, + "which": { + "version": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", + "dev": true, + "requires": { + "isexe": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + } + }, + "window-size": { + "version": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "wrap-fn": { + "version": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz", + "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=", + "dev": true, + "requires": { + "co": "https://registry.npmjs.org/co/-/co-3.1.0.tgz" + }, + "dependencies": { + "co": { + "version": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", + "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=", + "dev": true + } + } + }, + "wrappy": { + "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" + } + }, + "ws": { + "version": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "dev": true, + "requires": { + "options": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "ultron": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz" + } + }, + "wtf-8": { + "version": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "dev": true + }, + "xtend": { + "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "yallist": { + "version": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "cliui": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "window-size": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz" + } + }, + "yauzl": { + "version": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "dev": true, + "requires": { + "fd-slicer": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz" + } + }, + "yeast": { + "version": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + } +} diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index 6e390b8b24..017eb5dce2 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -27,6 +27,7 @@ "gulp": "^3.9.1", "gulp-concat": "^2.6.0", "gulp-connect": "5.0.0", + "gulp-eslint": "^5.0.0", "gulp-imagemin": "^4.1.0", "gulp-less": "^3.5.0", "gulp-ngdocs": "^0.3.0", diff --git a/src/Umbraco.Web.UI.Client/src/assets/fonts/web.config b/src/Umbraco.Web.UI.Client/src/assets/fonts/web.config new file mode 100644 index 0000000000..42051b6de2 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/assets/fonts/web.config @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/canvasdesigner/config/canvasdesigner.config.js b/src/Umbraco.Web.UI.Client/src/canvasdesigner/config/canvasdesigner.config.js index 54a27cc415..f49e6520db 100644 --- a/src/Umbraco.Web.UI.Client/src/canvasdesigner/config/canvasdesigner.config.js +++ b/src/Umbraco.Web.UI.Client/src/canvasdesigner/config/canvasdesigner.config.js @@ -12,7 +12,7 @@ var canvasdesignerConfig = { { type: "background", category: "Color", - name: "Background", + name: "Background" }, { type: "color", @@ -45,12 +45,12 @@ var canvasdesignerConfig = { { type: "background", category: "Color", - name: "Background", + name: "Background" }, { type: "border", category: "Color", - name: "Border", + name: "Border" }, { type: "color", @@ -83,7 +83,7 @@ var canvasdesignerConfig = { { type: "googlefontpicker", category: "Font", - name: "Font familly", + name: "Font familly" } ] }, @@ -105,7 +105,7 @@ var canvasdesignerConfig = { name: "Margin", enable: ["top", "bottom"], schema: "#header" - }, + } ] }, { @@ -124,7 +124,7 @@ var canvasdesignerConfig = { type: "color", category: "Font", name: "Font color", - css: "color", + css: "color" } ] }, @@ -137,7 +137,7 @@ var canvasdesignerConfig = { type: "color", category: "Font", name: "Font color", - css: "color", + css: "color" } ] }, @@ -150,7 +150,7 @@ var canvasdesignerConfig = { type: "color", category: "Font", name: "Font color", - css: "color", + css: "color" }, { type: "slider", @@ -163,7 +163,7 @@ var canvasdesignerConfig = { { type: "margin", category: "Position", - name: "Margin", + name: "Margin" } ] @@ -177,7 +177,7 @@ var canvasdesignerConfig = { type: "color", category: "Font", name: "Font color", - css: "color", + css: "color" }, { type: "slider", @@ -190,7 +190,7 @@ var canvasdesignerConfig = { { type: "margin", category: "Position", - name: "Margin", + name: "Margin" } ] @@ -216,7 +216,7 @@ var canvasdesignerConfig = { { type: "background", category: "Color", - name: "Background", + name: "Background" }, { type: "padding", @@ -305,7 +305,7 @@ var canvasdesignerConfig = { name: "Background Hover", css: "background", schema: ".button-alt:hover" - }, + } ] } ] diff --git a/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/border.js b/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/border.js index bf64ad3fa0..37a284df92 100644 --- a/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/border.js +++ b/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/border.js @@ -73,7 +73,7 @@ angular.module("Umbraco.canvasdesigner") topbordertype: 'solid', bottombordersize: '', bottombordercolor: '', - bottombordertype: 'solid', + bottombordertype: 'solid' }; } diff --git a/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/googlefontpicker.js b/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/googlefontpicker.js index ce6bf2c9f7..e89fc4db2c 100644 --- a/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/googlefontpicker.js +++ b/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/googlefontpicker.js @@ -12,7 +12,7 @@ angular.module("Umbraco.canvasdesigner") fontFamily: '', fontType: '', fontWeight: '', - fontStyle: '', + fontStyle: '' } } @@ -74,7 +74,7 @@ angular.module("Umbraco.canvasdesigner") fontType: "safe", fontFamily: value, fontWeight: "normal", - fontStyle: "normal", + fontStyle: "normal" }); }); @@ -121,7 +121,7 @@ angular.module("Umbraco.canvasdesigner") fontFamily: $scope.selectedFont.fontFamily, fontType: $scope.selectedFont.fontType, fontWeight: $scope.selectedFont.fontWeight, - fontStyle: $scope.selectedFont.fontStyle, + fontStyle: $scope.selectedFont.fontStyle }); } }); @@ -161,7 +161,7 @@ angular.module("Umbraco.canvasdesigner") fontFamily: $scope.selectedFont.fontFamily, fontType: $scope.selectedFont.fontType, fontWeight: $scope.selectedFont.fontWeight, - fontStyle: $scope.selectedFont.fontStyle, + fontStyle: $scope.selectedFont.fontStyle }); } @@ -178,7 +178,7 @@ angular.module("Umbraco.canvasdesigner") fontFamily: $scope.selectedFont.fontFamily, fontType: $scope.selectedFont.fontType, fontWeight: $scope.selectedFont.fontWeight, - fontStyle: $scope.selectedFont.fontStyle, + fontStyle: $scope.selectedFont.fontStyle }); }; diff --git a/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/margin.js b/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/margin.js index 617421f702..f1d2032e16 100644 --- a/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/margin.js +++ b/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/margin.js @@ -12,7 +12,7 @@ angular.module("Umbraco.canvasdesigner") $scope.selectedmargin = { name: "", - value: 0, + value: 0 }; $scope.setSelectedmargin = function (margintype) { @@ -50,7 +50,7 @@ angular.module("Umbraco.canvasdesigner") leftmarginvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 1 ? $scope.item.defaultValue[1] : '', rightmarginvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 2 ? $scope.item.defaultValue[2] : '', topmarginvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 3 ? $scope.item.defaultValue[3] : '', - bottommarginvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 4 ? $scope.item.defaultValue[4] : '', + bottommarginvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 4 ? $scope.item.defaultValue[4] : '' }; } diff --git a/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/padding.js b/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/padding.js index 81690cd7e4..b0f311872e 100644 --- a/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/padding.js +++ b/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/padding.js @@ -12,7 +12,7 @@ angular.module("Umbraco.canvasdesigner") $scope.selectedpadding = { name: "", - value: 0, + value: 0 }; $scope.setSelectedpadding = function (paddingtype) { @@ -50,7 +50,7 @@ angular.module("Umbraco.canvasdesigner") leftpaddingvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 1 ? $scope.item.defaultValue[1] : '', rightpaddingvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 2 ? $scope.item.defaultValue[2] : '', toppaddingvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 3 ? $scope.item.defaultValue[3] : '', - bottompaddingvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 4 ? $scope.item.defaultValue[4] : '', + bottompaddingvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 4 ? $scope.item.defaultValue[4] : '' }; } diff --git a/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/radius.js b/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/radius.js index 7305591a83..85edb849bc 100644 --- a/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/radius.js +++ b/src/Umbraco.Web.UI.Client/src/canvasdesigner/editors/radius.js @@ -12,7 +12,7 @@ angular.module("Umbraco.canvasdesigner") $scope.selectedradius = { name: "", - value: 0, + value: 0 }; $scope.setSelectedradius = function (radiustype) { @@ -50,7 +50,7 @@ angular.module("Umbraco.canvasdesigner") topleftradiusvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 1 ? $scope.item.defaultValue[1] : '', toprightradiusvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 2 ? $scope.item.defaultValue[2] : '', bottomleftradiusvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 3 ? $scope.item.defaultValue[3] : '', - bottomrightradiusvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 4 ? $scope.item.defaultValue[4] : '', + bottomrightradiusvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 4 ? $scope.item.defaultValue[4] : '' }; } diff --git a/src/Umbraco.Web.UI.Client/src/canvasdesigner/lib/spectrum.directive.js b/src/Umbraco.Web.UI.Client/src/canvasdesigner/lib/spectrum.directive.js index 214190a9b9..eb23549bd0 100644 --- a/src/Umbraco.Web.UI.Client/src/canvasdesigner/lib/spectrum.directive.js +++ b/src/Umbraco.Web.UI.Client/src/canvasdesigner/lib/spectrum.directive.js @@ -48,7 +48,7 @@ angular.module('spectrumcolorpicker', []) scope.colorselected = initColor; scope.$apply(); }); - }, + } }); diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbbackdrop.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbbackdrop.directive.js index ced59653dd..39e4f10666 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbbackdrop.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbbackdrop.directive.js @@ -103,7 +103,7 @@ backdropOpacity: "=?", highlightElement: "=?", highlightPreventClick: "=?", - disableEventsOnClick: "=?", + disableEventsOnClick: "=?" } }; diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbtour.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbtour.directive.js index 55641b6ec7..7333d033b1 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbtour.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbtour.directive.js @@ -8,7 +8,7 @@ Added in Umbraco 7.8. The tour component is a global component and is already added to the umbraco markup. In the Umbraco UI the tours live in the "Help drawer" which opens when you click the Help-icon in the bottom left corner of Umbraco. You can easily add you own tours to the Help-drawer or show and start tours from -anywhere in the Umbraco backoffice. To see a real world example of a custom tour implementation, install The Starter Kit in Umbraco 7.8 +anywhere in the Umbraco backoffice. To see a real world example of a custom tour implementation, install The Starter Kit in Umbraco 7.8

Extending the help drawer with custom tours

The easiet way to add new tours to Umbraco is through the Help-drawer. All it requires is a my-tour.json file. @@ -304,6 +304,12 @@ In the following example you see how to run some custom logic before a step goes scope.elementNotFound = false; $timeout(function () { + // clear element when step as marked as intro, so it always displays in the center + if (scope.model.currentStep && scope.model.currentStep.type === "intro") { + scope.model.currentStep.element = null; + scope.model.currentStep.eventElement = null; + scope.model.currentStep.event = null; + } // if an element isn't set - show the popover in the center if(scope.model.currentStep && !scope.model.currentStep.element) { diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/buttons/umbtoggle.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/buttons/umbtoggle.directive.js index a7bdd4b741..e3c4cbf40c 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/buttons/umbtoggle.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/buttons/umbtoggle.directive.js @@ -64,7 +64,7 @@ (function () { 'use strict'; - function ToggleDirective(localizationService) { + function ToggleDirective(localizationService, eventsService) { function link(scope, el, attr, ctrl) { @@ -73,6 +73,7 @@ function onInit() { setLabelText(); + eventsService.emit("toggleValue", { value: scope.checked }); } function setLabelText() { @@ -98,7 +99,8 @@ } scope.click = function() { - if(scope.onClick) { + if (scope.onClick) { + eventsService.emit("toggleValue", { value: !scope.checked }); scope.onClick(); } }; diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js index e76ac36b20..5bcab56f48 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js @@ -77,6 +77,8 @@ resetLastListPageNumber($scope.content); + eventsService.emit("content.loaded", { content: $scope.content }); + $scope.page.loading = false; }); @@ -130,6 +132,8 @@ $scope.page.buttonGroupState = "busy"; + eventsService.emit("content.saving", { content: $scope.content, action: args.action }); + contentEditingHelper.contentEditorPerformSave({ statusMessage: args.statusMessage, saveMethod: args.saveMethod, @@ -144,6 +148,9 @@ $scope.page.buttonGroupState = "success"; deferred.resolve(data); + + eventsService.emit("content.saved", { content: $scope.content, action: args.action }); + }, function (err) { //error if (err) { @@ -183,7 +190,9 @@ $scope.page.loading = false; - }); + eventsService.emit("content.newReady", { content: $scope.content }); + + }); } else { @@ -192,35 +201,52 @@ } - $scope.unPublish = function () { + $scope.unPublish = function () { + // raising the event triggers the confirmation dialog + if (!notificationsService.hasView()) { + notificationsService.add({ view: "confirmunpublish" }); + } + + $scope.page.buttonGroupState = "busy"; - if (formHelper.submitForm({ scope: $scope, statusMessage: "Unpublishing...", skipValidation: true })) { + // actioning the dialog raises the confirmUnpublish event, act on it here + var actioned = $rootScope.$on("content.confirmUnpublish", function(event, confirmed) { + if (confirmed && formHelper.submitForm({ scope: $scope, statusMessage: "Unpublishing...", skipValidation: true })) { + + eventsService.emit("content.unpublishing", { content: $scope.content }); - $scope.page.buttonGroupState = "busy"; + contentResource.unPublish($scope.content.id) + .then(function (data) { - contentResource.unPublish($scope.content.id) - .then(function (data) { + formHelper.resetForm({ scope: $scope, notifications: data.notifications }); - formHelper.resetForm({ scope: $scope, notifications: data.notifications }); + contentEditingHelper.handleSuccessfulSave({ + scope: $scope, + savedContent: data, + rebindCallback: contentEditingHelper.reBindChangedProperties($scope.content, data) + }); - contentEditingHelper.handleSuccessfulSave({ - scope: $scope, - savedContent: data, - rebindCallback: contentEditingHelper.reBindChangedProperties($scope.content, data) - }); + init($scope.content); - init($scope.content); + syncTreeNode($scope.content, data.path); - syncTreeNode($scope.content, data.path); - - $scope.page.buttonGroupState = "success"; - - }, function(err) { - formHelper.showNotifications(err.data); - $scope.page.buttonGroupState = 'error'; - }); - } + $scope.page.buttonGroupState = "success"; + eventsService.emit("content.unpublished", { content: $scope.content }); + }, function(err) { + formHelper.showNotifications(err.data); + $scope.page.buttonGroupState = 'error'; + }); + + } else { + $scope.page.buttonGroupState = "init"; + } + + // unsubscribe to avoid queueing notifications + // listener is re-bound when the unpublish button is clicked so it is created just-in-time + actioned(); + + }); }; $scope.sendToPublish = function () { diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/content/umbcontentnodeinfo.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/content/umbcontentnodeinfo.directive.js index b2bbd9006a..7f9d05aebc 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/content/umbcontentnodeinfo.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/content/umbcontentnodeinfo.directive.js @@ -10,10 +10,12 @@ scope.publishStatus = {}; scope.disableTemplates = Umbraco.Sys.ServerVariables.features.disabledFeatures.disableTemplates; - - function onInit() { - scope.allowOpen = true; + function onInit() { + // If logged in user has access to the settings section + // show the open anchors - if the user doesn't have + // access, documentType is null, see ContentModelMapper + scope.allowOpen = scope.node.documentType !== null; scope.datePickerConfig = { pickDate: true, @@ -41,8 +43,13 @@ // make sure dates are formatted to the user's locale formatDatesToLocal(); + // Make sure to set the node status setNodePublishStatus(scope.node); - + + // Declare a fallback URL for the directive + if (scope.documentType !== null) { + scope.previewOpenUrl = '#/settings/documenttypes/edit/' + scope.documentType.id; + } } scope.auditTrailPageChange = function (pageNumber) { @@ -50,11 +57,16 @@ loadAuditTrail(); }; - scope.openDocumentType = function (documentType) { + scope.openDocumentType = function (documentType) { var url = "/settings/documenttypes/edit/" + documentType.id; $location.url(url); }; + scope.openTemplate = function () { + var url = "/settings/templates/edit/" + scope.node.templateId; + $location.url(url); + } + scope.updateTemplate = function (templateAlias) { // update template value @@ -91,7 +103,7 @@ item.timestampFormatted = dateHelper.getLocalDate(item.timestamp, currentUser.locale, 'LLL'); }); }); - + scope.auditTrail = data.items; scope.auditTrailOptions.pageNumber = data.pageNumber; scope.auditTrailOptions.pageSize = data.pageSize; @@ -99,7 +111,7 @@ scope.auditTrailOptions.totalPages = data.totalPages; setAuditTrailLogTypeColor(scope.auditTrail); - + scope.loadingAuditTrail = false; }); @@ -107,6 +119,7 @@ function setAuditTrailLogTypeColor(auditTrail) { angular.forEach(auditTrail, function (item) { + switch (item.logType) { case "Publish": item.logTypeColor = "success"; @@ -122,7 +135,6 @@ } function setNodePublishStatus(node) { - // deleted node if(node.trashed === true) { scope.publishStatus.label = localizationService.localize("general_deleted"); @@ -216,7 +228,7 @@ eventsService.emit("editors.content.changeUnpublishDate", args); } - + function ucfirst(string) { return string.charAt(0).toUpperCase() + string.slice(1); } @@ -225,13 +237,13 @@ // get current backoffice user and format dates userService.getCurrentUser().then(function (currentUser) { scope.node.createDateFormatted = dateHelper.getLocalDate(scope.node.createDate, currentUser.locale, 'LLL'); - + scope.node.releaseDateYear = scope.node.releaseDate ? ucfirst(dateHelper.getLocalDate(scope.node.releaseDate, currentUser.locale, 'YYYY')) : null; scope.node.releaseDateMonth = scope.node.releaseDate ? ucfirst(dateHelper.getLocalDate(scope.node.releaseDate, currentUser.locale, 'MMMM')) : null; scope.node.releaseDateDayNumber = scope.node.releaseDate ? ucfirst(dateHelper.getLocalDate(scope.node.releaseDate, currentUser.locale, 'DD')) : null; scope.node.releaseDateDay = scope.node.releaseDate ? ucfirst(dateHelper.getLocalDate(scope.node.releaseDate, currentUser.locale, 'dddd')) : null; scope.node.releaseDateTime = scope.node.releaseDate ? ucfirst(dateHelper.getLocalDate(scope.node.releaseDate, currentUser.locale, 'HH:mm')) : null; - + scope.node.removeDateYear = scope.node.removeDate ? ucfirst(dateHelper.getLocalDate(scope.node.removeDate, currentUser.locale, 'YYYY')) : null; scope.node.removeDateMonth = scope.node.removeDate ? ucfirst(dateHelper.getLocalDate(scope.node.removeDate, currentUser.locale, 'MMMM')) : null; scope.node.removeDateDayNumber = scope.node.removeDate ? ucfirst(dateHelper.getLocalDate(scope.node.removeDate, currentUser.locale, 'DD')) : null; @@ -256,8 +268,8 @@ scope.$watch('node.updateDate', function(newValue, oldValue){ if(!newValue) { return; } - if(newValue === oldValue) { return; } - + if(newValue === oldValue) { return; } + if(isInfoTab) { loadAuditTrail(); formatDatesToLocal(); diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbeditorheader.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbeditorheader.directive.js index 255897e3f8..9f558ea7e4 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbeditorheader.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbeditorheader.directive.js @@ -212,6 +212,8 @@ Use this directive to construct a header inside the main editor window. scope.dialogModel = { view: "iconpicker", show: true, + icon: scope.icon.split(' ')[0], + color: scope.icon.split(' ')[1], submit: function (model) { /* ensure an icon is selected, because on focus on close button diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/forms/checklistmodel.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/forms/checklistmodel.directive.js index 181d8a1881..a89477b001 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/forms/checklistmodel.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/forms/checklistmodel.directive.js @@ -1,6 +1,6 @@ /* - http://vitalets.github.io/checklist-model/ + https://vitalets.github.io/checklist-model/ @@ -19,7 +19,7 @@ angular.module('umbraco.directives') return false; } - // add + // add function add(arr, item) { arr = angular.isArray(arr) ? arr : []; for (var i = 0; i < arr.length; i++) { @@ -44,7 +44,7 @@ angular.module('umbraco.directives') return arr; } - // http://stackoverflow.com/a/19228302/1458162 + // https://stackoverflow.com/a/19228302/1458162 function postLinkFn(scope, elem, attrs) { // compile with `ng-model` pointing to `checked` $compile(elem)(scope); @@ -98,4 +98,4 @@ angular.module('umbraco.directives') return postLinkFn; } }; -}]); \ No newline at end of file +}]); diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/html/umbbox/umbboxheader.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/html/umbbox/umbboxheader.directive.js index bb16edf761..a0fbd2c24a 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/html/umbbox/umbboxheader.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/html/umbbox/umbboxheader.directive.js @@ -27,7 +27,7 @@ Use this directive to construct a title. Recommended to use it inside an {@link -{@link https://our.umbraco.org/documentation/extending/language-files/ Here you can see more about the language files} +{@link https://our.umbraco.com/documentation/extending/language-files/ Here you can see more about the language files}

Use in combination with:

    diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/imaging/umbimagecrop.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/imaging/umbimagecrop.directive.js index 135d806aa4..a287ec0476 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/imaging/umbimagecrop.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/imaging/umbimagecrop.directive.js @@ -53,7 +53,7 @@ angular.module("umbraco.directives") var $container = element.find(".crop-container"); //default constraints for drag n drop - var constraints = {left: {max: scope.dimensions.margin, min: scope.dimensions.margin}, top: {max: scope.dimensions.margin, min: scope.dimensions.margin}, }; + var constraints = {left: {max: scope.dimensions.margin, min: scope.dimensions.margin}, top: {max: scope.dimensions.margin, min: scope.dimensions.margin} }; scope.constraints = constraints; diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/media/umbmedianodeinfo.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/media/umbmedianodeinfo.directive.js index 1aa026cb3a..efdeceb78f 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/media/umbmedianodeinfo.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/media/umbmedianodeinfo.directive.js @@ -8,11 +8,16 @@ var evts = []; function onInit() { - scope.allowOpenMediaType = true; + // If logged in user has access to the settings section + // show the open anchors - if the user doesn't have + // access, contentType is null, see MediaModelMapper + scope.allowOpen = scope.node.contentType !== null; + // get document type details scope.mediaType = scope.node.contentType; - // get node url - scope.nodeUrl = scope.node.mediaLink; + + // set the media link initially + setMediaLink(); // make sure dates are formatted to the user's locale formatDatesToLocal(); } @@ -25,16 +30,25 @@ }); } + function setMediaLink(){ + scope.nodeUrl = scope.node.mediaLink; + } + scope.openMediaType = function (mediaType) { // remove first "#" from url if it is prefixed else the path won't work var url = "/settings/mediaTypes/edit/" + mediaType.id; $location.path(url); }; - + // watch for content updates - reload content when node is saved, published etc. scope.$watch('node.updateDate', function(newValue, oldValue){ if(!newValue) { return; } if(newValue === oldValue) { return; } + + // Update the media link + setMediaLink(); + + // Update the create and update dates formatDatesToLocal(); }); @@ -46,7 +60,6 @@ }); onInit(); - } var directive = { @@ -64,4 +77,4 @@ angular.module('umbraco.directives').directive('umbMediaNodeInfo', MediaNodeInfoDirective); -})(); \ No newline at end of file +})(); diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/tree/umbtree.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/tree/umbtree.directive.js index cce4e0d792..d36836f440 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/tree/umbtree.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/tree/umbtree.directive.js @@ -140,37 +140,7 @@ function umbTreeDirective($compile, $log, $q, $rootScope, treeService, notificat //Filter the path for root node ids (we don't want to pass in -1 or 'init') args.path = _.filter(args.path, function (item) { return (item !== "init" && item !== "-1"); }); - - //Once those are filtered we need to check if the current user has a special start node id, - // if they do, then we're going to trim the start of the array for anything found from that start node - // and previous so that the tree syncs properly. The tree syncs from the top down and if there are parts - // of the tree's path in there that don't actually exist in the dom/model then syncing will not work. - - userService.getCurrentUser().then(function (userData) { - - var startNodes = []; - for (var i = 0; i < userData.startContentIds; i++) { - startNodes.push(userData.startContentIds[i]); - } - for (var j = 0; j < userData.startMediaIds; j++) { - startNodes.push(userData.startMediaIds[j]); - } - - _.each(startNodes, function (i) { - var found = _.find(args.path, function (p) { - return String(p) === String(i); - }); - if (found) { - args.path = args.path.splice(_.indexOf(args.path, found)); - } - }); - - - loadPath(args.path, args.forceReload, args.activate); - - }); - - + loadPath(args.path, args.forceReload, args.activate); return deferred.promise; }; diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbGenerateAlias.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbGenerateAlias.directive.js index 4bc6f08eb9..66e93d70d8 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbGenerateAlias.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbGenerateAlias.directive.js @@ -82,7 +82,7 @@ angular.module("umbraco.directives") generateAliasTimeout = $timeout(function () { updateAlias = true; - entityResource.getSafeAlias(value, true).then(function (safeAlias) { + entityResource.getSafeAlias(encodeURIComponent(value), true).then(function (safeAlias) { if (updateAlias) { scope.alias = safeAlias.alias; } diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbaceeditor.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbaceeditor.directive.js index ca389a74a7..a215bca645 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbaceeditor.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbaceeditor.directive.js @@ -161,7 +161,7 @@ /** * ACE editor session. * @type object - * @see [EditSession]{@link http://ace.c9.io/#nav=api&api=edit_session} + * @see [EditSession]{@link https://ace.c9.io/#nav=api&api=edit_session} */ var session = acee.getSession(); diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbcolorswatches.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbcolorswatches.directive.js new file mode 100644 index 0000000000..6ed65a9431 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbcolorswatches.directive.js @@ -0,0 +1,61 @@ + +/** +@ngdoc directive +@name umbraco.directives.directive:umbColorSwatches +@restrict E +@scope +@description +Use this directive to generate color swatches to pick from. +

    Markup example

    +
    +    
    +    
    +
    +@param {array} colors (attribute): The array of colors. +@param {string} colors (attribute): The array of colors. +@param {string} selectedColor (attribute): The selected color. +@param {string} size (attribute): The size (s, m). +@param {function} onSelect (expression): Callback function when the item is selected. +**/ + +(function () { + 'use strict'; + + function ColorSwatchesDirective() { + + function link(scope, el, attr, ctrl) { + + scope.setColor = function (color) { + //scope.selectedColor({color: color }); + scope.selectedColor = color; + + if (scope.onSelect) { + scope.onSelect(color); + } + }; + } + + var directive = { + restrict: 'E', + replace: true, + transclude: true, + templateUrl: 'views/components/umb-color-swatches.html', + scope: { + colors: '=?', + size: '@', + selectedColor: '=', + onSelect: '&' + }, + link: link + }; + + return directive; + + } + + angular.module('umbraco.directives').directive('umbColorSwatches', ColorSwatchesDirective); + +})(); diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbdatetimepicker.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbdatetimepicker.directive.js index 19ab789363..8d2b83d065 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbdatetimepicker.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbdatetimepicker.directive.js @@ -7,7 +7,7 @@ @description Added in Umbraco version 7.6 This directive is a wrapper of the bootstrap datetime picker version 3.1.3. Use it to render a date time picker. -For extra details about options and events take a look here: http://eonasdan.github.io/bootstrap-datetimepicker/ +For extra details about options and events take a look here: https://eonasdan.github.io/bootstrap-datetimepicker/ Use this directive to render a date time picker diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbdropdownitem.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbdropdownitem.directive.js index 59b2b827eb..1c302ca90f 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbdropdownitem.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbdropdownitem.directive.js @@ -17,7 +17,7 @@ restrict: 'E', replace: true, transclude: true, - templateUrl: 'views/components/umb-dropdown-item.html', + templateUrl: 'views/components/umb-dropdown-item.html' }; return directive; diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbgridselector.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbgridselector.directive.js index f8bdb50e32..127386e34d 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbgridselector.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbgridselector.directive.js @@ -1,7 +1,7 @@ -(function() { +(function () { 'use strict'; - function GridSelector() { + function GridSelector($location) { function link(scope, el, attr, ctrl) { @@ -11,18 +11,18 @@ scope.itemLabel = ""; // set default item name - if(!scope.itemName){ + if (!scope.itemName) { scope.itemLabel = "item"; } else { scope.itemLabel = scope.itemName; } - scope.removeItem = function(selectedItem) { + scope.removeItem = function (selectedItem) { var selectedItemIndex = scope.selectedItems.indexOf(selectedItem); scope.selectedItems.splice(selectedItemIndex, 1); }; - scope.removeDefaultItem = function() { + scope.removeDefaultItem = function () { // it will be the last item so we can clear the array scope.selectedItems = []; @@ -32,7 +32,7 @@ }; - scope.openItemPicker = function($event){ + scope.openItemPicker = function ($event) { scope.dialogModel = { view: "itempicker", title: "Choose " + scope.itemLabel, @@ -40,11 +40,11 @@ selectedItems: scope.selectedItems, event: $event, show: true, - submit: function(model) { + submit: function (model) { scope.selectedItems.push(model.selectedItem); // if no default item - set item as default - if(scope.defaultItem === null) { + if (scope.defaultItem === null) { scope.setAsDefaultItem(model.selectedItem); } @@ -54,7 +54,12 @@ }; }; - scope.setAsDefaultItem = function(selectedItem) { + scope.openTemplate = function (selectedItem) { + var url = "/settings/templates/edit/" + selectedItem.id; + $location.url(url); + } + + scope.setAsDefaultItem = function (selectedItem) { // clear default item scope.defaultItem = {}; @@ -65,69 +70,69 @@ function updatePlaceholders() { - // update default item - if(scope.defaultItem !== null && scope.defaultItem.placeholder) { + // update default item + if (scope.defaultItem !== null && scope.defaultItem.placeholder) { - scope.defaultItem.name = scope.name; + scope.defaultItem.name = scope.name; - if(scope.alias !== null && scope.alias !== undefined) { - scope.defaultItem.alias = scope.alias; - } - - } - - // update selected items - angular.forEach(scope.selectedItems, function(selectedItem) { - if(selectedItem.placeholder) { - - selectedItem.name = scope.name; - - if(scope.alias !== null && scope.alias !== undefined) { - selectedItem.alias = scope.alias; - } + if (scope.alias !== null && scope.alias !== undefined) { + scope.defaultItem.alias = scope.alias; + } } - }); - // update availableItems - angular.forEach(scope.availableItems, function(availableItem) { - if(availableItem.placeholder) { + // update selected items + angular.forEach(scope.selectedItems, function (selectedItem) { + if (selectedItem.placeholder) { - availableItem.name = scope.name; + selectedItem.name = scope.name; - if(scope.alias !== null && scope.alias !== undefined) { - availableItem.alias = scope.alias; - } + if (scope.alias !== null && scope.alias !== undefined) { + selectedItem.alias = scope.alias; + } - } - }); + } + }); + + // update availableItems + angular.forEach(scope.availableItems, function (availableItem) { + if (availableItem.placeholder) { + + availableItem.name = scope.name; + + if (scope.alias !== null && scope.alias !== undefined) { + availableItem.alias = scope.alias; + } + + } + }); } function activate() { - // add watchers for updating placeholde name and alias - if(scope.updatePlaceholder) { - eventBindings.push(scope.$watch('name', function(newValue, oldValue){ - updatePlaceholders(); - })); + // add watchers for updating placeholde name and alias + if (scope.updatePlaceholder) { + eventBindings.push(scope.$watch('name', function (newValue, oldValue) { + updatePlaceholders(); + })); - eventBindings.push(scope.$watch('alias', function(newValue, oldValue){ - updatePlaceholders(); - })); - } + eventBindings.push(scope.$watch('alias', function (newValue, oldValue) { + updatePlaceholders(); + })); + } } activate(); // clean up - scope.$on('$destroy', function(){ + scope.$on('$destroy', function () { - // clear watchers - for(var e in eventBindings) { - eventBindings[e](); - } + // clear watchers + for (var e in eventBindings) { + eventBindings[e](); + } }); @@ -138,13 +143,13 @@ replace: true, templateUrl: 'views/components/umb-grid-selector.html', scope: { - name: "=", - alias: "=", - selectedItems: '=', - availableItems: "=", - defaultItem: "=", - itemName: "@", - updatePlaceholder: "=" + name: "=", + alias: "=", + selectedItems: '=', + availableItems: "=", + defaultItem: "=", + itemName: "@", + updatePlaceholder: "=" }, link: link }; diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbgroupsbuilder.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbgroupsbuilder.directive.js index 63cddbf1bf..db0bc9a1d8 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbgroupsbuilder.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbgroupsbuilder.directive.js @@ -57,7 +57,7 @@ }, stop: function(e, ui) { updateTabsSortOrder(); - }, + } }; scope.sortableOptionsProperty = { diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umblaunchminieditor.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umblaunchminieditor.directive.js index 11b934ce96..0f0ca9dd1b 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umblaunchminieditor.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umblaunchminieditor.directive.js @@ -12,7 +12,7 @@ angular.module("umbraco.directives") restrict: 'A', replace: false, scope: { - node: '=umbLaunchMiniEditor', + node: '=umbLaunchMiniEditor' }, link: function(scope, element, attrs) { diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umblistviewsettings.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umblistviewsettings.directive.js index f21f7b8d3d..26583b108b 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umblistviewsettings.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umblistviewsettings.directive.js @@ -1,9 +1,9 @@ (function() { 'use strict'; - function ListViewSettingsDirective(contentTypeResource, dataTypeResource, dataTypeHelper, listViewPrevalueHelper) { + function ListViewSettingsDirective(dataTypeResource, dataTypeHelper, listViewPrevalueHelper) { - function link(scope, el, attr, ctrl) { + function link(scope) { scope.dataType = {}; scope.editDataTypeSettings = false; @@ -22,7 +22,6 @@ listViewPrevalueHelper.setPrevalues(dataType.preValues); scope.customListViewCreated = checkForCustomListView(); - }); } else { @@ -111,8 +110,16 @@ }; + scope.toggle = function(){ + if(scope.enableListView){ + scope.enableListView = false; + return; + } + scope.enableListView = true; + }; + /* ----------- SCOPE WATCHERS ----------- */ - var unbindEnableListViewWatcher = scope.$watch('enableListView', function(newValue, oldValue){ + var unbindEnableListViewWatcher = scope.$watch('enableListView', function(newValue){ if(newValue !== undefined) { activate(); diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbminilistview.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbminilistview.directive.js index ce14aaedc5..1cf934b78c 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbminilistview.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbminilistview.directive.js @@ -8,7 +8,7 @@ scope.search = ""; scope.miniListViews = []; scope.breadcrumb = []; - + var miniListViewsHistory = []; var goingForward = true; var skipAnimation = true; @@ -60,9 +60,13 @@ entityResource.getPagedChildren(miniListView.node.id, scope.entityType, miniListView.pagination) .then(function (data) { + // update children miniListView.children = data.items; _.each(miniListView.children, function(c) { + // child allowed by default + c.allowed = true; + // convert legacy icon for node if(c.icon) { c.icon = iconHelper.convertFromLegacyIcon(c.icon); @@ -74,6 +78,17 @@ c.published = c.metaData.IsPublished; } } + + // filter items if there is a filter and it's not advanced + // ** ignores advanced filter at the moment + if (scope.entityTypeFilter && !scope.entityTypeFilter.filterAdvanced) { + var a = scope.entityTypeFilter.filter.toLowerCase().replace(/\s/g, '').split(','); + var found = a.indexOf(c.metaData.ContentTypeAlias.toLowerCase()) >= 0; + + if (!scope.entityTypeFilter.filterExclude && !found || scope.entityTypeFilter.filterExclude && found) { + c.allowed = false; + } + } }); // update pagination miniListView.pagination.totalItems = data.totalItems; @@ -89,7 +104,7 @@ }; scope.selectNode = function(node) { - if(scope.onSelect) { + if (scope.onSelect && node.allowed) { scope.onSelect({'node': node}); } }; @@ -202,7 +217,8 @@ entityType: "@", startNodeId: "=", onSelect: "&", - onClose: "&" + onClose: "&", + entityTypeFilter: "=" }, link: link }; diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbnodepreview.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbnodepreview.directive.js index 556019857b..9f1f7a0d2e 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbnodepreview.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbnodepreview.directive.js @@ -16,6 +16,7 @@ ng-repeat="node in vm.nodes" icon="node.icon" name="node.name" + alias="node.alias" published="node.published" description="node.description" sortable="vm.sortable" @@ -77,6 +78,7 @@ @param {string} icon (binding): The node icon. @param {string} name (binding): The node name. +@param {string} alias (binding): The node document type alias will be displayed on hover if in debug mode or logged in as admin @param {boolean} published (binding): The node published state. @param {string} description (binding): A short description. @param {boolean} sortable (binding): Will add a move cursor on the node preview. Can used in combination with ui-sortable. @@ -86,17 +88,24 @@ @param {function} onRemove (expression): Callback function when the remove button is clicked. @param {function} onOpen (expression): Callback function when the open button is clicked. @param {function} onEdit (expression): Callback function when the edit button is clicked (Added in version 7.7.0). +@param {string} openUrl (binding): Fallback URL for onOpen (Added in version 7.12.0). +@param {string} editUrl (binding): Fallback URL for onEdit (Added in version 7.12.0). +@param {string} removeUrl (binding): Fallback URL for onRemove (Added in version 7.12.0). **/ (function () { 'use strict'; - function NodePreviewDirective() { + function NodePreviewDirective(userService) { function link(scope, el, attr, ctrl) { if (!scope.editLabelKey) { scope.editLabelKey = "general_edit"; } + userService.getCurrentUser().then(function (u) { + var isAdmin = u.userGroups.indexOf('admin') !== -1; + scope.alias = (Umbraco.Sys.ServerVariables.isDebuggingEnabled === true || isAdmin) ? scope.alias : null; + }); } var directive = { @@ -106,6 +115,7 @@ scope: { icon: "=?", name: "=", + alias: "=?", description: "=?", permissions: "=?", published: "=?", @@ -115,7 +125,10 @@ allowEdit: "=?", onOpen: "&?", onRemove: "&?", - onEdit: "&?" + onEdit: "&?", + openUrl: '=?', + editUrl: '=?', + removeUrl: '=?' }, link: link }; @@ -126,4 +139,4 @@ angular.module('umbraco.directives').directive('umbNodePreview', NodePreviewDirective); -})(); \ No newline at end of file +})(); diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbpagination.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbpagination.directive.js index 84b3adb471..43f55315ac 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbpagination.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbpagination.directive.js @@ -170,7 +170,7 @@ Use this directive to generate a pagination. } }; - var unbindPageNumberWatcher = scope.$watch('pageNumber', function(newValue, oldValue){ + var unbindPageNumberWatcher = scope.$watchCollection('[pageNumber, totalPages]', function (newValues, oldValues) { activate(); }); diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbstickybar.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbstickybar.directive.js index 91a0a41a10..e8d8315b7a 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbstickybar.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbstickybar.directive.js @@ -50,6 +50,11 @@ Use this directive make an element sticky and follow the page when scrolling. function activate() { + if (bar.parents(".umb-property").length > 1) { + bar.addClass("nested"); + return; + } + if (attr.scrollableContainer) { scrollableContainer = $(attr.scrollableContainer); } else { diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/util/konami.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/util/konami.directive.js index 7c96e0e050..7914dfc3f0 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/util/konami.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/util/konami.directive.js @@ -1,7 +1,7 @@ /** * Konami Code directive for AngularJS * @version v0.0.1 - * @license MIT License, http://www.opensource.org/licenses/MIT + * @license MIT License, https://www.opensource.org/licenses/MIT */ angular.module('umbraco.directives') @@ -59,4 +59,4 @@ angular.module('umbraco.directives') scope.$on('$destroy', stopListening); } }; - }]); \ No newline at end of file + }]); diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/validation/nodirtycheck.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/validation/nodirtycheck.directive.js index 104736530f..800ac87480 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/validation/nodirtycheck.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/validation/nodirtycheck.directive.js @@ -2,7 +2,7 @@ * @ngdoc directive * @name umbraco.directives.directive:noDirtyCheck * @restrict A -* @description Can be attached to form inputs to prevent them from setting the form as dirty (http://stackoverflow.com/questions/17089090/prevent-input-from-setting-form-dirty-angularjs) +* @description Can be attached to form inputs to prevent them from setting the form as dirty (https://stackoverflow.com/questions/17089090/prevent-input-from-setting-form-dirty-angularjs) **/ function noDirtyCheck() { return { @@ -20,4 +20,4 @@ function noDirtyCheck() { } }; } -angular.module('umbraco.directives.validation').directive("noDirtyCheck", noDirtyCheck); \ No newline at end of file +angular.module('umbraco.directives.validation').directive("noDirtyCheck", noDirtyCheck); diff --git a/src/Umbraco.Web.UI.Client/src/common/filters/nestedcontent.filter.js b/src/Umbraco.Web.UI.Client/src/common/filters/nestedcontent.filter.js index 76e4e4a822..8c23094bbf 100644 --- a/src/Umbraco.Web.UI.Client/src/common/filters/nestedcontent.filter.js +++ b/src/Umbraco.Web.UI.Client/src/common/filters/nestedcontent.filter.js @@ -9,6 +9,13 @@ var ncNodeNameCache = { angular.module("umbraco.filters").filter("ncNodeName", function (editorState, entityResource) { + function formatLabel(firstNodeName, totalNodes) { + return totalNodes <= 1 + ? firstNodeName + // If there is more than one item selected, append the additional number of items selected to hint that + : firstNodeName + " (+" + (totalNodes - 1) + ")"; + } + return function (input) { // Check we have a value at all @@ -25,23 +32,38 @@ angular.module("umbraco.filters").filter("ncNodeName", function (editorState, en ncNodeNameCache.keys = {}; } + // MNTP values are comma separated IDs. We'll only fetch the first one for the NC header. + var ids = input.split(','); + var lookupId = ids[0]; + // See if there is a value in the cache and use that - if (ncNodeNameCache.keys[input]) { - return ncNodeNameCache.keys[input]; + if (ncNodeNameCache.keys[lookupId]) { + return formatLabel(ncNodeNameCache.keys[lookupId], ids.length); } // No value, so go fetch one // We'll put a temp value in the cache though so we don't // make a load of requests while we wait for a response - ncNodeNameCache.keys[input] = "Loading..."; + ncNodeNameCache.keys[lookupId] = "Loading..."; - entityResource.getById(input, "Document") - .then(function (ent) { - ncNodeNameCache.keys[input] = ent.name; - }); + var type = lookupId.indexOf("umb://media/") === 0 + ? "Media" + : lookupId.indexOf("umb://member/") === 0 + ? "Member" + : "Document"; + entityResource.getById(lookupId, type) + .then( + function (ent) { + ncNodeNameCache.keys[lookupId] = ent.name; + } + ); // Return the current value for now - return ncNodeNameCache.keys[input]; + return formatLabel(ncNodeNameCache.keys[lookupId], ids.length); }; -}); \ No newline at end of file +}).filter("ncRichText", function () { + return function(input) { + return $("
    ").html(input).text(); + }; +}); diff --git a/src/Umbraco.Web.UI.Client/src/common/mocks/services/localization.mocks.js b/src/Umbraco.Web.UI.Client/src/common/mocks/services/localization.mocks.js index 0308ab6197..2665716ac4 100644 --- a/src/Umbraco.Web.UI.Client/src/common/mocks/services/localization.mocks.js +++ b/src/Umbraco.Web.UI.Client/src/common/mocks/services/localization.mocks.js @@ -371,7 +371,7 @@ angular.module('umbraco.mocks'). "installer_databaseHeader": "Database configuration", "installer_databaseInstall": " Press the install button to install the Umbraco %0% database ", "installer_databaseInstallDone": "Umbraco %0% has now been copied to your database. Press Next to proceed.", - "installer_databaseNotFound": "

    Database not found! Please check that the information in the 'connection string' of the \"web.config\" file is correct.

    To proceed, please edit the 'web.config' file (using Visual Studio or your favourite text editor), scroll to the bottom, add the connection string for your database in the key named 'UmbracoDbDSN' and save the file.

    Click the retry button when done.
    More information on editing web.config here.

    ", + "installer_databaseNotFound": "

    Database not found! Please check that the information in the 'connection string' of the \"web.config\" file is correct.

    To proceed, please edit the 'web.config' file (using Visual Studio or your favourite text editor), scroll to the bottom, add the connection string for your database in the key named 'UmbracoDbDSN' and save the file.

    Click the retry button when done.
    More information on editing web.config here.

    ", "installer_databaseText": "To complete this step, you must know some information regarding your database server ('connection string').
    Please contact your ISP if necessary. If you're installing on a local machine or server you might need information from your system administrator.", "installer_databaseUpgrade": "

    Press the upgrade button to upgrade your database to Umbraco %0%

    Don't worry - no content will be deleted and everything will continue working afterwards!

    ", "installer_databaseUpgradeDone": "Your database has been upgraded to the final version %0%.
    Press Next to proceed. ", @@ -399,7 +399,7 @@ angular.module('umbraco.mocks'). "installer_permissionsSettingUpPermissions": "Setting up folder permissions", "installer_permissionsText": " Umbraco needs write/modify access to certain directories in order to store files like pictures and PDF's. It also stores temporary data (aka: cache) for enhancing the performance of your website. ", "installer_runwayFromScratch": "I want to start from scratch", - "installer_runwayFromScratchText": " Your website is completely empty at the moment, so that's perfect if you want to start from scratch and create your own document types and templates. (learn how) You can still choose to install Runway later on. Please go to the Developer section and choose Packages. ", + "installer_runwayFromScratchText": " Your website is completely empty at the moment, so that's perfect if you want to start from scratch and create your own document types and templates. (learn how) You can still choose to install Runway later on. Please go to the Developer section and choose Packages. ", "installer_runwayHeader": "You've just set up a clean Umbraco platform. What do you want to do next?", "installer_runwayInstalled": "Runway is installed", "installer_runwayInstalledText": " You have the foundation in place. Select what modules you wish to install on top of it.
    This is our list of recommended modules, check off the ones you would like to install, or view the full list of modules ", @@ -436,7 +436,7 @@ angular.module('umbraco.mocks'). "login_greeting6": "Happy friendly Friday", "login_greeting7": "Happy shiny Saturday", "login_instruction": "Log in below:", - "login_bottomText": "

    © 2001 - %0%
    Umbraco.org

    ", + "login_bottomText": "

    © 2001 - %0%
    Umbraco.org

    ", "main_dashboard": "Dashboard", "main_sections": "Sections", "main_tree": "Content", @@ -767,4 +767,4 @@ angular.module('umbraco.mocks'). .respond(getLanguageResource); } }; - }]); \ No newline at end of file + }]); diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/content.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/content.resource.js index 1ba454ac65..b695809eaa 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/content.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/content.resource.js @@ -337,6 +337,29 @@ function contentResource($q, $http, umbDataFormatter, umbRequestHelper) { 'Failed to retrieve data for content id ' + id); }, + getNotifySettingsById: function (id) { + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "contentApiBaseUrl", + "GetNotificationOptions", + [{ contentId: id }])), + 'Failed to retrieve data for content id ' + id); + }, + + setNotifySettingsById: function (id, options) { + if (!id) { + throw "contentId cannot be null"; + } + return umbRequestHelper.resourcePromise( + $http.post( + umbRequestHelper.getApiUrl( + "contentApiBaseUrl", + "PostNotificationOptions", + { contentId: id, notifyOptions: options })), + 'Failed to set notify settings for content id ' + id); + }, + /** * @ngdoc method * @name umbraco.resources.contentResource#getByIds diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/contenttype.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/contenttype.resource.js index f31550781a..d006951b8a 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/contenttype.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/contenttype.resource.js @@ -290,14 +290,22 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter) { 'Failed to copy content'); }, - createContainer: function(parentId, name) { + createContainer: function (parentId, name) { return umbRequestHelper.resourcePromise( - $http.post(umbRequestHelper.getApiUrl("contentTypeApiBaseUrl", "PostCreateContainer", { parentId: parentId, name: name })), + $http.post(umbRequestHelper.getApiUrl("contentTypeApiBaseUrl", "PostCreateContainer", { parentId: parentId, name: encodeURIComponent(name) })), 'Failed to create a folder under parent id ' + parentId); }, + createCollection: function (parentId, collectionName, collectionItemName, collectionIcon, collectionItemIcon) { + + return umbRequestHelper.resourcePromise( + $http.post(umbRequestHelper.getApiUrl("contentTypeApiBaseUrl", "PostCreateCollection", { parentId: parentId, collectionName: collectionName, collectionItemName: collectionItemName, collectionIcon: collectionIcon, collectionItemIcon: collectionItemIcon})), + 'Failed to create collection under ' + parentId); + + }, + renameContainer: function(id, name) { return umbRequestHelper.resourcePromise( diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/datatype.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/datatype.resource.js index 11b6969479..c938909f2f 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/datatype.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/datatype.resource.js @@ -355,14 +355,14 @@ function dataTypeResource($q, $http, umbDataFormatter, umbRequestHelper) { umbRequestHelper.getApiUrl( "dataTypeApiBaseUrl", "PostCreateContainer", - { parentId: parentId, name: name })), + { parentId: parentId, name: encodeURIComponent(name) })), 'Failed to create a folder under parent id ' + parentId); - }, - + }, + renameContainer: function (id, name) { return umbRequestHelper.resourcePromise( - $http.post - (umbRequestHelper.getApiUrl( + $http.post + (umbRequestHelper.getApiUrl( "dataTypeApiBaseUrl", "PostRenameContainer", { id: id, name: name })), diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/dictionary.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/dictionary.resource.js new file mode 100644 index 0000000000..3bb01fbe92 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/common/resources/dictionary.resource.js @@ -0,0 +1,162 @@ +/** + * @ngdoc service + * @name umbraco.resources.dictionaryResource + * @description Loads in data for dictionary items +**/ +function dictionaryResource($q, $http, $location, umbRequestHelper, umbDataFormatter) { + + /** + * @ngdoc method + * @name umbraco.resources.dictionaryResource#deleteById + * @methodOf umbraco.resources.dictionaryResource + * + * @description + * Deletes a dictionary item with a given id + * + * ##usage + *
    +         * dictionaryResource.deleteById(1234)
    +         *    .then(function() {
    +         *        alert('its gone!');
    +         *    });
    +         * 
    + * + * @param {Int} id id of dictionary item to delete + * @returns {Promise} resourcePromise object. + * + **/ + function deleteById(id) { + return umbRequestHelper.resourcePromise( + $http.post( + umbRequestHelper.getApiUrl( + "dictionaryApiBaseUrl", + "DeleteById", + [{ id: id }])), + "Failed to delete item " + id); + } + + /** + * @ngdoc method + * @name umbraco.resources.dictionaryResource#create + * @methodOf umbraco.resources.dictionaryResource + * + * @description + * Creates a dictionary item with the gieven key and parent id + * + * ##usage + *
    +         * dictionaryResource.create(1234,"Item key")
    +         *    .then(function() {
    +         *        alert('its created!');
    +         *    });
    +         * 
    + * + * @param {Int} parentid the parentid of the new dictionary item + * @param {String} key the key of the new dictionary item + * @returns {Promise} resourcePromise object. + * + **/ + function create(parentid, key) { + return umbRequestHelper.resourcePromise( + $http.post( + umbRequestHelper.getApiUrl( + "dictionaryApiBaseUrl", + "Create", + { parentId: parentid, key : key })), + "Failed to create item "); + } + + /** + * @ngdoc method + * @name umbraco.resources.dictionaryResource#deleteById + * @methodOf umbraco.resources.dictionaryResource + * + * @description + * Gets a dictionary item with a given id + * + * ##usage + *
    +         * dictionaryResource.getById(1234)
    +         *    .then(function() {
    +         *        alert('Found it!');
    +         *    });
    +         * 
    + * + * @param {Int} id id of dictionary item to get + * @returns {Promise} resourcePromise object. + * + **/ + function getById(id) { + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "dictionaryApiBaseUrl", + "GetById", + [{ id: id }])), + "Failed to get item " + id); + } + + /** + * @ngdoc method + * @name umbraco.resources.dictionaryResource#save + * @methodOf umbraco.resources.dictionaryResource + * + * @description + * Updates a dictionary + * + * @param {Object} dictionary dictionary object to update + * @param {Bool} nameIsDirty set to true if the name has been changed + * @returns {Promise} resourcePromise object. + * + */ + function save(dictionary, nameIsDirty) { + + var saveModel = umbDataFormatter.formatDictionaryPostData(dictionary, nameIsDirty); + + return umbRequestHelper.resourcePromise( + $http.post(umbRequestHelper.getApiUrl("dictionaryApiBaseUrl", "PostSave"), saveModel), + "Failed to save data for dictionary id " + dictionary.id); + } + + /** + * @ngdoc method + * @name umbraco.resources.dictionaryResource#getList + * @methodOf umbraco.resources.dictionaryResource + * + * @description + * Gets a list of all dictionary items + * + * ##usage + *
    +         * dictionaryResource.getList()
    +         *    .then(function() {
    +         *        alert('Found it!');
    +         *    });
    +         * 
    + * + * @returns {Promise} resourcePromise object. + * + **/ + function getList() { + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "dictionaryApiBaseUrl", + "getList")), + "Failed to get list"); + } + + var resource = { + deleteById: deleteById, + create: create, + getById: getById, + save: save, + getList : getList + }; + + return resource; + + +} + +angular.module("umbraco.resources").factory("dictionaryResource", dictionaryResource); diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/entity.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/entity.resource.js index 5dd353d9e0..72f8ad5539 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/entity.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/entity.resource.js @@ -406,7 +406,7 @@ function entityResource($q, $http, umbRequestHelper) { * * ##usage *
    -          * entityResource.getPagedDescendants(1234, "Content", {pageSize: 10, pageNumber: 2})
    +          * entityResource.getPagedDescendants(1234, "Document", {pageSize: 10, pageNumber: 2})
               *    .then(function(contentArray) {
               *        var children = contentArray; 
               *        alert('they are here!');
    @@ -416,8 +416,8 @@ function entityResource($q, $http, umbRequestHelper) {
               * @param {Int} parentid id of content item to return descendants of
               * @param {string} type Object type name
               * @param {Object} options optional options object
    -          * @param {Int} options.pageSize if paging data, number of nodes per page, default = 1
    -          * @param {Int} options.pageNumber if paging data, current page index, default = 100
    +          * @param {Int} options.pageSize if paging data, number of nodes per page, default = 100
    +          * @param {Int} options.pageNumber if paging data, current page index, default = 1
               * @param {String} options.filter if provided, query will only return those with names matching the filter
               * @param {String} options.orderDirection can be `Ascending` or `Descending` - Default: `Ascending`
               * @param {String} options.orderBy property to order items by, default: `SortOrder`
    @@ -427,8 +427,8 @@ function entityResource($q, $http, umbRequestHelper) {
             getPagedDescendants: function (parentId, type, options) {
     
                 var defaults = {
    -                pageSize: 1,
    -                pageNumber: 100,
    +                pageSize: 100,
    +                pageNumber: 1,
                     filter: '',
                     orderDirection: "Ascending",
                     orderBy: "SortOrder"
    diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/mediatype.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/mediatype.resource.js
    index 572b2ba3fd..140995cd57 100644
    --- a/src/Umbraco.Web.UI.Client/src/common/resources/mediatype.resource.js
    +++ b/src/Umbraco.Web.UI.Client/src/common/resources/mediatype.resource.js
    @@ -244,7 +244,7 @@ function mediaTypeResource($q, $http, umbRequestHelper, umbDataFormatter) {
                         umbRequestHelper.getApiUrl(
                            "mediaTypeApiBaseUrl",
                            "PostCreateContainer",
    -                       { parentId: parentId, name: name })),
    +                        { parentId: parentId, name: encodeURIComponent(name) })),
                     'Failed to create a folder under parent id ' + parentId);
             },
     
    diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/nestedcontent.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/nestedcontent.resource.js
    index b3488fdff4..4f71c1d1b4 100644
    --- a/src/Umbraco.Web.UI.Client/src/common/resources/nestedcontent.resource.js
    +++ b/src/Umbraco.Web.UI.Client/src/common/resources/nestedcontent.resource.js
    @@ -7,6 +7,6 @@
                         $http.get(url),
                         'Failed to retrieve content types'
                     );
    -            },
    +            }
             };
         });
    \ No newline at end of file
    diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/package.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/package.resource.js
    index cb810c6edb..554134d017 100644
    --- a/src/Umbraco.Web.UI.Client/src/common/resources/package.resource.js
    +++ b/src/Umbraco.Web.UI.Client/src/common/resources/package.resource.js
    @@ -57,7 +57,7 @@ function packageResource($q, $http, umbDataFormatter, umbRequestHelper) {
              * @methodOf umbraco.resources.packageInstallResource
              *
              * @description
    -         * Downloads a package file from our.umbraco.org to the website server.
    +         * Downloads a package file from our.umbraco.com to the website server.
              * 
              * ##usage
              * 
    diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/users.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/users.resource.js
    index 72564398c0..0fd308ffd0 100644
    --- a/src/Umbraco.Web.UI.Client/src/common/resources/users.resource.js
    +++ b/src/Umbraco.Web.UI.Client/src/common/resources/users.resource.js
    @@ -280,7 +280,7 @@
               *    });
               * 
    * - * @param {Array} id user id. + * @param {Int} userId user id. * @returns {Promise} resourcePromise object containing the user. * */ @@ -406,6 +406,36 @@ "Failed to save user"); } + /** + * @ngdoc method + * @name umbraco.resources.usersResource#deleteNonLoggedInUser + * @methodOf umbraco.resources.usersResource + * + * @description + * Deletes a user that hasn't already logged in (and hence we know has made no content updates that would create related records) + * + * ##usage + *
    +          * usersResource.deleteNonLoggedInUser(1)
    +          *    .then(function() {
    +          *        alert("user was deleted");
    +          *    });
    +          * 
    + * + * @param {Int} userId user id. + * @returns {Promise} resourcePromise object. + * + */ + function deleteNonLoggedInUser(userId) { + + return umbRequestHelper.resourcePromise( + $http.post( + umbRequestHelper.getApiUrl( + "userApiBaseUrl", + "PostDeleteNonLoggedInUser", { id: userId })), + 'Failed to delete the user ' + userId); + } + var resource = { disableUsers: disableUsers, @@ -417,6 +447,7 @@ createUser: createUser, inviteUser: inviteUser, saveUser: saveUser, + deleteNonLoggedInUser: deleteNonLoggedInUser, clearAvatar: clearAvatar }; diff --git a/src/Umbraco.Web.UI.Client/src/common/services/appstate.service.js b/src/Umbraco.Web.UI.Client/src/common/services/appstate.service.js index 2369af54b5..085ba52b7e 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/appstate.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/appstate.service.js @@ -329,7 +329,7 @@ angular.module('umbraco.services').factory("editorState", function() { }, set: function (value) { throw "Use editorState.set to set the value of the current entity"; - }, + } }); return state; diff --git a/src/Umbraco.Web.UI.Client/src/common/services/help.service.js b/src/Umbraco.Web.UI.Client/src/common/services/help.service.js index 77621eee9c..ff8d487bb7 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/help.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/help.service.js @@ -2,8 +2,8 @@ angular.module('umbraco.services') .factory('helpService', function ($http, $q, umbRequestHelper) { var helpTopics = {}; - var defaultUrl = "http://our.umbraco.org/rss/help"; - var tvUrl = "http://umbraco.tv/feeds/help"; + var defaultUrl = "https://our.umbraco.com/rss/help"; + var tvUrl = "https://umbraco.tv/feeds/help"; function getCachedHelp(url){ if(helpTopics[url]){ @@ -85,4 +85,4 @@ angular.module('umbraco.services') return service; - }); \ No newline at end of file + }); diff --git a/src/Umbraco.Web.UI.Client/src/common/services/listviewhelper.service.js b/src/Umbraco.Web.UI.Client/src/common/services/listviewhelper.service.js index 2ffdc3f1dd..7c7e07db9a 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/listviewhelper.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/listviewhelper.service.js @@ -270,12 +270,19 @@ for (var i = 0; selection.length > i; i++) { var selectedItem = selection[i]; // if item.id is 2147483647 (int.MaxValue) use item.key - if ((item.id !== 2147483647 && item.id === selectedItem.id) || item.key === selectedItem.key) { + if ((item.id !== 2147483647 && item.id === selectedItem.id) || (item.key && item.key === selectedItem.key)) { isSelected = true; } } if (!isSelected) { - selection.push({ id: item.id, key: item.key }); + var obj = { + id: item.id + }; + if (item.key) { + obj.key = item.key; + } + + selection.push(obj); item.selected = true; } } @@ -296,7 +303,7 @@ for (var i = 0; selection.length > i; i++) { var selectedItem = selection[i]; // if item.id is 2147483647 (int.MaxValue) use item.key - if ((item.id !== 2147483647 && item.id === selectedItem.id) || item.key === selectedItem.key) { + if ((item.id !== 2147483647 && item.id === selectedItem.id) || (item.key && item.key === selectedItem.key)) { selection.splice(i, 1); item.selected = false; } @@ -366,9 +373,15 @@ for (var i = 0; i < items.length; i++) { var item = items[i]; + var obj = { + id: item.id + }; + if (item.key) { + obj.key = item.key + } if (checkbox.checked) { - selection.push({ id: item.id, key: item.key }); + selection.push(obj); } else { clearSelection = true; } @@ -408,7 +421,7 @@ var selectedItem = selection[selectedIndex]; // if item.id is 2147483647 (int.MaxValue) use item.key - if ((item.id !== 2147483647 && item.id === selectedItem.id) || item.key === selectedItem.key) { + if ((item.id !== 2147483647 && item.id === selectedItem.id) || (item.key && item.key === selectedItem.key)) { numberOfSelectedItem++; } } @@ -482,7 +495,7 @@ }); //we need to use 'apply' to call intersection with an array of arrays, - //see: http://stackoverflow.com/a/16229480/694494 + //see: https://stackoverflow.com/a/16229480/694494 var intersectPermissions = _.intersection.apply(_, arr); return { @@ -491,7 +504,7 @@ canDelete: _.contains(intersectPermissions, 'D'), //Magic Char = D canMove: _.contains(intersectPermissions, 'M'), //Magic Char = M canPublish: _.contains(intersectPermissions, 'U'), //Magic Char = U - canUnpublish: _.contains(intersectPermissions, 'U'), //Magic Char = Z (however UI says it can't be set, so if we can publish 'U' we can unpublish) + canUnpublish: _.contains(intersectPermissions, 'U') //Magic Char = Z (however UI says it can't be set, so if we can publish 'U' we can unpublish) }; } diff --git a/src/Umbraco.Web.UI.Client/src/common/services/navigation.service.js b/src/Umbraco.Web.UI.Client/src/common/services/navigation.service.js index f775e35934..840066adef 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/navigation.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/navigation.service.js @@ -641,7 +641,7 @@ function navigationService($rootScope, $routeParams, $log, $location, $q, $timeo //These will show up on the dialog controller's $scope under dialogOptions currentNode: args.node, - currentAction: args.action, + currentAction: args.action }); //save the currently assigned dialog so it can be removed before a new one is created diff --git a/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js b/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js index 86de5b586d..493d6faa17 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js @@ -6,811 +6,869 @@ * @description * A service containing all logic for all of the Umbraco TinyMCE plugins */ -function tinyMceService(dialogService, $log, imageHelper, $http, $timeout, macroResource, macroService, $routeParams, umbRequestHelper, angularHelper, userService) { - return { +function tinyMceService($log, imageHelper, $http, $timeout, macroResource, macroService, $routeParams, umbRequestHelper, angularHelper, userService) { + return { - /** - * @ngdoc method - * @name umbraco.services.tinyMceService#configuration - * @methodOf umbraco.services.tinyMceService - * - * @description - * Returns a collection of plugins available to the tinyMCE editor - * - */ - configuration: function () { - return umbRequestHelper.resourcePromise( - $http.get( - umbRequestHelper.getApiUrl( - "rteApiBaseUrl", - "GetConfiguration"), { cache: true }), - 'Failed to retrieve tinymce configuration'); - }, + /** + * @ngdoc method + * @name umbraco.services.tinyMceService#configuration + * @methodOf umbraco.services.tinyMceService + * + * @description + * Returns a collection of plugins available to the tinyMCE editor + * + */ + configuration: function () { + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "rteApiBaseUrl", + "GetConfiguration"), { + cache: true + }), + 'Failed to retrieve tinymce configuration'); + }, - /** - * @ngdoc method - * @name umbraco.services.tinyMceService#defaultPrevalues - * @methodOf umbraco.services.tinyMceService - * - * @description - * Returns a default configration to fallback on in case none is provided - * - */ - defaultPrevalues: function () { - var cfg = {}; - cfg.toolbar = ["code", "bold", "italic", "styleselect","alignleft", "aligncenter", "alignright", "bullist","numlist", "outdent", "indent", "link", "image", "umbmediapicker", "umbembeddialog", "umbmacro"]; - cfg.stylesheets = []; - cfg.dimensions = { height: 500 }; - cfg.maxImageSize = 500; - return cfg; - }, + /** + * @ngdoc method + * @name umbraco.services.tinyMceService#defaultPrevalues + * @methodOf umbraco.services.tinyMceService + * + * @description + * Returns a default configration to fallback on in case none is provided + * + */ + defaultPrevalues: function () { + var cfg = {}; + cfg.toolbar = ["code", "bold", "italic", "styleselect", "alignleft", "aligncenter", "alignright", "bullist", "numlist", "outdent", "indent", "link", "image", "umbmediapicker", "umbembeddialog", "umbmacro"]; + cfg.stylesheets = []; + cfg.dimensions = { + height: 500 + }; + cfg.maxImageSize = 500; + return cfg; + }, - /** - * @ngdoc method - * @name umbraco.services.tinyMceService#createInsertEmbeddedMedia - * @methodOf umbraco.services.tinyMceService - * - * @description - * Creates the umbrco insert embedded media tinymce plugin - * - * @param {Object} editor the TinyMCE editor instance - * @param {Object} $scope the current controller scope - */ - createInsertEmbeddedMedia: function (editor, scope, callback) { - editor.addButton('umbembeddialog', { - icon: 'custom icon-tv', - tooltip: 'Embed', - onclick: function () { - if (callback) { - callback(); + /** + * @ngdoc method + * @name umbraco.services.tinyMceService#createInsertEmbeddedMedia + * @methodOf umbraco.services.tinyMceService + * + * @description + * Creates the umbrco insert embedded media tinymce plugin + * + * @param {Object} editor the TinyMCE editor instance + * @param {Object} $scope the current controller scope + */ + createInsertEmbeddedMedia: function (editor, scope, callback) { + editor.addButton('umbembeddialog', { + icon: 'custom icon-tv', + tooltip: 'Embed', + onclick: function () { + if (callback) { + callback(); + } + } + }); + }, + + insertEmbeddedMediaInEditor: function (editor, preview) { + editor.insertContent(preview); + }, + + /** + * @ngdoc method + * @name umbraco.services.tinyMceService#createMediaPicker + * @methodOf umbraco.services.tinyMceService + * + * @description + * Creates the umbrco insert media tinymce plugin + * + * @param {Object} editor the TinyMCE editor instance + * @param {Object} $scope the current controller scope + */ + createMediaPicker: function (editor, scope, callback) { + editor.addButton('umbmediapicker', { + icon: 'custom icon-picture', + tooltip: 'Media Picker', + stateSelector: 'img', + onclick: function () { + + var selectedElm = editor.selection.getNode(), + currentTarget; + + + if (selectedElm.nodeName === 'IMG') { + var img = $(selectedElm); + + var hasUdi = img.attr("data-udi") ? true : false; + + currentTarget = { + altText: img.attr("alt"), + url: img.attr("src") + }; + + if (hasUdi) { + currentTarget["udi"] = img.attr("data-udi"); + } else { + currentTarget["id"] = img.attr("rel"); + } + } + + userService.getCurrentUser().then(function (userData) { + if (callback) { + callback(currentTarget, userData); + } + }); + + } + }); + }, + + insertMediaInEditor: function (editor, img) { + if (img) { + + var hasUdi = img.udi ? true : false; + + var data = { + alt: img.altText || "", + src: (img.url) ? img.url : "nothing.jpg", + id: '__mcenew' + }; + + if (hasUdi) { + data["data-udi"] = img.udi; + } else { + //Considering these fixed because UDI will now be used and thus + // we have no need for rel http://issues.umbraco.org/issue/U4-6228, http://issues.umbraco.org/issue/U4-6595 + data["rel"] = img.id; + data["data-id"] = img.id; + } + + editor.insertContent(editor.dom.createHTML('img', data)); + + $timeout(function () { + var imgElm = editor.dom.get('__mcenew'); + var size = editor.dom.getSize(imgElm); + + if (editor.settings.maxImageSize && editor.settings.maxImageSize !== 0) { + var newSize = imageHelper.scaleToMaxSize(editor.settings.maxImageSize, size.w, size.h); + + var s = "width: " + newSize.width + "px; height:" + newSize.height + "px;"; + editor.dom.setAttrib(imgElm, 'style', s); + + if (img.url) { + var src = img.url + "?width=" + newSize.width + "&height=" + newSize.height; + editor.dom.setAttrib(imgElm, 'data-mce-src', src); + } } - } - }); - }, - - insertEmbeddedMediaInEditor: function(editor, preview) { - editor.insertContent(preview); - }, - - /** - * @ngdoc method - * @name umbraco.services.tinyMceService#createMediaPicker - * @methodOf umbraco.services.tinyMceService - * - * @description - * Creates the umbrco insert media tinymce plugin - * - * @param {Object} editor the TinyMCE editor instance - * @param {Object} $scope the current controller scope - */ - createMediaPicker: function (editor, scope, callback) { - editor.addButton('umbmediapicker', { - icon: 'custom icon-picture', - tooltip: 'Media Picker', - stateSelector: 'img', - onclick: function () { - - var selectedElm = editor.selection.getNode(), - currentTarget; - - - if(selectedElm.nodeName === 'IMG'){ - var img = $(selectedElm); - - var hasUdi = img.attr("data-udi") ? true : false; - - currentTarget = { - altText: img.attr("alt"), - url: img.attr("src") - }; - - if (hasUdi) { - currentTarget["udi"] = img.attr("data-udi"); - } - else { - currentTarget["id"] = img.attr("rel"); - } - } - - userService.getCurrentUser().then(function(userData) { - if(callback) { - callback(currentTarget, userData); - } - }); - - } - }); - }, - - insertMediaInEditor: function(editor, img) { - if(img) { - - var hasUdi = img.udi ? true : false; - - var data = { - alt: img.altText || "", - src: (img.url) ? img.url : "nothing.jpg", - id: '__mcenew' - }; - - if (hasUdi) { - data["data-udi"] = img.udi; - } - else { - //Considering these fixed because UDI will now be used and thus - // we have no need for rel http://issues.umbraco.org/issue/U4-6228, http://issues.umbraco.org/issue/U4-6595 - data["rel"] = img.id; - data["data-id"] = img.id; - } - - editor.insertContent(editor.dom.createHTML('img', data)); - - $timeout(function () { - var imgElm = editor.dom.get('__mcenew'); - var size = editor.dom.getSize(imgElm); - - if (editor.settings.maxImageSize && editor.settings.maxImageSize !== 0) { - var newSize = imageHelper.scaleToMaxSize(editor.settings.maxImageSize, size.w, size.h); - - var s = "width: " + newSize.width + "px; height:" + newSize.height + "px;"; - editor.dom.setAttrib(imgElm, 'style', s); - editor.dom.setAttrib(imgElm, 'id', null); - - if (img.url) { - var src = img.url + "?width=" + newSize.width + "&height=" + newSize.height; - editor.dom.setAttrib(imgElm, 'data-mce-src', src); - } - } - }, 500); - } - }, - - /** - * @ngdoc method - * @name umbraco.services.tinyMceService#createUmbracoMacro - * @methodOf umbraco.services.tinyMceService - * - * @description - * Creates the insert umbrco macro tinymce plugin - * - * @param {Object} editor the TinyMCE editor instance - * @param {Object} $scope the current controller scope - */ - createInsertMacro: function (editor, $scope, callback) { - - var createInsertMacroScope = this; - - /** Adds custom rules for the macro plugin and custom serialization */ - editor.on('preInit', function (args) { - //this is requires so that we tell the serializer that a 'div' is actually allowed in the root, otherwise the cleanup will strip it out - editor.serializer.addRules('div'); - - /** This checks if the div is a macro container, if so, checks if its wrapped in a p tag and then unwraps it (removes p tag) */ - editor.serializer.addNodeFilter('div', function (nodes, name) { - for (var i = 0; i < nodes.length; i++) { - if (nodes[i].attr("class") === "umb-macro-holder" && nodes[i].parent && nodes[i].parent.name.toUpperCase() === "P") { - nodes[i].parent.unwrap(); - } - } - }); - - }); - - /** - * Because the macro gets wrapped in a P tag because of the way 'enter' works, this - * method will return the macro element if not wrapped in a p, or the p if the macro - * element is the only one inside of it even if we are deep inside an element inside the macro - */ - function getRealMacroElem(element) { - var e = $(element).closest(".umb-macro-holder"); - if (e.length > 0) { - if (e.get(0).parentNode.nodeName === "P") { - //now check if we're the only element - if (element.parentNode.childNodes.length === 1) { - return e.get(0).parentNode; - } - } - return e.get(0); - } - return null; - } - - /** Adds the button instance */ - editor.addButton('umbmacro', { - icon: 'custom icon-settings-alt', - tooltip: 'Insert macro', - onPostRender: function () { - - var ctrl = this; - var isOnMacroElement = false; - - /** - if the selection comes from a different element that is not the macro's - we need to check if the selection includes part of the macro, if so we'll force the selection - to clear to the next element since if people can select part of the macro markup they can then modify it. - */ - function handleSelectionChange() { - - if (!editor.selection.isCollapsed()) { - var endSelection = tinymce.activeEditor.selection.getEnd(); - var startSelection = tinymce.activeEditor.selection.getStart(); - //don't proceed if it's an entire element selected - if (endSelection !== startSelection) { - - //if the end selection is a macro then move the cursor - //NOTE: we don't have to handle when the selection comes from a previous parent because - // that is automatically taken care of with the normal onNodeChanged logic since the - // evt.element will be the macro once it becomes part of the selection. - var $testForMacro = $(endSelection).closest(".umb-macro-holder"); - if ($testForMacro.length > 0) { - - //it came from before so move after, if there is no after then select ourselves - var next = $testForMacro.next(); - if (next.length > 0) { - editor.selection.setCursorLocation($testForMacro.next().get(0)); - } - else { - selectMacroElement($testForMacro.get(0)); - } - - } - } - } - } - - /** helper method to select the macro element */ - function selectMacroElement(macroElement) { - - // move selection to top element to ensure we can't edit this - editor.selection.select(macroElement); - - // check if the current selection *is* the element (ie bug) - var currentSelection = editor.selection.getStart(); - if (tinymce.isIE) { - if (!editor.dom.hasClass(currentSelection, 'umb-macro-holder')) { - while (!editor.dom.hasClass(currentSelection, 'umb-macro-holder') && currentSelection.parentNode) { - currentSelection = currentSelection.parentNode; - } - editor.selection.select(currentSelection); - } - } - } - - /** - * Add a node change handler, test if we're editing a macro and select the whole thing, then set our isOnMacroElement flag. - * If we change the selection inside this method, then we end up in an infinite loop, so we have to remove ourselves - * from the event listener before changing selection, however, it seems that putting a break point in this method - * will always cause an 'infinite' loop as the caret keeps changing. - */ - function onNodeChanged(evt) { - - //set our macro button active when on a node of class umb-macro-holder - var $macroElement = $(evt.element).closest(".umb-macro-holder"); - - handleSelectionChange(); - - //set the button active - ctrl.active($macroElement.length !== 0); - - if ($macroElement.length > 0) { - var macroElement = $macroElement.get(0); - - //remove the event listener before re-selecting - editor.off('NodeChange', onNodeChanged); - - selectMacroElement(macroElement); - - //set the flag - isOnMacroElement = true; - - //re-add the event listener - editor.on('NodeChange', onNodeChanged); - } - else { - isOnMacroElement = false; - } - - } - - /** when the contents load we need to find any macros declared and load in their content */ - editor.on("LoadContent", function (o) { - - //get all macro divs and load their content - $(editor.dom.select(".umb-macro-holder.mceNonEditable")).each(function() { - createInsertMacroScope.loadMacroContent($(this), null, $scope); - }); - - }); - - /** This prevents any other commands from executing when the current element is the macro so the content cannot be edited */ - editor.on('BeforeExecCommand', function (o) { - if (isOnMacroElement) { - if (o.preventDefault) { - o.preventDefault(); - } - if (o.stopImmediatePropagation) { - o.stopImmediatePropagation(); - } - return; - } - }); - - /** This double checks and ensures you can't paste content into the rendered macro */ - editor.on("Paste", function (o) { - if (isOnMacroElement) { - if (o.preventDefault) { - o.preventDefault(); - } - if (o.stopImmediatePropagation) { - o.stopImmediatePropagation(); - } - return; - } - }); - - //set onNodeChanged event listener - editor.on('NodeChange', onNodeChanged); - - /** - * Listen for the keydown in the editor, we'll check if we are currently on a macro element, if so - * we'll check if the key down is a supported key which requires an action, otherwise we ignore the request - * so the macro cannot be edited. - */ - editor.on('KeyDown', function (e) { - if (isOnMacroElement) { - var macroElement = editor.selection.getNode(); - - //get the 'real' element (either p or the real one) - macroElement = getRealMacroElem(macroElement); - - //prevent editing - e.preventDefault(); - e.stopPropagation(); - - var moveSibling = function (element, isNext) { - var $e = $(element); - var $sibling = isNext ? $e.next() : $e.prev(); - if ($sibling.length > 0) { - editor.selection.select($sibling.get(0)); - editor.selection.collapse(true); - } - else { - //if we're moving previous and there is no sibling, then lets recurse and just select the next one - if (!isNext) { - moveSibling(element, true); - return; - } - - //if there is no sibling we'll generate a new p at the end and select it - editor.setContent(editor.getContent() + "

     

    "); - editor.selection.select($(editor.dom.getRoot()).children().last().get(0)); - editor.selection.collapse(true); - - } - }; - - //supported keys to move to the next or prev element (13-enter, 27-esc, 38-up, 40-down, 39-right, 37-left) - //supported keys to remove the macro (8-backspace, 46-delete) - //TODO: Should we make the enter key insert a line break before or leave it as moving to the next element? - if ($.inArray(e.keyCode, [13, 40, 39]) !== -1) { - //move to next element - moveSibling(macroElement, true); - } - else if ($.inArray(e.keyCode, [27, 38, 37]) !== -1) { - //move to prev element - moveSibling(macroElement, false); - } - else if ($.inArray(e.keyCode, [8, 46]) !== -1) { - //delete macro element - - //move first, then delete - moveSibling(macroElement, false); - editor.dom.remove(macroElement); - } - return ; - } - }); - - }, - - /** The insert macro button click event handler */ - onclick: function () { - - var dialogData = { - //flag for use in rte so we only show macros flagged for the editor - richTextEditor: true - }; - - //when we click we could have a macro already selected and in that case we'll want to edit the current parameters - //so we'll need to extract them and submit them to the dialog. - var macroElement = editor.selection.getNode(); - macroElement = getRealMacroElem(macroElement); - if (macroElement) { - //we have a macro selected so we'll need to parse it's alias and parameters - var contents = $(macroElement).contents(); - var comment = _.find(contents, function(item) { - return item.nodeType === 8; - }); - if (!comment) { - throw "Cannot parse the current macro, the syntax in the editor is invalid"; - } - var syntax = comment.textContent.trim(); - var parsed = macroService.parseMacroSyntax(syntax); - dialogData = { - macroData: parsed - }; - } - - if(callback) { - callback(dialogData); - } - - } - }); - }, - - insertMacroInEditor: function(editor, macroObject, $scope) { - - //put the macro syntax in comments, we will parse this out on the server side to be used - //for persisting. - var macroSyntaxComment = ""; - //create an id class for this element so we can re-select it after inserting - var uniqueId = "umb-macro-" + editor.dom.uniqueId(); - var macroDiv = editor.dom.create('div', - { - 'class': 'umb-macro-holder ' + macroObject.macroAlias + ' mceNonEditable ' + uniqueId - }, - macroSyntaxComment + 'Macro alias: ' + macroObject.macroAlias + ''); - - editor.selection.setNode(macroDiv); - - var $macroDiv = $(editor.dom.select("div.umb-macro-holder." + uniqueId)); - - //async load the macro content - this.loadMacroContent($macroDiv, macroObject, $scope); - - }, - - /** loads in the macro content async from the server */ - loadMacroContent: function($macroDiv, macroData, $scope) { - - //if we don't have the macroData, then we'll need to parse it from the macro div - if (!macroData) { - var contents = $macroDiv.contents(); - var comment = _.find(contents, function (item) { - return item.nodeType === 8; - }); - if (!comment) { - throw "Cannot parse the current macro, the syntax in the editor is invalid"; - } - var syntax = comment.textContent.trim(); - var parsed = macroService.parseMacroSyntax(syntax); - macroData = parsed; - } - - var $ins = $macroDiv.find("ins"); - - //show the throbber - $macroDiv.addClass("loading"); - - var contentId = $routeParams.id; - - //need to wrap in safe apply since this might be occuring outside of angular - angularHelper.safeApply($scope, function() { - macroResource.getMacroResultAsHtmlForEditor(macroData.macroAlias, contentId, macroData.macroParamsDictionary) - .then(function (htmlResult) { - - $macroDiv.removeClass("loading"); - htmlResult = htmlResult.trim(); - if (htmlResult !== "") { - $ins.html(htmlResult); - } - }); - }); - - }, - - createLinkPicker: function(editor, $scope, onClick) { - - function createLinkList(callback) { - return function() { - var linkList = editor.settings.link_list; - - if (typeof(linkList) === "string") { - tinymce.util.XHR.send({ - url: linkList, - success: function(text) { - callback(tinymce.util.JSON.parse(text)); - } - }); - } else { - callback(linkList); - } - }; - } - - function showDialog(linkList) { - var data = {}, selection = editor.selection, dom = editor.dom, selectedElm, anchorElm, initialText; - var win, linkListCtrl, relListCtrl, targetListCtrl; - - function linkListChangeHandler(e) { - var textCtrl = win.find('#text'); - - if (!textCtrl.value() || (e.lastControl && textCtrl.value() === e.lastControl.text())) { - textCtrl.value(e.control.text()); - } - - win.find('#href').value(e.control.value()); - } - - function buildLinkList() { - var linkListItems = [{ - text: 'None', - value: '' + editor.dom.setAttrib(imgElm, 'id', null); + }, 500); + } + }, + + /** + * @ngdoc method + * @name umbraco.services.tinyMceService#createUmbracoMacro + * @methodOf umbraco.services.tinyMceService + * + * @description + * Creates the insert umbrco macro tinymce plugin + * + * @param {Object} editor the TinyMCE editor instance + * @param {Object} $scope the current controller scope + */ + createInsertMacro: function (editor, $scope, callback) { + + var createInsertMacroScope = this; + + /** Adds custom rules for the macro plugin and custom serialization */ + editor.on('preInit', function (args) { + //this is requires so that we tell the serializer that a 'div' is actually allowed in the root, otherwise the cleanup will strip it out + editor.serializer.addRules('div'); + + /** This checks if the div is a macro container, if so, checks if its wrapped in a p tag and then unwraps it (removes p tag) */ + editor.serializer.addNodeFilter('div', function (nodes, name) { + for (var i = 0; i < nodes.length; i++) { + if (nodes[i].attr("class") === "umb-macro-holder" && nodes[i].parent && nodes[i].parent.name.toUpperCase() === "P") { + nodes[i].parent.unwrap(); + } + } + }); + + }); + + /** + * Because the macro gets wrapped in a P tag because of the way 'enter' works, this + * method will return the macro element if not wrapped in a p, or the p if the macro + * element is the only one inside of it even if we are deep inside an element inside the macro + */ + function getRealMacroElem(element) { + var e = $(element).closest(".umb-macro-holder"); + if (e.length > 0) { + if (e.get(0).parentNode.nodeName === "P") { + //now check if we're the only element + if (element.parentNode.childNodes.length === 1) { + return e.get(0).parentNode; + } + } + return e.get(0); + } + return null; + } + + /** Adds the button instance */ + editor.addButton('umbmacro', { + icon: 'custom icon-settings-alt', + tooltip: 'Insert macro', + onPostRender: function () { + + var ctrl = this; + var isOnMacroElement = false; + + /** + if the selection comes from a different element that is not the macro's + we need to check if the selection includes part of the macro, if so we'll force the selection + to clear to the next element since if people can select part of the macro markup they can then modify it. + */ + function handleSelectionChange() { + + if (!editor.selection.isCollapsed()) { + var endSelection = tinymce.activeEditor.selection.getEnd(); + var startSelection = tinymce.activeEditor.selection.getStart(); + //don't proceed if it's an entire element selected + if (endSelection !== startSelection) { + + //if the end selection is a macro then move the cursor + //NOTE: we don't have to handle when the selection comes from a previous parent because + // that is automatically taken care of with the normal onNodeChanged logic since the + // evt.element will be the macro once it becomes part of the selection. + var $testForMacro = $(endSelection).closest(".umb-macro-holder"); + if ($testForMacro.length > 0) { + + //it came from before so move after, if there is no after then select ourselves + var next = $testForMacro.next(); + if (next.length > 0) { + editor.selection.setCursorLocation($testForMacro.next().get(0)); + } else { + selectMacroElement($testForMacro.get(0)); + } + + } + } + } + } + + /** helper method to select the macro element */ + function selectMacroElement(macroElement) { + + // move selection to top element to ensure we can't edit this + editor.selection.select(macroElement); + + // check if the current selection *is* the element (ie bug) + var currentSelection = editor.selection.getStart(); + if (tinymce.isIE) { + if (!editor.dom.hasClass(currentSelection, 'umb-macro-holder')) { + while (!editor.dom.hasClass(currentSelection, 'umb-macro-holder') && currentSelection.parentNode) { + currentSelection = currentSelection.parentNode; + } + editor.selection.select(currentSelection); + } + } + } + + /** + * Add a node change handler, test if we're editing a macro and select the whole thing, then set our isOnMacroElement flag. + * If we change the selection inside this method, then we end up in an infinite loop, so we have to remove ourselves + * from the event listener before changing selection, however, it seems that putting a break point in this method + * will always cause an 'infinite' loop as the caret keeps changing. + */ + function onNodeChanged(evt) { + + //set our macro button active when on a node of class umb-macro-holder + var $macroElement = $(evt.element).closest(".umb-macro-holder"); + + handleSelectionChange(); + + //set the button active + ctrl.active($macroElement.length !== 0); + + if ($macroElement.length > 0) { + var macroElement = $macroElement.get(0); + + //remove the event listener before re-selecting + editor.off('NodeChange', onNodeChanged); + + selectMacroElement(macroElement); + + //set the flag + isOnMacroElement = true; + + //re-add the event listener + editor.on('NodeChange', onNodeChanged); + } else { + isOnMacroElement = false; + } + + } + + /** when the contents load we need to find any macros declared and load in their content */ + editor.on("LoadContent", function (o) { + + //get all macro divs and load their content + $(editor.dom.select(".umb-macro-holder.mceNonEditable")).each(function () { + createInsertMacroScope.loadMacroContent($(this), null, $scope); + }); + + }); + + /** This prevents any other commands from executing when the current element is the macro so the content cannot be edited */ + editor.on('BeforeExecCommand', function (o) { + if (isOnMacroElement) { + if (o.preventDefault) { + o.preventDefault(); + } + if (o.stopImmediatePropagation) { + o.stopImmediatePropagation(); + } + return; + } + }); + + /** This double checks and ensures you can't paste content into the rendered macro */ + editor.on("Paste", function (o) { + if (isOnMacroElement) { + if (o.preventDefault) { + o.preventDefault(); + } + if (o.stopImmediatePropagation) { + o.stopImmediatePropagation(); + } + return; + } + }); + + //set onNodeChanged event listener + editor.on('NodeChange', onNodeChanged); + + /** + * Listen for the keydown in the editor, we'll check if we are currently on a macro element, if so + * we'll check if the key down is a supported key which requires an action, otherwise we ignore the request + * so the macro cannot be edited. + */ + editor.on('KeyDown', function (e) { + if (isOnMacroElement) { + var macroElement = editor.selection.getNode(); + + //get the 'real' element (either p or the real one) + macroElement = getRealMacroElem(macroElement); + + //prevent editing + e.preventDefault(); + e.stopPropagation(); + + var moveSibling = function (element, isNext) { + var $e = $(element); + var $sibling = isNext ? $e.next() : $e.prev(); + if ($sibling.length > 0) { + editor.selection.select($sibling.get(0)); + editor.selection.collapse(true); + } else { + //if we're moving previous and there is no sibling, then lets recurse and just select the next one + if (!isNext) { + moveSibling(element, true); + return; + } + + //if there is no sibling we'll generate a new p at the end and select it + editor.setContent(editor.getContent() + "

     

    "); + editor.selection.select($(editor.dom.getRoot()).children().last().get(0)); + editor.selection.collapse(true); + + } + }; + + //supported keys to move to the next or prev element (13-enter, 27-esc, 38-up, 40-down, 39-right, 37-left) + //supported keys to remove the macro (8-backspace, 46-delete) + //TODO: Should we make the enter key insert a line break before or leave it as moving to the next element? + if ($.inArray(e.keyCode, [13, 40, 39]) !== -1) { + //move to next element + moveSibling(macroElement, true); + } else if ($.inArray(e.keyCode, [27, 38, 37]) !== -1) { + //move to prev element + moveSibling(macroElement, false); + } else if ($.inArray(e.keyCode, [8, 46]) !== -1) { + //delete macro element + + //move first, then delete + moveSibling(macroElement, false); + editor.dom.remove(macroElement); + } + return; + } + }); + + }, + + /** The insert macro button click event handler */ + onclick: function () { + + var dialogData = { + //flag for use in rte so we only show macros flagged for the editor + richTextEditor: true + }; + + //when we click we could have a macro already selected and in that case we'll want to edit the current parameters + //so we'll need to extract them and submit them to the dialog. + var macroElement = editor.selection.getNode(); + macroElement = getRealMacroElem(macroElement); + if (macroElement) { + //we have a macro selected so we'll need to parse it's alias and parameters + var contents = $(macroElement).contents(); + var comment = _.find(contents, function (item) { + return item.nodeType === 8; + }); + if (!comment) { + throw "Cannot parse the current macro, the syntax in the editor is invalid"; + } + var syntax = comment.textContent.trim(); + var parsed = macroService.parseMacroSyntax(syntax); + dialogData = { + macroData: parsed + }; + } + + if (callback) { + callback(dialogData); + } + + } + }); + }, + + insertMacroInEditor: function (editor, macroObject, $scope) { + + //put the macro syntax in comments, we will parse this out on the server side to be used + //for persisting. + var macroSyntaxComment = ""; + //create an id class for this element so we can re-select it after inserting + var uniqueId = "umb-macro-" + editor.dom.uniqueId(); + var macroDiv = editor.dom.create('div', { + 'class': 'umb-macro-holder ' + macroObject.macroAlias + ' mceNonEditable ' + uniqueId + }, + macroSyntaxComment + 'Macro alias: ' + macroObject.macroAlias + ''); + + editor.selection.setNode(macroDiv); + + var $macroDiv = $(editor.dom.select("div.umb-macro-holder." + uniqueId)); + + //async load the macro content + this.loadMacroContent($macroDiv, macroObject, $scope); + + }, + + /** loads in the macro content async from the server */ + loadMacroContent: function ($macroDiv, macroData, $scope) { + + //if we don't have the macroData, then we'll need to parse it from the macro div + if (!macroData) { + var contents = $macroDiv.contents(); + var comment = _.find(contents, function (item) { + return item.nodeType === 8; + }); + if (!comment) { + throw "Cannot parse the current macro, the syntax in the editor is invalid"; + } + var syntax = comment.textContent.trim(); + var parsed = macroService.parseMacroSyntax(syntax); + macroData = parsed; + } + + var $ins = $macroDiv.find("ins"); + + //show the throbber + $macroDiv.addClass("loading"); + + var contentId = $routeParams.id; + + //need to wrap in safe apply since this might be occuring outside of angular + angularHelper.safeApply($scope, function () { + macroResource.getMacroResultAsHtmlForEditor(macroData.macroAlias, contentId, macroData.macroParamsDictionary) + .then(function (htmlResult) { + + $macroDiv.removeClass("loading"); + htmlResult = htmlResult.trim(); + if (htmlResult !== "") { + $ins.html(htmlResult); + } + }); + }); + + }, + + createLinkPicker: function (editor, $scope, onClick) { + + function createLinkList(callback) { + return function () { + var linkList = editor.settings.link_list; + + if (typeof (linkList) === "string") { + tinymce.util.XHR.send({ + url: linkList, + success: function (text) { + callback(tinymce.util.JSON.parse(text)); + } + }); + } else { + callback(linkList); + } + }; + } + + function showDialog(linkList) { + var data = {}, + selection = editor.selection, + dom = editor.dom, + selectedElm, anchorElm, initialText; + var win, linkListCtrl, relListCtrl, targetListCtrl; + + function linkListChangeHandler(e) { + var textCtrl = win.find('#text'); + + if (!textCtrl.value() || (e.lastControl && textCtrl.value() === e.lastControl.text())) { + textCtrl.value(e.control.text()); + } + + win.find('#href').value(e.control.value()); + } + + function buildLinkList() { + var linkListItems = [{ + text: 'None', + value: '' }]; - tinymce.each(linkList, function(link) { - linkListItems.push({ - text: link.text || link.title, - value: link.value || link.url, - menu: link.menu - }); - }); + tinymce.each(linkList, function (link) { + linkListItems.push({ + text: link.text || link.title, + value: link.value || link.url, + menu: link.menu + }); + }); - return linkListItems; - } + return linkListItems; + } - function buildRelList(relValue) { - var relListItems = [{ - text: 'None', - value: '' + function buildRelList(relValue) { + var relListItems = [{ + text: 'None', + value: '' }]; - tinymce.each(editor.settings.rel_list, function(rel) { - relListItems.push({ - text: rel.text || rel.title, - value: rel.value, - selected: relValue === rel.value - }); - }); + tinymce.each(editor.settings.rel_list, function (rel) { + relListItems.push({ + text: rel.text || rel.title, + value: rel.value, + selected: relValue === rel.value + }); + }); - return relListItems; - } + return relListItems; + } - function buildTargetList(targetValue) { - var targetListItems = [{ - text: 'None', - value: '' + function buildTargetList(targetValue) { + var targetListItems = [{ + text: 'None', + value: '' }]; - if (!editor.settings.target_list) { - targetListItems.push({ - text: 'New window', - value: '_blank' - }); - } + if (!editor.settings.target_list) { + targetListItems.push({ + text: 'New window', + value: '_blank' + }); + } - tinymce.each(editor.settings.target_list, function(target) { - targetListItems.push({ - text: target.text || target.title, - value: target.value, - selected: targetValue === target.value - }); - }); + tinymce.each(editor.settings.target_list, function (target) { + targetListItems.push({ + text: target.text || target.title, + value: target.value, + selected: targetValue === target.value + }); + }); - return targetListItems; - } + return targetListItems; + } - function buildAnchorListControl(url) { - var anchorList = []; + function buildAnchorListControl(url) { + var anchorList = []; - tinymce.each(editor.dom.select('a:not([href])'), function(anchor) { - var id = anchor.name || anchor.id; + tinymce.each(editor.dom.select('a:not([href])'), function (anchor) { + var id = anchor.name || anchor.id; - if (id) { - anchorList.push({ - text: id, - value: '#' + id, - selected: url.indexOf('#' + id) !== -1 - }); - } - }); + if (id) { + anchorList.push({ + text: id, + value: '#' + id, + selected: url.indexOf('#' + id) !== -1 + }); + } + }); - if (anchorList.length) { - anchorList.unshift({ - text: 'None', - value: '' - }); + if (anchorList.length) { + anchorList.unshift({ + text: 'None', + value: '' + }); - return { - name: 'anchor', - type: 'listbox', - label: 'Anchors', - values: anchorList, - onselect: linkListChangeHandler - }; - } - } + return { + name: 'anchor', + type: 'listbox', + label: 'Anchors', + values: anchorList, + onselect: linkListChangeHandler + }; + } + } - function updateText() { - if (!initialText && data.text.length === 0) { - this.parent().parent().find('#text')[0].value(this.value()); - } - } + function updateText() { + if (!initialText && data.text.length === 0) { + this.parent().parent().find('#text')[0].value(this.value()); + } + } - selectedElm = selection.getNode(); - anchorElm = dom.getParent(selectedElm, 'a[href]'); + selectedElm = selection.getNode(); + anchorElm = dom.getParent(selectedElm, 'a[href]'); - data.text = initialText = anchorElm ? (anchorElm.innerText || anchorElm.textContent) : selection.getContent({format: 'text'}); - data.href = anchorElm ? dom.getAttrib(anchorElm, 'href') : ''; - data.target = anchorElm ? dom.getAttrib(anchorElm, 'target') : ''; - data.rel = anchorElm ? dom.getAttrib(anchorElm, 'rel') : ''; + data.text = initialText = anchorElm ? (anchorElm.innerText || anchorElm.textContent) : selection.getContent({ + format: 'text' + }); + data.href = anchorElm ? dom.getAttrib(anchorElm, 'href') : ''; + data.target = anchorElm ? dom.getAttrib(anchorElm, 'target') : ''; + data.rel = anchorElm ? dom.getAttrib(anchorElm, 'rel') : ''; - if (selectedElm.nodeName === "IMG") { - data.text = initialText = " "; - } + if (selectedElm.nodeName === "IMG") { + data.text = initialText = " "; + } - if (linkList) { - linkListCtrl = { - type: 'listbox', - label: 'Link list', - values: buildLinkList(), - onselect: linkListChangeHandler - }; - } + if (linkList) { + linkListCtrl = { + type: 'listbox', + label: 'Link list', + values: buildLinkList(), + onselect: linkListChangeHandler + }; + } - if (editor.settings.target_list !== false) { - targetListCtrl = { - name: 'target', - type: 'listbox', - label: 'Target', - values: buildTargetList(data.target) - }; - } + if (editor.settings.target_list !== false) { + targetListCtrl = { + name: 'target', + type: 'listbox', + label: 'Target', + values: buildTargetList(data.target) + }; + } - if (editor.settings.rel_list) { - relListCtrl = { - name: 'rel', - type: 'listbox', - label: 'Rel', - values: buildRelList(data.rel) - }; - } + if (editor.settings.rel_list) { + relListCtrl = { + name: 'rel', + type: 'listbox', + label: 'Rel', + values: buildRelList(data.rel) + }; + } - var injector = angular.element(document.getElementById("umbracoMainPageBody")).injector(); - var dialogService = injector.get("dialogService"); - var currentTarget = null; + var currentTarget = null; - //if we already have a link selected, we want to pass that data over to the dialog - if(anchorElm){ - var anchor = $(anchorElm); - currentTarget = { - name: anchor.attr("title"), - url: anchor.attr("href"), - target: anchor.attr("target") - }; + //if we already have a link selected, we want to pass that data over to the dialog + if (anchorElm) { + var anchor = $(anchorElm); + currentTarget = { + name: anchor.attr("title"), + url: anchor.attr("href"), + target: anchor.attr("target") + }; - //locallink detection, we do this here, to avoid poluting the dialogservice - //so the dialog service can just expect to get a node-like structure - if (currentTarget.url.indexOf("localLink:") > 0) { - var linkId = currentTarget.url.substring(currentTarget.url.indexOf(":") + 1, currentTarget.url.length - 1); - //we need to check if this is an INT or a UDI - var parsedIntId = parseInt(linkId, 10); - if (isNaN(parsedIntId)) { - //it's a UDI - currentTarget.udi = linkId; - } - else { - currentTarget.id = linkId; - } - } - } + // drop the lead char from the anchor text, if it has a value + var anchorVal = anchor[0].dataset.anchor; + if (anchorVal) { + currentTarget.anchor = anchorVal.substring(1); + } - if(onClick) { - onClick(currentTarget, anchorElm); - } + //locallink detection, we do this here, to avoid poluting the dialogservice + //so the dialog service can just expect to get a node-like structure + if (currentTarget.url.indexOf("localLink:") > 0) { + // if the current link has an anchor, it needs to be considered when getting the udi/id + // if an anchor exists, reduce the substring max by its length plus two to offset the removed prefix and trailing curly brace + var linkId = currentTarget.url.substring(currentTarget.url.indexOf(":") + 1, currentTarget.url.lastIndexOf("}")); - } + //we need to check if this is an INT or a UDI + var parsedIntId = parseInt(linkId, 10); + if (isNaN(parsedIntId)) { + //it's a UDI + currentTarget.udi = linkId; + } else { + currentTarget.id = linkId; + } + } + } - editor.addButton('link', { - icon: 'link', - tooltip: 'Insert/edit link', - shortcut: 'Ctrl+K', - onclick: createLinkList(showDialog), - stateSelector: 'a[href]' - }); + if (onClick) { + onClick(currentTarget, anchorElm); + } - editor.addButton('unlink', { - icon: 'unlink', - tooltip: 'Remove link', - cmd: 'unlink', - stateSelector: 'a[href]' - }); + } - editor.addShortcut('Ctrl+K', '', createLinkList(showDialog)); - this.showDialog = showDialog; + editor.addButton('link', { + icon: 'link', + tooltip: 'Insert/edit link', + shortcut: 'Ctrl+K', + onclick: createLinkList(showDialog), + stateSelector: 'a[href]' + }); - editor.addMenuItem('link', { - icon: 'link', - text: 'Insert link', - shortcut: 'Ctrl+K', - onclick: createLinkList(showDialog), - stateSelector: 'a[href]', - context: 'insert', - prependToContext: true - }); + editor.addButton('unlink', { + icon: 'unlink', + tooltip: 'Remove link', + cmd: 'unlink', + stateSelector: 'a[href]' + }); - }, + editor.addShortcut('Ctrl+K', '', createLinkList(showDialog)); + this.showDialog = showDialog; - insertLinkInEditor: function(editor, target, anchorElm) { + editor.addMenuItem('link', { + icon: 'link', + text: 'Insert link', + shortcut: 'Ctrl+K', + onclick: createLinkList(showDialog), + stateSelector: 'a[href]', + context: 'insert', + prependToContext: true + }); - var href = target.url; - // We want to use the Udi. If it is set, we use it, else fallback to id, and finally to null - var hasUdi = target.udi ? true : false; - var id = hasUdi ? target.udi : (target.id ? target.id : null); + }, - //Create a json obj used to create the attributes for the tag - function createElemAttributes() { - var a = { - href: href, - title: target.name, - target: target.target ? target.target : null, - rel: target.rel ? target.rel : null - }; - if (hasUdi) { - a["data-udi"] = target.udi; - } - else if (target.id) { - a["data-id"] = target.id; - } - return a; - } + /** + * @ngdoc method + * @name umbraco.services.tinyMceService#getAnchorNames + * @methodOf umbraco.services.tinyMceService + * + * @description + * From the given string, generates a string array where each item is the id attribute value from a named anchor + * 'some string with a named anchor' returns ['anchor'] + * + * @param {string} input the string to parse + */ + getAnchorNames: function (input) { + if (!input) return []; + + var anchorPattern = //gi; + var matches = input.match(anchorPattern); + var anchors = []; - function insertLink() { - if (anchorElm) { - editor.dom.setAttribs(anchorElm, createElemAttributes()); + if (matches) { + anchors = matches.map(function (v) { + return v.substring(v.indexOf('"') + 1, v.lastIndexOf('\\')); + }); + } - editor.selection.select(anchorElm); - editor.execCommand('mceEndTyping'); - } - else { - editor.execCommand('mceInsertLink', false, createElemAttributes()); - } - } + return anchors.filter(function(val, i, self) { + return self.indexOf(val) === i; + }); + }, - if (!href) { - editor.execCommand('unlink'); - return; - } + insertLinkInEditor: function (editor, target, anchorElm) { - //if we have an id, it must be a locallink:id, aslong as the isMedia flag is not set - if(id && (angular.isUndefined(target.isMedia) || !target.isMedia)){ - - href = "/{localLink:" + id + "}"; + var href = target.url; + // We want to use the Udi. If it is set, we use it, else fallback to id, and finally to null + var hasUdi = target.udi ? true : false; + var id = hasUdi ? target.udi : (target.id ? target.id : null); - insertLink(); - return; - } + // if an anchor exists, check that it is appropriately prefixed + if (target.anchor && target.anchor[0] !== '?' && target.anchor[0] !== '#') { + target.anchor = (target.anchor.indexOf('=') === -1 ? '#' : '?') + target.anchor; + } + + // the href might be an external url, so check the value for an anchor/qs + // href has the anchor re-appended later, hence the reset here to avoid duplicating the anchor + if (!target.anchor) { + var urlParts = href.split(/(#|\?)/); + if (urlParts.length === 3) { + href = urlParts[0]; + target.anchor = urlParts[1] + urlParts[2]; + } + } + + //Create a json obj used to create the attributes for the tag + function createElemAttributes() { + var a = { + href: href, + title: target.name, + target: target.target ? target.target : null, + rel: target.rel ? target.rel : null + }; - // Is email and not //user@domain.com - if (href.indexOf('@') > 0 && href.indexOf('//') === -1 && href.indexOf('mailto:') === -1) { - href = 'mailto:' + href; - insertLink(); - return; - } + if (hasUdi) { + a["data-udi"] = target.udi; + } else if (target.id) { + a["data-id"] = target.id; + } - // Is www. prefixed - if (/^\s*www\./i.test(href)) { - href = 'http://' + href; - insertLink(); - return; - } + if (target.anchor) { + a["data-anchor"] = target.anchor; + a.href = a.href + target.anchor; + } else { + a["data-anchor"] = null; + } - insertLink(); + return a; + } - } + function insertLink() { + if (anchorElm) { + editor.dom.setAttribs(anchorElm, createElemAttributes()); - }; + editor.selection.select(anchorElm); + editor.execCommand('mceEndTyping'); + } else { + editor.execCommand('mceInsertLink', false, createElemAttributes()); + } + } + + if (!href) { + editor.execCommand('unlink'); + return; + } + + //if we have an id, it must be a locallink:id, aslong as the isMedia flag is not set + if (id && (angular.isUndefined(target.isMedia) || !target.isMedia)) { + + href = "/{localLink:" + id + "}"; + + insertLink(); + return; + } + + // Is email and not //user@domain.com + if (href.indexOf('@') > 0 && href.indexOf('//') === -1 && href.indexOf('mailto:') === -1) { + href = 'mailto:' + href; + insertLink(); + return; + } + + // Is www. prefixed + if (/^\s*www\./i.test(href)) { + href = 'http://' + href; + insertLink(); + return; + } + + insertLink(); + + } + + }; } angular.module('umbraco.services').factory('tinyMceService', tinyMceService); diff --git a/src/Umbraco.Web.UI.Client/src/common/services/tree.service.js b/src/Umbraco.Web.UI.Client/src/common/services/tree.service.js index 888a067a66..9adde2fd97 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/tree.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/tree.service.js @@ -50,7 +50,7 @@ function treeService($q, treeResource, iconHelper, notificationsService, eventsS parentNode.cssClasses = []; } parentNode.cssClasses.push("no-access"); - } + } //create a method outside of the loop to return the parent - otherwise jshint blows up var funcParent = function() { @@ -263,7 +263,12 @@ function treeService($q, treeResource, iconHelper, notificationsService, eventsS if (args.node.children && args.node.children.length > 0) { args.node.expanded = true; args.node.hasChildren = true; + + if (angular.isFunction(args.node.updateNodeData)) { + args.node.updateNodeData(); + } } + return data; }, function(reason) { diff --git a/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js b/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js index 78dec2f065..2d0768e50e 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js @@ -99,6 +99,28 @@ return saveModel; }, + /** formats the display model used to display the dictionary to the model used to save the dictionary */ + formatDictionaryPostData : function(dictionary, nameIsDirty) { + var saveModel = { + parentId: dictionary.parentId, + id: dictionary.id, + name: dictionary.name, + nameIsDirty: nameIsDirty, + translations: [], + key : dictionary.key + }; + + for(var i = 0; i < dictionary.translations.length; i++) { + saveModel.translations.push({ + isoCode: dictionary.translations[i].isoCode, + languageId: dictionary.translations[i].languageId, + translation: dictionary.translations[i].translation + }); + } + + return saveModel; + }, + /** formats the display model used to display the user to the model used to save the user */ formatUserPostData: function (displayModel) { diff --git a/src/Umbraco.Web.UI.Client/src/common/services/usershelper.service.js b/src/Umbraco.Web.UI.Client/src/common/services/usershelper.service.js index 21fe84ff8d..6e20ce91ac 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/usershelper.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/usershelper.service.js @@ -8,7 +8,8 @@ { "value": 0, "name": "Active", "key": "Active", "color": "success" }, { "value": 1, "name": "Disabled", "key": "Disabled", "color": "danger" }, { "value": 2, "name": "Locked out", "key": "LockedOut", "color": "danger" }, - { "value": 3, "name": "Invited", "key": "Invited", "color": "warning" } + { "value": 3, "name": "Invited", "key": "Invited", "color": "warning" }, + { "value": 4, "name": "Inactive", "key": "Inactive", "color": "warning" } ]; angular.forEach(userStates, function (userState) { diff --git a/src/Umbraco.Web.UI.Client/src/installer/installer.service.js b/src/Umbraco.Web.UI.Client/src/installer/installer.service.js index efbb13fad4..a174de1271 100644 --- a/src/Umbraco.Web.UI.Client/src/installer/installer.service.js +++ b/src/Umbraco.Web.UI.Client/src/installer/installer.service.js @@ -21,7 +21,7 @@ angular.module("umbraco.install").factory('installerService', function($rootScop "At least 2 people have named their cat 'Umbraco'", 'On an average day, more than 1000 people download Umbraco', 'umbraco.tv is the premier source of Umbraco video tutorials to get you started', - 'You can find the world\'s friendliest CMS community at our.umbraco.org', + 'You can find the world\'s friendliest CMS community at our.umbraco.com', 'You can become a certified Umbraco developer by attending one of the official courses', 'Umbraco works really well on tablets', 'You have 100% control over your markup and design when crafting a website in Umbraco', @@ -121,7 +121,7 @@ angular.module("umbraco.install").factory('installerService', function($rootScop } }, - //loads available packages from our.umbraco.org + //loads available packages from our.umbraco.com getPackages : function(){ return $http.get(Umbraco.Sys.ServerVariables.installApiBaseUrl + "GetPackages"); }, diff --git a/src/Umbraco.Web.UI.Client/src/installer/steps/permissionsreport.html b/src/Umbraco.Web.UI.Client/src/installer/steps/permissionsreport.html index 3ced6ed678..ad9b1c9cc1 100644 --- a/src/Umbraco.Web.UI.Client/src/installer/steps/permissionsreport.html +++ b/src/Umbraco.Web.UI.Client/src/installer/steps/permissionsreport.html @@ -3,7 +3,7 @@

    In order to run umbraco, you'll need to update your permission settings. Detailed information about the correct file & folder permissions for Umbraco can be found - here. + here.

    The following report list the permissions that are currently failing. Once the permissions are fixed press the 'Go back' button to restart the installation. diff --git a/src/Umbraco.Web.UI.Client/src/installer/steps/starterkit.html b/src/Umbraco.Web.UI.Client/src/installer/steps/starterkit.html index 0b9e22a0f3..1ffbdb205b 100644 --- a/src/Umbraco.Web.UI.Client/src/installer/steps/starterkit.html +++ b/src/Umbraco.Web.UI.Client/src/installer/steps/starterkit.html @@ -12,7 +12,7 @@

  • Loading... - {{pck.name}} + {{pck.name}}
diff --git a/src/Umbraco.Web.UI.Client/src/installer/steps/user.html b/src/Umbraco.Web.UI.Client/src/installer/steps/user.html index f2abb99f17..52a2fce4bc 100644 --- a/src/Umbraco.Web.UI.Client/src/installer/steps/user.html +++ b/src/Umbraco.Web.UI.Client/src/installer/steps/user.html @@ -25,22 +25,21 @@
-
- - + + - At least {{installer.current.model.minCharLength}} characters long - - - At least {{installer.current.model.minNonAlphaNumericLength}} symbol{{installer.current.model.minNonAlphaNumericLength > 1 ? 's' : ''}} - -
+ At least {{installer.current.model.minCharLength}} characters long + + + At least {{installer.current.model.minNonAlphaNumericLength}} symbol{{installer.current.model.minNonAlphaNumericLength > 1 ? 's' : ''}} + +
diff --git a/src/Umbraco.Web.UI.Client/src/less/application/animations.less b/src/Umbraco.Web.UI.Client/src/less/application/animations.less index dae428c18a..110d3700d0 100644 --- a/src/Umbraco.Web.UI.Client/src/less/application/animations.less +++ b/src/Umbraco.Web.UI.Client/src/less/application/animations.less @@ -1,8 +1,8 @@ // Animations // ------------------------- -//Animate.css - http://daneden.me/animate -//Licensed under the MIT license - http://opensource.org/licenses/MIT +//Animate.css - https://daneden.github.io/animate.css/ +//Licensed under the MIT license - https://opensource.org/licenses/MIT //Copyright (c) 2013 Daniel Eden .animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}@-webkit-keyframes bounce{0%,100%,20%,53%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{0%,100%,20%,53%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-30px,0);-ms-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-15px,0);-ms-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);-ms-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;-ms-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes pulse{0%{-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);-ms-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}100%{-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(0.75,1.25,1);transform:scale3d(0.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes rubberBand{0%{-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);-ms-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(0.75,1.25,1);-ms-transform:scale3d(0.75,1.25,1);transform:scale3d(0.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);-ms-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);-ms-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);-ms-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{0%,100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{0%,100%{-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);-ms-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);-ms-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}100%{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);-ms-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);-ms-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);-ms-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);-ms-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}100%{-webkit-transform:rotate3d(0,0,1,0deg);-ms-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.swing{-webkit-transform-origin:top center;-ms-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes tada{0%{-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);-ms-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);-ms-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);-ms-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}100%{-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}100%{-webkit-transform:none;transform:none}}@keyframes wobble{0%{-webkit-transform:none;-ms-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);-ms-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);-ms-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);-ms-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);-ms-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);-ms-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}100%{-webkit-transform:none;-ms-transform:none;transform:none}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes bounceIn{0%,100%,20%,40%,60%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{0%,100%,20%,40%,60%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);-ms-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);-ms-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);-ms-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);-ms-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn;-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounceInDown{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInDown{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);-ms-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);-ms-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);-ms-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);-ms-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;-ms-transform:none;transform:none}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);-ms-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);-ms-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);-ms-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);-ms-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;-ms-transform:none;transform:none}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInRight{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);-ms-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);-ms-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);-ms-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);-ms-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;-ms-transform:none;transform:none}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);-ms-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);-ms-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);-ms-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);-ms-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);-ms-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);-ms-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut;-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);-ms-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);-ms-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);-ms-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);-ms-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);-ms-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);-ms-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);-ms-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);-ms-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);-ms-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);-ms-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);-ms-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);-ms-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);-ms-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);-ms-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);-ms-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);-ms-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);-ms-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);-ms-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);-ms-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-ms-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-ms-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);-ms-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px);-ms-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;-ms-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);-ms-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);-ms-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);-ms-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);-ms-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px);-ms-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);-ms-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);-ms-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);-ms-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);-ms-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}100%{-webkit-transform:perspective(400px);-ms-transform:perspective(400px);transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);-ms-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);-ms-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);-ms-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);-ms-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);-ms-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);-ms-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY;-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}100%{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);-ms-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);-ms-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);-ms-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}100%{-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{0%{opacity:1}100%{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{0%{opacity:1}100%{-webkit-transform:translate3d(100%,0,0) skewX(30deg);-ms-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{0%{-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);-ms-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}100%{-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);-ms-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);-ms-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);-ms-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);-ms-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{0%{-webkit-transform-origin:center;transform-origin:center;opacity:1}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{0%{-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;opacity:1}100%{-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);-ms-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0,0,1,45deg);transform:rotate(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0,0,1,45deg);-ms-transform:rotate(0,0,1,45deg);transform:rotate(0,0,1,45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);-ms-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);-ms-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);-ms-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);-ms-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);-ms-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translate3d(0,700px,0);-ms-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);-ms-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);-ms-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-ms-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-ms-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-ms-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-ms-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-ms-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-ms-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-ms-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-ms-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}100%{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}100%{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-ms-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-ms-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;-ms-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);-ms-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);-ms-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;-ms-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);-ms-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);-ms-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;-ms-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-ms-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-ms-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;-ms-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp} diff --git a/src/Umbraco.Web.UI.Client/src/less/application/grid.less b/src/Umbraco.Web.UI.Client/src/less/application/grid.less index 2671adba32..ff795d5ff4 100644 --- a/src/Umbraco.Web.UI.Client/src/less/application/grid.less +++ b/src/Umbraco.Web.UI.Client/src/less/application/grid.less @@ -248,13 +248,13 @@ body.umb-drawer-is-visible #mainwrapper{ #applications-tray { left: 60px; } - #navigation { + #navigation, #umb-notifications-wrapper { left: 60px; } - #contentwrapper, #contentcolumn, #umb-notifications-wrapper { + #contentwrapper, #contentcolumn { left: 30px; } - #umbracoMainPageBody .umb-modal-left.fade.in { + #umbracoMainPageBody .umb-modal-left.fade.in { margin-left: 61px; } } @@ -277,12 +277,13 @@ body.umb-drawer-is-visible #mainwrapper{ #applications-tray { left: 40px; } - #navigation { + #navigation, #umb-notifications-wrapper { left: 40px; } - #contentwrapper, #contentcolumn, #umb-notifications-wrapper { + #contentwrapper, #contentcolumn { left: 20px; } + #umbracoMainPageBody .umb-modal-left.fade.in { margin-left: 41px; width: 85%!important; diff --git a/src/Umbraco.Web.UI.Client/src/less/belle.less b/src/Umbraco.Web.UI.Client/src/less/belle.less index 90521e1ec7..a391e16635 100644 --- a/src/Umbraco.Web.UI.Client/src/less/belle.less +++ b/src/Umbraco.Web.UI.Client/src/less/belle.less @@ -114,6 +114,8 @@ @import "components/umb-grid.less"; @import "components/umb-empty-state.less"; @import "components/umb-property-editor.less"; +@import "components/umb-color-swatches.less"; +@import "components/check-circle.less"; @import "components/umb-iconpicker.less"; @import "components/umb-insert-code-box.less"; @import "components/umb-packages.less"; diff --git a/src/Umbraco.Web.UI.Client/src/less/components/application/umb-drawer.less b/src/Umbraco.Web.UI.Client/src/less/components/application/umb-drawer.less index 0fae291e72..3c979135fb 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/application/umb-drawer.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/application/umb-drawer.less @@ -55,12 +55,13 @@ /* Our badge - should be moved */ .umb-help-badge { - padding: 10px 20px 10px 35px; + padding: 10px 20px 10px 55px; background: @white; position: relative; overflow: hidden; border-radius: 3px; display: block; + margin-bottom:5px; } .umb-help-badge:hover, @@ -74,10 +75,10 @@ } .umb-help-badge__icon { - font-size: 40px; + font-size: 36px; transform: translate(0,-50%); position: absolute; - left: -15px; + left: 10px; top: 50%; color: @red-l3; } @@ -128,6 +129,14 @@ align-items: center; } +/* the outer container for each help type - tours, video etc */ +.umb-help-section + .umb-help-section { + margin-top:20px; +} + +.umb-help-section__title { + margin:0 0 10px; +} /* Help list */ @@ -135,12 +144,12 @@ list-style: none; margin-left: 0; margin-bottom: 0; - background: @white; + background: @white; border-radius: 3px; -} - -.umb-help-list:last-child { - border-bottom: none; + + [data-element*="help-tours"] & { + margin-bottom:5px; + } } .umb-help-list-item { @@ -149,20 +158,28 @@ border-bottom: 1px solid @gray-9; } -.umb-help-list-item > a, +.umb-help-list-item__group-title i { + margin-right:2px; + text-decoration: none; +} + .umb-help-list-item__content { display: flex; align-items: center; - padding: 10px 20px; + padding: 10px 20px 10px 10px; + text-decoration: none; } +.umb-help-list-item:hover, +.umb-help-list-item:focus, +.umb-help-list-item:active, .umb-help-list-item > a:hover, .umb-help-list-item > a:focus, .umb-help-list-item > a:active { text-decoration: none; .umb-help-list-item__title { - text-decoration: underline !important; + text-decoration: underline; } } @@ -191,4 +208,8 @@ .umb-help-list-item:hover .umb-help-list-item__group-title { text-decoration: underline; +} + +[data-element*="tour-"].umb-help-list-item:hover .umb-help-list-item__title { + text-decoration:none; } \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/less/components/buttons/umb-toggle.less b/src/Umbraco.Web.UI.Client/src/less/components/buttons/umb-toggle.less index 2156f75d00..73f059b4ee 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/buttons/umb-toggle.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/buttons/umb-toggle.less @@ -1,10 +1,20 @@ .umb-toggle { - display: flex; - align-items: center; + display: flex; + align-items: center; + background: none; + border: none; + padding: 0; + + &:focus { + outline: 0; + } } .umb-toggle__handler { - display: inline-block; + position: absolute; + top: 0; + left: 0; + display: block; width: 24px; height: 24px; background-color: @white; @@ -62,4 +72,4 @@ .umb-toggle__icon--right { right: 7px; color: @gray-5; -} \ No newline at end of file +} diff --git a/src/Umbraco.Web.UI.Client/src/less/components/check-circle.less b/src/Umbraco.Web.UI.Client/src/less/components/check-circle.less new file mode 100644 index 0000000000..a4c3a89c99 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/less/components/check-circle.less @@ -0,0 +1,20 @@ +.check_circle { + display: flex; + opacity: 0; + width: 20px; + height: 20px; + margin: 0 auto; + + .icon { + background-color: rgba(0,0,0,.15); + border-radius: 50%; + color: @white; + font-size: 1em; + display: flex; + width: 100%; + height: 100%; + align-items: center; + justify-content: center; + float: left; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/less/components/editor/subheader/umb-editor-sub-header.less b/src/Umbraco.Web.UI.Client/src/less/components/editor/subheader/umb-editor-sub-header.less index b94055a0d2..fb71016f90 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/editor/subheader/umb-editor-sub-header.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/editor/subheader/umb-editor-sub-header.less @@ -1,12 +1,18 @@ .umb-editor-sub-header { - padding: 15px 0; - margin-bottom: 30px; - background: @white; - display: flex; - justify-content: space-between; - margin-top: -30px; - position: relative; - top: 0; + padding: 15px 0; + margin-bottom: 30px; + background: @white; + display: flex; + justify-content: space-between; + margin-top: -30px; + position: relative; + top: 0; + + &.nested { + margin-top: 0; + margin-bottom: 0; + background: @gray-10; + } } .umb-editor-sub-header.-umb-sticky-bar { diff --git a/src/Umbraco.Web.UI.Client/src/less/components/prevalues/multivalues.less b/src/Umbraco.Web.UI.Client/src/less/components/prevalues/multivalues.less index a307e5c585..5363a8db9b 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/prevalues/multivalues.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/prevalues/multivalues.less @@ -1,5 +1,10 @@ .umb-prevalues-multivalues { width: 400px; + max-width: 100%; + + .umb-overlay & { + width: 500px; + } } .umb-prevalues-multivalues__left { @@ -27,7 +32,7 @@ .umb-prevalues-multivalues__add button { margin: 0 6px 0 0; - float: right + margin-left: auto; } .umb-prevalues-multivalues__listitem { @@ -46,6 +51,7 @@ .umb-prevalues-multivalues__listitem a { cursor: pointer; + margin-left: auto; } .umb-prevalues-multivalues__listitem input { diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-color-swatches.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-color-swatches.less new file mode 100644 index 0000000000..e27bd0d654 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-color-swatches.less @@ -0,0 +1,37 @@ +.umb-color-swatches { + + .umb-color-box { + border: none; + color: white; + cursor: pointer; + padding: 5px; + text-align: center; + text-decoration: none; + display: inline-block; + margin: 5px; + border-radius: 3px; + width: 30px; + height: 30px; + transition: box-shadow .3s; + + &:hover, &:focus { + box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); + } + + &.active { + .check_circle { + opacity: 1; + } + } + + &.umb-color-box--m { + width: 40px; + height: 40px; + + .check_circle { + width: 25px; + height: 25px; + } + } + } +} diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-grid.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-grid.less index 107c14ad86..49f0892bb0 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/umb-grid.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-grid.less @@ -537,15 +537,11 @@ .umb-grid textarea.textstring { display: block; overflow: hidden; - border: none; background: @white; outline: none; resize: none; color: @gray-3; -} - -.umb-grid .umb-cell-rte textarea.mceNoEditor { - display: none !important; + min-width: 100%; } .umb-grid .umb-cell-media .caption { @@ -567,11 +563,6 @@ width: 100%; } -.umb-grid .umb-cell-rte { - border-color: transparent; -} - - // ICONS // ------------------------- diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-group-builder.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-group-builder.less index a341c69129..50eb3c622b 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/umb-group-builder.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-group-builder.less @@ -530,6 +530,13 @@ input.umb-group-builder__group-title-input { overflow: hidden; } + .editor-validation-pattern{ + border: 1px solid @gray-7; + margin: 10px 0 0; + padding: 6px; + max-height: 32px; + } + .umb-dropdown { width: 100%; } diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-iconpicker.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-iconpicker.less index 0ecdd4f824..aa1dd8c9e7 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/umb-iconpicker.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-iconpicker.less @@ -27,11 +27,18 @@ } .umb-iconpicker-item a:hover, -.umb-iconpicker-item a:focus{ +.umb-iconpicker-item a:focus { background: @gray-10; outline: none; } +.umb-iconpicker-item.-selected { + background: @gray-10; + border: solid 1px @turquoise-d1; + border-radius: @baseBorderRadius; + box-sizing: border-box; +} + .umb-iconpicker-item a:active { background: @gray-10; } @@ -39,3 +46,32 @@ .umb-iconpicker-item i { font-size: 30px; } + + +// Color swatch + .button { + border: none; + color: white; + padding: 5px; + text-align: center; + text-decoration: none; + display: inline-block; + margin: 5px; + border-radius: 3px; + } + + // Hide Circle when not active + i.small{ + display: none; + } + + // Circle behind the checkmark + i.small.active{ + font-size: 14px; + display: inline-block; + width: 20px; + height: 20px; + border-radius: 50%; + background-color: rgba(0,0,0,.15); + float: right; + } diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-nested-content.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-nested-content.less index 4f24fcf504..514a73407c 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/umb-nested-content.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-nested-content.less @@ -1,16 +1,13 @@ -.nested-content -{ +.umb-nested-content { text-align: center; } -.nested-content--not-supported -{ +.umb-nested-content--not-supported { opacity: 0.3; pointer-events: none; } -.nested-content-overlay -{ +.umb-nested-content-overlay { position: absolute; top: 0; left: 0; @@ -19,47 +16,39 @@ z-index: 1000; } -.nested-content__item -{ +.umb-nested-content__item { position: relative; text-align: left; border-top: solid 1px transparent; - background: white; - - + background: @white; } -.nested-content__item--active:not(.nested-content__item--single) -{ - background: #f8f8f8; +.umb-nested-content__item--active:not(.umb-nested-content__item--single) { + background: @gray-10; } -.nested-content__item.ui-sortable-placeholder -{ - background: #f8f8f8; - border: 1px dashed #d9d9d9; +.umb-nested-content__item.ui-sortable-placeholder { + background: @gray-10; + border: 1px dashed @gray-8; visibility: visible !important; height: 55px; margin-top: -1px; } -.nested-content__item--single > .nested-content__content -{ +.umb-nested-content__item--single > .umb-nested-content__content { border: 0; } -.nested-content__item--single > .nested-content__content > .umb-pane -{ +.umb-nested-content__item--single > .umb-nested-content__content > .umb-pane { margin: 0; } -.nested-content__header-bar -{ +.umb-nested-content__header-bar { padding: 15px 20px; - border-bottom: 1px dashed #e0e0e0; + border-bottom: 1px dashed @gray-8; text-align: right; cursor: pointer; - background-color: white; + background-color: @white; -moz-user-select: none; -khtml-user-select: none; @@ -67,142 +56,170 @@ -o-user-select: none; } -.nested-content__heading -{ - float: left; +.umb-nested-content__heading { line-height: 20px; + position: relative; + + &.-with-icon { + padding-left: 20px; + } + + i { + color: @gray-2; + position: absolute; + left: 0; + } + + .umb-nested-content__item-name { + max-height: 20px; + text-align: left; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + display: block; + } } -.nested-content__heading i -{ - vertical-align: text-top; - color: #999; /* same icon color as the icons in the item type picker */ - margin-right: 10px; -} - -.nested-content__icons -{ - margin: -6px 0; +.umb-nested-content__icons { opacity: 0; - transition: opacity .15s ease-in-out; - -moz-transition: opacity .15s ease-in-out; - -webkit-transition: opacity .15s ease-in-out; + position: absolute; + right: 0px; + top: 2px; + background-color: @white; + padding: 5px; + + &:before { + content: ' '; + position: absolute; + display: block; + width: 30px; + left: -30px; + top: 0; + bottom: 0; + background: linear-gradient(90deg, rgba(255,255,255,0), white); + } } -.nested-content__header-bar:hover .nested-content__icons, -.nested-content__item--active > .nested-content__header-bar .nested-content__icons -{ + +.umb-nested-content__header-bar:hover .umb-nested-content__icons, +.umb-nested-content__item--active > .umb-nested-content__header-bar .umb-nested-content__icons { opacity: 1; } -.nested-content__icon, -.nested-content__icon.nested-content__icon--disabled:hover -{ +.umb-nested-content__icon, +.umb-nested-content__icon.umb-nested-content__icon--disabled:hover { display: inline-block; padding: 4px 6px; margin: 2px; cursor: pointer; - background: #fff; - border: 1px solid #b6b6b6; + background: @white; + border: 1px solid @gray-7; border-radius: 200px; text-decoration: none !important; } -.nested-content__icon:hover, -.nested-content__icon--active +.umb-nested-content__icon:hover, +.umb-nested-content__icon--active { - color: white; - background: #2e8aea; - border-color: #2e8aea; + color: @white; + background: @turquoise-d1; + border-color: @turquoise-d1; text-decoration: none; } -.nested-content__icon .icon, -.nested-content__icon.nested-content__icon--disabled:hover .icon -{ +.umb-nested-content__icon .icon, +.umb-nested-content__icon.umb-nested-content__icon--disabled:hover .icon { display: block; font-size: 16px !important; - color: #5f5f5f; + color: @gray-3; } -.nested-content__icon:hover .icon, -.nested-content__icon--active .icon -{ - color: white; +.umb-nested-content__icon:hover .icon, +.umb-nested-content__icon--active .icon { + color: @white; } -.nested-content__icon--disabled -{ +.umb-nested-content__icon--disabled { opacity: 0.3; } -.nested-content__footer-bar -{ +.umb-nested-content__footer-bar { text-align: center; padding-top: 20px; } -.nested-content__content -{ - border-bottom: 1px dashed #e0e0e0; +.umb-nested-content__content { + border-bottom: 1px dashed @gray-8; } -.nested-content__content .umb-control-group { +.umb-nested-content__content .umb-control-group { padding-bottom: 0; } -.nested-content__item.ui-sortable-helper .nested-content__content -{ +.umb-nested-content__item.ui-sortable-helper .umb-nested-content__content { display: none !important; } -.nested-content__help-text -{ +.umb-nested-content__help-text { display: inline-block; padding: 10px 20px 10px 20px; clear: both; font-size: 14px; - color: #555; - background: #f8f8f8; + color: @gray-3; + background: @gray-10; border-radius: 15px; } -.nested-content__doctypepicker table input, .nested-content__doctypepicker table select { +.umb-nested-content__doctypepicker table input, +.umb-nested-content__doctypepicker table select { width: 100%; padding-right: 0; } -.nested-content__doctypepicker table td.icon-navigation, .nested-content__doctypepicker i.nested-content__help-icon { +.umb-nested-content__doctypepicker table td.icon-navigation, +.umb-nested-content__doctypepicker i.umb-nested-content__help-icon { vertical-align: middle; - color: #CCC; + color: @gray-7; } -.nested-content__doctypepicker table td.icon-navigation:hover, .nested-content__doctypepicker i.nested-content__help-icon:hover { - color: #343434; +.umb-nested-content__doctypepicker table td.icon-navigation:hover, +.umb-nested-content__doctypepicker i.umb-nested-content__help-icon:hover { + color: @gray-2; } -.nested-content__doctypepicker i.nested-content__help-icon { +.umb-nested-content__doctypepicker i.umb-nested-content__help-icon { margin-left: 10px; } -.form-horizontal .nested-content--narrow .controls-row +.form-horizontal .umb-nested-content--narrow .controls-row { margin-left: 40% !important; } -.form-horizontal .nested-content--narrow .controls-row .umb-textstring, -.form-horizontal .nested-content--narrow .controls-row .umb-textarea +.form-horizontal .umb-nested-content--narrow .controls-row .umb-textstring, +.form-horizontal .umb-nested-content--narrow .controls-row .umb-textarea { width: 95%; } -.form-horizontal .nested-content--narrow .controls-row .umb-dropdown { +.form-horizontal .umb-nested-content--narrow .controls-row .umb-dropdown { width: 99%; } -.usky-grid.nested-content__node-type-picker .cell-tools-menu { +.usky-grid.umb-nested-content__node-type-picker .cell-tools-menu { position: relative; transform: translate(-50%, -25%); } + + +// this resolves the layout issue introduced in nested content in 7.12 with the addition of the input for link anchors +// the attribute selector ensures the change only applies to the linkpicker overlay +.form-horizontal .umb-nested-content--narrow [ng-controller*="Umbraco.Overlays.LinkPickerController"] .controls-row { + margin-left:0!important; + + .umb-textarea, .umb-textstring { + width:100%; + } +} \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-node-preview.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-node-preview.less index 9e038bd571..3d1015f972 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/umb-node-preview.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-node-preview.less @@ -1,11 +1,14 @@ .umb-node-preview { padding: 5px 0; display: flex; - max-width: 66.6%; box-sizing: border-box; border-bottom: 1px solid @gray-9; } +.umb-editor-wrapper .umb-node-preview { + max-width: 66.6%; +} + .umb-node-preview:last-of-type { border-bottom: none; } @@ -89,7 +92,6 @@ color: @turquoise-d1; font-weight: bold; padding: 5px 15px; - max-width: 66.6%; box-sizing: border-box; } @@ -97,6 +99,10 @@ color: @turquoise-d1; } +.umb-editor-wrapper .umb-node-preview-add { + max-width: 66.6%; +} + .umb-overlay, .umb-modal { .umb-node-preview { diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-table.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-table.less index 1bd2c5563d..7679fd3c24 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/umb-table.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-table.less @@ -93,7 +93,7 @@ input.umb-table__input { cursor: pointer; font-size: 14px; position: relative; - min-height: 32px; + min-height: 52px; &:hover { background-color: @gray-10; } @@ -271,4 +271,4 @@ input.umb-table__input { font-size: 20px; } -} \ No newline at end of file +} diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-tabs.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-tabs.less index cba4219b0c..e6773a3eb0 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/umb-tabs.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-tabs.less @@ -1,6 +1,6 @@ .umb-nav-tabs { position: absolute; - z-index: 10; + z-index: 999; } .umb-nav-tabs.-padding-left { diff --git a/src/Umbraco.Web.UI.Client/src/less/components/users/umb-permission.less b/src/Umbraco.Web.UI.Client/src/less/components/users/umb-permission.less index faed098fc8..9447a48217 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/users/umb-permission.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/users/umb-permission.less @@ -16,6 +16,7 @@ .umb-permission__content { display: flex; flex-direction: column; + justify-content: center; flex: 1 1 auto; cursor: pointer; } @@ -23,4 +24,4 @@ .umb-permission__description { font-size: 13px; color: @gray-5; -} \ No newline at end of file +} diff --git a/src/Umbraco.Web.UI.Client/src/less/forms.less b/src/Umbraco.Web.UI.Client/src/less/forms.less index 1a1f3bb93e..5926ea2163 100644 --- a/src/Umbraco.Web.UI.Client/src/less/forms.less +++ b/src/Umbraco.Web.UI.Client/src/less/forms.less @@ -544,6 +544,9 @@ input[type="checkbox"][readonly] { padding-left: 5px; } +div.help { + margin-top: 5px; +} // INPUT GROUPS diff --git a/src/Umbraco.Web.UI.Client/src/less/hacks.less b/src/Umbraco.Web.UI.Client/src/less/hacks.less index 29035213a2..18439b554c 100644 --- a/src/Umbraco.Web.UI.Client/src/less/hacks.less +++ b/src/Umbraco.Web.UI.Client/src/less/hacks.less @@ -20,12 +20,17 @@ } .thumbnail { - border-radius: 0px; -} + border-radius: 0; + min-width: 150px; -.thumbnail img { - max-width: 100% !important; - width: 100%; + > a { + display: block; + } + + img { + max-width: 100% !important; + width: 100%; + } } #mapCanvas img { diff --git a/src/Umbraco.Web.UI.Client/src/less/listview.less b/src/Umbraco.Web.UI.Client/src/less/listview.less index d2393efb11..284de6e844 100644 --- a/src/Umbraco.Web.UI.Client/src/less/listview.less +++ b/src/Umbraco.Web.UI.Client/src/less/listview.less @@ -157,6 +157,10 @@ /* TEMP */ +.umb-minilistview { + .umb-table-row.not-allowed { opacity: 0.6; cursor: not-allowed; } +} + .umb-listview .table-striped tbody td { position: relative } diff --git a/src/Umbraco.Web.UI.Client/src/less/main.less b/src/Umbraco.Web.UI.Client/src/less/main.less index 210af19355..b16e437cc2 100644 --- a/src/Umbraco.Web.UI.Client/src/less/main.less +++ b/src/Umbraco.Web.UI.Client/src/less/main.less @@ -182,6 +182,14 @@ h5.-black { margin-left: 0; } +label[for=""] { + cursor: default; +} + +label:not([for]) { + cursor: default; +} + /* CONTROL VALIDATION */ .umb-control-required { color: @controlRequiredColor; diff --git a/src/Umbraco.Web.UI.Client/src/less/navs.less b/src/Umbraco.Web.UI.Client/src/less/navs.less index c6fd3dde01..0a8c6913e8 100644 --- a/src/Umbraco.Web.UI.Client/src/less/navs.less +++ b/src/Umbraco.Web.UI.Client/src/less/navs.less @@ -126,6 +126,14 @@ // Make the list-items overlay the bottom border .nav-tabs > li { margin-bottom: -1px; + + &.dropdown { + margin-bottom: -3px; + + >.dropdown-toggle { + padding-bottom: 2px; + } + } } // Actual tabs (as links) .nav-tabs > li > a { diff --git a/src/Umbraco.Web.UI.Client/src/less/pages/login.less b/src/Umbraco.Web.UI.Client/src/less/pages/login.less index 5443134dd2..87a34962ab 100644 --- a/src/Umbraco.Web.UI.Client/src/less/pages/login.less +++ b/src/Umbraco.Web.UI.Client/src/less/pages/login.less @@ -5,7 +5,7 @@ width: 100%; height: 100%; position: absolute; - z-index: 10000; + z-index: 65537; top: 0; left: 0; margin: 0 !important; @@ -117,37 +117,31 @@ } .password-toggle { - position: relative; - display: block; + position: relative; + text-align: right; user-select: none; - input::-ms-clear, input::-ms-reveal { - display: none; - } - a { opacity: .5; cursor: pointer; display: inline-block; - position: absolute; - height: 1px; - width: 45px; - height: 75%; - font-size: 0; - background-repeat: no-repeat; - background-size: 50%; - background-position: center; - top: 0; - margin-left: -45px; z-index: 1; -webkit-tap-highlight-color: transparent; - } - [type="text"] + a { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath fill='%23444' d='M29.6.4C29 0 28 0 27.4.4L21 6.8c-1.4-.5-3-.8-5-.8C9 6 3 10 0 16c1.3 2.6 3 4.8 5.4 6.5l-5 5c-.5.5-.5 1.5 0 2 .3.4.7.5 1 .5s1 0 1.2-.4l27-27C30 2 30 1 29.6.4zM13 10c1.3 0 2.4 1 2.8 2L12 15.8c-1-.4-2-1.5-2-2.8 0-1.7 1.3-3 3-3zm-9.6 6c1.2-2 2.8-3.5 4.7-4.7l.7-.2c-.4 1-.6 2-.6 3 0 1.8.6 3.4 1.6 4.7l-2 2c-1.6-1.2-3-2.7-4-4.4zM24 13.8c0-.8 0-1.7-.4-2.4l-10 10c.7.3 1.6.4 2.4.4 4.4 0 8-3.6 8-8z'/%3E%3Cpath fill='%23444' d='M26 9l-2.2 2.2c2 1.3 3.6 3 4.8 4.8-1.2 2-2.8 3.5-4.7 4.7-2.7 1.5-5.4 2.3-8 2.3-1.4 0-2.6 0-3.8-.4L10 25c2 .6 4 1 6 1 7 0 13-4 16-10-1.4-2.8-3.5-5.2-6-7z'/%3E%3C/svg%3E"); - } + .password-text { + background-repeat: no-repeat; + background-size: 18px; + background-position: left center; + padding-left: 26px; - [type="password"] + a { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath fill='%23444' d='M16 6C9 6 3 10 0 16c3 6 9 10 16 10s13-4 16-10c-3-6-9-10-16-10zm8 5.3c1.8 1.2 3.4 2.8 4.6 4.7-1.2 2-2.8 3.5-4.7 4.7-3 1.5-6 2.3-8 2.3s-6-.8-8-2.3C6 19.5 4 18 3 16c1.5-2 3-3.5 5-4.7l.6-.2C8 12 8 13 8 14c0 4.5 3.5 8 8 8s8-3.5 8-8c0-1-.3-2-.6-2.6l.4.3zM16 13c0 1.7-1.3 3-3 3s-3-1.3-3-3 1.3-3 3-3 3 1.3 3 3z'/%3E%3C/svg%3E"); + &.show { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath fill='%23444' d='M16 6C9 6 3 10 0 16c3 6 9 10 16 10s13-4 16-10c-3-6-9-10-16-10zm8 5.3c1.8 1.2 3.4 2.8 4.6 4.7-1.2 2-2.8 3.5-4.7 4.7-3 1.5-6 2.3-8 2.3s-6-.8-8-2.3C6 19.5 4 18 3 16c1.5-2 3-3.5 5-4.7l.6-.2C8 12 8 13 8 14c0 4.5 3.5 8 8 8s8-3.5 8-8c0-1-.3-2-.6-2.6l.4.3zM16 13c0 1.7-1.3 3-3 3s-3-1.3-3-3 1.3-3 3-3 3 1.3 3 3z'/%3E%3C/svg%3E"); + } + + &.hide { + display: none; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath fill='%23444' d='M29.6.4C29 0 28 0 27.4.4L21 6.8c-1.4-.5-3-.8-5-.8C9 6 3 10 0 16c1.3 2.6 3 4.8 5.4 6.5l-5 5c-.5.5-.5 1.5 0 2 .3.4.7.5 1 .5s1 0 1.2-.4l27-27C30 2 30 1 29.6.4zM13 10c1.3 0 2.4 1 2.8 2L12 15.8c-1-.4-2-1.5-2-2.8 0-1.7 1.3-3 3-3zm-9.6 6c1.2-2 2.8-3.5 4.7-4.7l.7-.2c-.4 1-.6 2-.6 3 0 1.8.6 3.4 1.6 4.7l-2 2c-1.6-1.2-3-2.7-4-4.4zM24 13.8c0-.8 0-1.7-.4-2.4l-10 10c.7.3 1.6.4 2.4.4 4.4 0 8-3.6 8-8z'/%3E%3Cpath fill='%23444' d='M26 9l-2.2 2.2c2 1.3 3.6 3 4.8 4.8-1.2 2-2.8 3.5-4.7 4.7-2.7 1.5-5.4 2.3-8 2.3-1.4 0-2.6 0-3.8-.4L10 25c2 .6 4 1 6 1 7 0 13-4 16-10-1.4-2.8-3.5-5.2-6-7z'/%3E%3C/svg%3E"); + } + } } } diff --git a/src/Umbraco.Web.UI.Client/src/less/property-editors.less b/src/Umbraco.Web.UI.Client/src/less/property-editors.less index 2d317fa4a0..1855a3a6b0 100644 --- a/src/Umbraco.Web.UI.Client/src/less/property-editors.less +++ b/src/Umbraco.Web.UI.Client/src/less/property-editors.less @@ -1,885 +1,981 @@ -// -// Container styles -// -------------------------------------------------- -.umb-editor { - min-width:66.6%; -} - -.umb-editor-tiny { - width: 60px; -} - -.umb-editor-small { - width: 90px; -} - -.umb-modal .umb-editor { - width: 95%; -} - -.umb-dialog .umb-editor { - width: 95%; -} -.umb-dialog .umb-control-group .help-block { - width: 95%; -} - -.umb-codeeditor{ - width: 99%; -} - -// -// Content picker -// -------------------------------------------------- -.umb-contentpicker li a:hover .hover-hide, .umb-contentpicker li a .hover-show{ - display: none; -} -.umb-contentpicker li a:hover .hover-show{display: inline-block;} - -.umb-contentpicker-popover .search-holder { - padding: 10px; -} - -.umb-contentpicker__min-max-help { - font-size: 13px; - margin-top: 5px; - color: @gray-4; -} - -.show-validation .umb-contentpicker__min-max-help { - display: none; -} - -.umb-contentpicker small { - - &:not(:last-child) { - padding-right: 3px; - border-right: 1px solid @gray-5; - } - - a { - color: @gray-3; - } -} - -/* CODEMIRROR DATATYPE */ -div.umb-codeeditor { - border: 1px solid @gray-8; -} -div.umb-codeeditor .umb-el-wrap { - padding: 0px; -} -div.umb-codeeditor .umb-btn-toolbar { - padding: 0px; - margin: 0px; - border-bottom: @gray-8 1px solid; - background: @gray-10; -} - - -// -// RTE -// -------------------------------------------------- -.mce-tinymce{border: 1px solid @gray-8 !important; border-radius: 0px !important;} -.mce-panel{background: @gray-10 !important; border-color: @gray-8 !important;} -.mce-btn-group, .mce-btn{border: none !important; background: none !important;} -.mce-ico{font-size: 12px !important; color: @gray-1 !important;} -/* Special case to support helviticons for the tiny mce button controls */ -.mce-ico.mce-i-custom[class^="icon-"], -.mce-ico.mce-i-custom[class*=" icon-"] { - font-family: icomoon; - font-size:16px !important; -} - -/* pre-value editor */ -.rte-editor-preval .control-group .controls > div > label .mce-ico { line-height: 20px; } - - -// -// Color picker -// -------------------------------------------------- -ul.color-picker li { - padding: 2px; - margin: 3px; - border: 2px solid transparent; - width: 60px; -} -ul.color-picker li.active { - border: 2px dashed @gray-8; -} -ul.color-picker li a { - height: 50px; - display:block; - cursor:pointer; -} - -.control-group.color-picker-preval .thumbnail { - width:30px; - border:none; -} - -/* pre-value editor */ -/*.control-group.color-picker-preval:before { - content: ""; - display: inline-block; - vertical-align: middle; - height: 100%; -}*/ - -/*.control-group.color-picker-preval div.thumbnail { - display: inline-block; - vertical-align: middle; -}*/ -.control-group.color-picker-preval div.color-picker-prediv { - display: inline-block; - width: 60%; -} - -.control-group.color-picker-preval pre { - display: inline; - margin-right: 20px; - margin-left: 10px; - width: 50%; - white-space: nowrap; - overflow: hidden; - margin-bottom: 0; - vertical-align: middle; -} - -.control-group.color-picker-preval btn { - //vertical-align: middle; -} - -.control-group.color-picker-preval input[type="text"] { - min-width: 40%; - width: 40%; - display: inline-block; - margin-right: 20px; - margin-top: 1px; -} - -.control-group.color-picker-preval label { - border: solid @white 1px; - padding: 6px; -} - - -// -// Media picker -// -------------------------------------------------- -.umb-mediapicker .add-link { - display: flex; - justify-content:center; - align-items:center; - width: 120px; - text-align: center; - color: @gray-8; - border: 2px @gray-8 dashed; - text-decoration: none; - - transition: all 150ms ease-in-out; - - &:hover { - color: @turquoise-d1; - border-color: @turquoise; - } -} - -.umb-mediapicker .picked-image { - position: absolute; - bottom: 10px; - right: 10px; - opacity: 0.5; - - font-size: 24px; - color: @red; - background: @white; - - line-height: 36px; - text-align: center; - -moz-border-radius: 15px; - border-radius: 15px; - - height: 32px; - width: 32px; - overflow: hidden; - display: none; - text-decoration: none; -} - -.umb-mediapicker .add-link-square { - height: 120px; -} - - - -.umb-thumbnails { - position: relative; - display: flex; - -ms-flex-direction: row; - -webkit-flex-direction: row; - flex-direction: row; - -ms-flex-wrap: wrap; - -webkit-flex-wrap: wrap; - flex-wrap: wrap; - justify-content: flex-start; -} - -.umb-thumbnails > li.icon { - width: 14%; - text-align: center; -} - -.umb-thumbnails i{margin: auto;} -.umb-thumbnails a{ - outline: none; - border:none !important; - box-shadow:none !important; -} - - -.umb-sortable-thumbnails { - list-style-type: none; - margin: 0; - padding: 0; - display: flex; - flex-direction: row; - flex-wrap: wrap; -} - - -.umb-sortable-thumbnails li { - position: relative; - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; - flex-wrap: wrap; - padding: 2px; - margin: 5px; - background: @white; - border: 1px solid @gray-10; - max-width: 100%; -} - - -.umb-mediapicker .umb-sortable-thumbnails li { - flex-direction: column; - margin: 0 5px 5px 0; - padding: 5px; -} - -.umb-sortable-thumbnails li:hover a { - display: flex; - justify-content: center; - align-items: center; -} - -.umb-sortable-thumbnails li img { - max-width:100%; - max-height:100%; - margin:auto; - display:block; - background-image: url(../img/checkered-background.png); -} - -.umb-sortable-thumbnails li img.trashed { - opacity:0.3; -} - -.umb-sortable-thumbnails li img.noScale { - max-width: none !important; - max-height: none !important; -} - -.umb-sortable-thumbnails .umb-icon-holder { - text-align: center; -} - -.umb-sortable-thumbnails .umb-icon-holder .icon{ - font-size: 40px; - line-height: 50px; - color: @gray-3; - display: block; -} - -.umb-sortable-thumbnails .umb-sortable-thumbnails__wrapper { - width: 124px; - height: 124px; - overflow: hidden; -} - -.umb-sortable-thumbnails .umb-sortable-thumbnails__actions { - position: absolute; - bottom: 10px; - right: 10px; - text-decoration: none; - display: flex; - flex-direction: row; - opacity: 0; - visibility: hidden; -} - -.umb-sortable-thumbnails.ui-sortable:not(.ui-sortable-disabled) { - > li:not(.unsortable) { - cursor: move; - } -} - -.umb-sortable-thumbnails li:hover .umb-sortable-thumbnails__actions { - opacity: 1; - visibility: visible; -} - -.umb-sortable-thumbnails .umb-sortable-thumbnails__action { - font-size: 16px; - background: @white; - height: 25px; - width: 25px; - border-radius: 15px; - color: @gray-1; - display: flex; - justify-content: center; - align-items: center; - margin-left: 5px; - text-decoration: none; -} - -.umb-sortable-thumbnails .umb-sortable-thumbnails__action.-red { - color: @red; -} - -.umb-sortable-thumbnails .umb-sortable-thumbnails__action:hover { - text-decoration: none; -} - - -// -// Cropper -// ------------------------------------------------- - -.umb-cropper{ - position: relative; -} - -.umb-cropper img, .umb-cropper-gravity img{ - position: relative; - max-width: 100%; - height: auto; - top: 0; - left: 0; - } - - .umb-cropper img { - max-width: none; - } - - .umb-cropper .overlay, .umb-cropper-gravity .overlay { - top: 0; - left: 0; - cursor: move; - z-index: @zindexCropperOverlay; - position: absolute; -} - -.umb-cropper .viewport{ - overflow: hidden; - position: relative; - margin: auto; - max-width: 100%; - height: auto; - } - -.umb-cropper-gravity .viewport{ - overflow: hidden; - position: relative; - width: 100%; - height: 100%; -} - - -.umb-cropper .viewport:after { - content: ""; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: @zindexCropperOverlay - 1; - -moz-opacity: .75; - opacity: .75; - filter: alpha(opacity=7); - -webkit-box-shadow: inset 0 0 0 20px white,inset 0 0 0 21px rgba(0,0,0,.1),inset 0 0 20px 21px rgba(0,0,0,.2); - -moz-box-shadow: inset 0 0 0 20px white,inset 0 0 0 21px rgba(0,0,0,.1),inset 0 0 20px 21px rgba(0,0,0,.2); - box-shadow: inset 0 0 0 20px white,inset 0 0 0 21px rgba(0,0,0,.1),inset 0 0 20px 21px rgba(0,0,0,.2); -} - -.umb-cropper-gravity .overlay{ - width: 14px; - height: 14px; - text-align: center; - border-radius: 20px; - background: @turquoise; - border: 3px solid @white; - opacity: 0.8; -} - -.umb-cropper-gravity .overlay i { - font-size: 26px; - line-height: 26px; - opacity: 0.8 !important; -} - -.umb-cropper .crop-container { - text-align: center; -} - -.umb-cropper .crop-slider { - padding: 10px; - border-top: 1px solid @gray-10; - margin-top: 10px; - display: flex; - align-items: center; - justify-content: center; - flex-wrap: wrap; - @media (min-width: 769px) { - padding: 10px 50px 10px 50px; - } -} - -.umb-cropper .crop-slider i { - color: @gray-3; - flex: 0 0 25px; - padding: 0 5px; - box-sizing: border-box; -} - -.umb-cropper .crop-slider i:first-of-type { - text-align: right; -} - -.umb-cropper .crop-slider input { - flex: 0 1 auto; -} - .umb-cropper-gravity .viewport, .umb-cropper-gravity, .umb-cropper-imageholder { - display: inline-block; - max-width: 100%; - } - - .umb-cropper-imageholder { - float: left; - } - - .cropList { - display: inline-block; - position: relative; - vertical-align: top; - } - - .gravity-container .viewport { - max-width: 600px; - } - - .gravity-container .viewport:hover { - cursor: pointer; - } - - .imagecropper { - display: flex; - align-items: flex-start; - flex-direction: row; - - @media (max-width: 768px) { - flex-direction: column; - float: left; - max-width: 100%; - } - } - - .imagecropper .umb-cropper__container { - position: relative; - margin-bottom: 10px; - max-width: 100%; - border: 1px solid @gray-10; - - @media (min-width: 769px) { - width: 600px; - } - } - - .umb-close-cropper { - position: absolute; - top: 3px; - right: 3px; - cursor: pointer; - z-index: 1; - } - - .umb-close-cropper:hover { - opacity: .9; - background: @gray-10; - } - - .imagecropper .umb-sortable-thumbnails { - display: flex; - flex-direction: row; - flex-wrap: wrap; - } - - .imagecropper .umb-sortable-thumbnails li { - display: flex; - flex-direction: column; - justify-content: space-between; - padding: 8px; - margin-top: 0; - } - - .imagecropper .umb-sortable-thumbnails li.current { - border-color: @gray-8; - background: @gray-10; - color: @black; - cursor: pointer; - } - - .imagecropper .umb-sortable-thumbnails li:hover, - .imagecropper .umb-sortable-thumbnails li.current:hover { - border-color: @gray-8; - background: @gray-10; - color: @black; - cursor: pointer; - opacity: .95; - } - - .imagecropper .umb-sortable-thumbnails li .crop-name, - .imagecropper .umb-sortable-thumbnails li .crop-size { - display: block; - text-align: left; - font-size: 13px; - line-height: 1; - } - - .imagecropper .umb-sortable-thumbnails li .crop-name { - font-weight: bold; - margin: 10px 0 5px; - } - - .imagecropper .umb-sortable-thumbnails li .crop-size { - font-size: 10px; - font-style: italic; - margin: 0 0 5px; - } - - .btn-crop-delete { - display: block; - text-align: left; - } - -// -// folder-browser -// -------------------------------------------------- -.umb-folderbrowser .add-link{ - display: inline-block; - height: 120px; - width: 120px; - text-align: center; - border: 1px @gray-10 dashed; - line-height: 120px -} - -.umb-upload-drop-zone{ - margin-bottom:5px; -} - -.umb-upload-drop-zone .info, .umb-upload-button-big{ - display: block; - padding: 20px; - opacity: 1; - border: 1px dashed @gray-8; - background: none; - text-align: center; - font-size: 14px; - color: @gray-8; -} - -.umb-upload-button-big:hover{color: @gray-8;} - -.umb-upload-drop-zone .info i.icon, .umb-upload-button-big i.icon{ - font-size: 55px; - line-height: 70px -} - -.umb-upload-button-big {display: block} -.umb-upload-button-big input { - left: 0; - bottom: 0; - height: 100%; - width: 100%; -} - - - -// -// Photo folder styling -// -------------------------------------------------- - -.umb-photo-folder .picrow{ - overflow-y: hidden; - position: relative; -} - - - -.umb-photo-folder .picrow div, .umb-photo-preview{ - margin: 0px; - padding: 0px; - border: none; - display: inline-block; - vertical-align: top; - position: relative; -} - - - -.umb-photo-folder .picrow div a:first-child { - width:100%; - height:100%; -} - -.umb-photo-folder .picrow div.umb-photo { - width:100%; - height:100%; - background-color: @gray-10; -} - -.umb-photo-folder a:hover{text-decoration: none} -.umb-photo-folder .umb-non-thumbnail{ - text-align: center; - vertical-align: middle; - font-size: 12px; - background: @gray-10; - color: @black; - text-decoration: none; -} - -.umb-photo-folder .selector-overlay{ - display: none; -} - -//this is a temp hack, to provide selectors in the dialog: -.umb-photo-folder .pic:hover .selector-overlay { - position: absolute; - bottom: 0px; - left: 0px; - right: 0px; - padding: 5px; - background: @black; - z-index: 100; - display: block; - text-align: center; - color: @white; - opacity: 0.4; - text-decoration:none; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.umb-photo-folder .umb-non-thumbnail i{ - color: @gray-8; - font-size: 50px; - line-height: 60px; - display: block; - margin: auto; - /*vertically aligns */ - position: relative; - top: 50%; - transform: translateY(-50%); -} - -.umb-photo-folder .umb-non-thumbnail span{ - position: absolute; - display: block; - margin: auto; - width: 100%; - top: 20px; -} - -.umb-photo-folder .selected{ - position: relative; -} - -.umb-photo-folder .selected:before{ - content: "\e165"; - font-family: Icomoon; - - position: absolute; - bottom: 10px; - right: 10px; - - font-size: 24px; - color: @black; - opacity: 0.5; - background: @white; - - line-height: 36px; - text-align: center; - -moz-border-radius: 15px; - border-radius: 15px; - - height: 32px; - width: 32px; - overflow: hidden; - display: block; - z-index: 100; -} - - -// -// File upload -// -------------------------------------------------- -.umb-fileupload .preview { - border-radius: 5px; - border: 1px solid @gray-6; - padding: 3px; - background: @gray-9; - float: left; - margin-right: 30px; - margin-bottom: 30px; -} - -.umb-fileupload ul { - list-style: none; - vertical-align: middle; - margin-bottom: 0px; -} - -.umb-fileupload label { - vertical-align: middle; - padding-left: 7px; - font-weight: normal; -} - -.umb-fileupload .preview-file { - color: @gray-4; - height: 45px; - width: 55px; - text-align: center; - text-transform: uppercase; - font-size: 10px; - padding-top: 27px; -} - -.umb-fileupload .file-icon { - text-align: center; - display: block; - position: relative; - padding: 5px 0; - - > .icon { - font-size: 70px; - line-height: 110%; - color: @gray-4; - text-align: center; - } - - > span { - color: @white; - background: @gray-4; - padding: 1px 3px; - font-size: 12px; - line-height: 130%; - position: absolute; - top: 45px; - left: 110px; - } -} - -.umb-fileupload input { - font-size: 12px; - line-height: 1; -} - -// -// Member group picker -// -------------------------------------------------- - -.umb-member-group-box { - width: 45%; -} -.umb-member-group-box:nth-child(1){ - float:left; -} -.umb-member-group-box:nth-child(2){ - float:right; -} - -// -// Related links -// -------------------------------------------------- -.umb-relatedlinks table > tr > td { word-wrap:break-word; word-break: break-all; border-bottom: 1px solid transparent; } -.umb-relatedlinks .handle { cursor:move; } -.umb-relatedlinks table > tbody > tr.unsortable .handle { cursor:default; } - -.umb-relatedlinks table td.col-sort { width: 20px; } -.umb-relatedlinks table td.col-caption { min-width: 200px; } -.umb-relatedlinks table td.col-link { min-width: 200px; } -.umb-relatedlinks table td.col-actions { min-width: 120px; } - -.umb-relatedlinks table td.col-caption .control-wrapper, -.umb-relatedlinks table td.col-link .control-wrapper { display: flex; } - -.umb-relatedlinks table td.col-caption .control-wrapper input[type="text"], -.umb-relatedlinks table td.col-link .control-wrapper input[type="text"] { width: auto; flex: 1; } - -/* sortable placeholder */ -.umb-relatedlinks .sortable-placeholder { - background-color: @tableBackgroundAccent; - display: table-row; -} -.umb-relatedlinks .sortable-placeholder > td { - display: table-cell; - padding: 8px; -} -.umb-relatedlinks .ui-sortable-helper { - display: table-row; - background-color: @white; - opacity: 0.7; -} -.umb-relatedlinks .ui-sortable-helper > td { - display: table-cell; - border-bottom: 1px solid @tableBorder; -} - - -// -// Tags -// -------------------------------------------------- -.umb-tags{border: @gray-10 solid 1px; padding: 10px; font-size: 13px; text-shadow: none;} -.umb-tags .tag{cursor: pointer; margin: 7px; padding: 7px; background: @turquoise} -.umb-tags .tag i{padding: 2px;} -.umb-tags input{border: none; background: @white} - -// -// Date/time picker -// -------------------------------------------------- -.bootstrap-datetimepicker-widget .btn{padding: 0;} -.bootstrap-datetimepicker-widget .picker-switch .btn{ background: none; border: none;} -.umb-datepicker .input-append .add-on{cursor: pointer;} -.umb-datepicker p {margin-top:10px;} -.umb-datepicker p a{color: @gray-3;} - -// -// Code mirror - even though this isn't a proprety editor right now, it could be so I'm putting the styles here -// -------------------------------------------------- - -.CodeMirror, .CodeMirror-scroll { - height: 100%; - min-height:200px; -} - -// -// Nested boolean (e.g. list view bulk action permissions) -// ---------------------=====----------------------------- -.umb-nested-boolean label {margin-bottom: 8px; float: left; width: 320px;} -.umb-nested-boolean label span {float: left; width: 80%;} -.umb-nested-boolean label input[type='checkbox'] {margin-right: 10px; float: left;} +// +// Container styles +// -------------------------------------------------- +.umb-editor { + min-width:66.6%; + + &-pull { + float:left; + width:66.6%; + } + + &-push { + float:right; + } +} + +.umb-editor-tiny { + width: 60px; + + &.umb-editor-push { + width:30%; + min-width:0; + } +} + +.umb-editor-small { + width: 90px; +} + +.umb-modal .umb-editor { + width: 95%; +} + +.umb-dialog .umb-editor { + width: 95%; +} +.umb-dialog .umb-control-group .help-block { + width: 95%; +} + +.umb-codeeditor{ + width: 99%; +} + +// displays property inline with preceeding +.umb-property { + &--pull { + float:left; + width:60%; + } + + &--push { + float:right; + width:35%; + } + + &--pull, &--push { + .umb-editor { + min-width:0; + width:100%; + } + } +} + + +// +// Content picker +// -------------------------------------------------- +.umb-contentpicker li a:hover .hover-hide, .umb-contentpicker li a .hover-show{ + display: none; +} +.umb-contentpicker li a:hover .hover-show{display: inline-block;} + +.umb-contentpicker-popover .search-holder { + padding: 10px; +} + +.umb-contentpicker__min-max-help { + font-size: 13px; + margin-top: 5px; + color: @gray-4; +} + +.show-validation .umb-contentpicker__min-max-help { + display: none; +} + +.umb-contentpicker small { + + &:not(:last-child) { + padding-right: 3px; + border-right: 1px solid @gray-5; + } + + a { + color: @gray-3; + } +} + +/* CODEMIRROR DATATYPE */ +div.umb-codeeditor { + border: 1px solid @gray-8; +} +div.umb-codeeditor .umb-el-wrap { + padding: 0px; +} +div.umb-codeeditor .umb-btn-toolbar { + padding: 0px; + margin: 0px; + border-bottom: @gray-8 1px solid; + background: @gray-10; +} + + +// +// RTE +// -------------------------------------------------- +.mce-tinymce{border: 1px solid @gray-8 !important; border-radius: 0px !important;} +.mce-panel{background: @gray-10 !important; border-color: @gray-8 !important;} +.mce-btn-group, .mce-btn{border: none !important; background: none !important;} +.mce-ico{font-size: 12px !important; color: @gray-1 !important;} +/* Special case to support helviticons for the tiny mce button controls */ +.mce-ico.mce-i-custom[class^="icon-"], +.mce-ico.mce-i-custom[class*=" icon-"] { + font-family: icomoon; + font-size:16px !important; +} + +/* pre-value editor */ +.rte-editor-preval .control-group .controls > div > label .mce-ico { line-height: 20px; } + + +// +// Color picker +// -------------------------------------------------- +ul.color-picker li { + padding: 2px; + margin: 3px; + border: 2px solid transparent; + width: 60px; + + &.active { + .check_circle { + opacity: 1; + } + } + + .thumbnail{ + min-width: auto; + width: inherit; + padding: 0; + } + + a { + height: 50px; + display:flex; + align-items: center; + justify-content: center; + cursor:pointer; + margin: 0 0 5px; + } +} + +/* pre-value editor */ +.control-group.color-picker-preval { + .thumbnail { + width: 36px; + min-width: auto; + border: none; + cursor: move; + border-radius: 3px; + } + + .handle { + float: left; + display: inline-flex; + margin: 5px 3px 5px 0; + } + + div.color-picker-prediv { + display: inline-flex; + align-items: center; + max-width: 80%; + + pre { + display: inline-flex; + font-family: monospace; + margin-right: 10px; + margin-left: 10px; + white-space: nowrap; + overflow: hidden; + margin-bottom: 0; + vertical-align: middle; + padding-top: 7px; + padding-bottom: 7px; + background: #f7f7f7; + flex: 0 0 auto; + } + + span { + margin-left: 5px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + } + + input[type="text"] { + display: flex; + flex: 1 1 100px; + margin-top: 1px; + margin-right: 15px; + min-width: auto; + width: auto; + } + + .sp-replacer { + display: inline-flex; + margin-right: 18px; + } + + label { + border: 1px solid #fff; + padding: 7px 10px; + font-family: monospace; + border: 1px solid #dfdfe1; + background: #f7f7f7; + margin: 0 15px 0 0; + border-radius: 3px; + } +} + + +// +// Media picker +// -------------------------------------------------- +.umb-mediapicker .add-link { + display: flex; + justify-content:center; + align-items:center; + width: 120px; + text-align: center; + color: @gray-8; + border: 2px @gray-8 dashed; + text-decoration: none; + + transition: all 150ms ease-in-out; + + &:hover { + color: @turquoise-d1; + border-color: @turquoise; + } +} + +.umb-mediapicker .picked-image { + position: absolute; + bottom: 10px; + right: 10px; + opacity: 0.5; + + font-size: 24px; + color: @red; + background: @white; + + line-height: 36px; + text-align: center; + -moz-border-radius: 15px; + border-radius: 15px; + + height: 32px; + width: 32px; + overflow: hidden; + display: none; + text-decoration: none; +} + +.umb-mediapicker .add-link-square { + height: 120px; +} + + + +.umb-thumbnails { + position: relative; + display: flex; + -ms-flex-direction: row; + -webkit-flex-direction: row; + flex-direction: row; + -ms-flex-wrap: wrap; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; + justify-content: flex-start; +} + +.umb-thumbnails > li.icon { + width: 14%; + text-align: center; +} + +.umb-thumbnails i{margin: auto;} +.umb-thumbnails a{ + outline: none; + border:none !important; + box-shadow:none !important; +} + + +.umb-sortable-thumbnails { + list-style-type: none; + margin: 0; + padding: 0; + display: flex; + flex-direction: row; + flex-wrap: wrap; +} + + +.umb-sortable-thumbnails li { + position: relative; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + flex-wrap: wrap; + padding: 2px; + margin: 5px; + background: @white; + border: 1px solid @gray-10; + max-width: 100%; +} + + +.umb-mediapicker .umb-sortable-thumbnails li { + flex-direction: column; + margin: 0 5px 5px 0; + padding: 5px; +} + +.umb-sortable-thumbnails li:hover a { + display: flex; + justify-content: center; + align-items: center; +} + +.umb-sortable-thumbnails li img { + max-width:100%; + max-height:100%; + margin:auto; + display:block; + background-image: url(../img/checkered-background.png); +} + +.umb-sortable-thumbnails li img.trashed { + opacity:0.3; +} + +.umb-sortable-thumbnails li img.noScale { + max-width: none !important; + max-height: none !important; +} + +.umb-sortable-thumbnails .umb-icon-holder { + text-align: center; +} + +.umb-sortable-thumbnails .umb-icon-holder .icon{ + font-size: 40px; + line-height: 50px; + color: @gray-3; + display: block; +} + +.umb-sortable-thumbnails .umb-sortable-thumbnails__wrapper { + width: 124px; + height: 124px; + overflow: hidden; +} + +.umb-sortable-thumbnails .umb-sortable-thumbnails__actions { + position: absolute; + bottom: 10px; + right: 10px; + text-decoration: none; + display: flex; + flex-direction: row; + opacity: 0; + visibility: hidden; +} + +.umb-sortable-thumbnails.ui-sortable:not(.ui-sortable-disabled) { + > li:not(.unsortable) { + cursor: move; + } +} + +.umb-sortable-thumbnails li:hover .umb-sortable-thumbnails__actions { + opacity: 1; + visibility: visible; +} + +.umb-sortable-thumbnails .umb-sortable-thumbnails__action { + font-size: 16px; + background: @white; + height: 25px; + width: 25px; + border-radius: 15px; + color: @gray-1; + display: flex; + justify-content: center; + align-items: center; + margin-left: 5px; + text-decoration: none; +} + +.umb-sortable-thumbnails .umb-sortable-thumbnails__action.-red { + color: @red; +} + +.umb-sortable-thumbnails .umb-sortable-thumbnails__action:hover { + text-decoration: none; +} + + +// +// Cropper +// ------------------------------------------------- + +.umb-cropper{ + position: relative; +} + +.umb-cropper img, .umb-cropper-gravity img{ + position: relative; + max-width: 100%; + height: auto; + top: 0; + left: 0; + } + + .umb-cropper img { + max-width: none; + } + + .umb-cropper .overlay, .umb-cropper-gravity .overlay { + top: 0; + left: 0; + cursor: move; + z-index: @zindexCropperOverlay; + position: absolute; +} + +.umb-cropper .viewport{ + overflow: hidden; + position: relative; + margin: auto; + max-width: 100%; + height: auto; + } + +.umb-cropper-gravity .viewport{ + overflow: hidden; + position: relative; + width: 100%; + height: 100%; +} + + +.umb-cropper .viewport:after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: @zindexCropperOverlay - 1; + -moz-opacity: .75; + opacity: .75; + filter: alpha(opacity=7); + -webkit-box-shadow: inset 0 0 0 20px white,inset 0 0 0 21px rgba(0,0,0,.1),inset 0 0 20px 21px rgba(0,0,0,.2); + -moz-box-shadow: inset 0 0 0 20px white,inset 0 0 0 21px rgba(0,0,0,.1),inset 0 0 20px 21px rgba(0,0,0,.2); + box-shadow: inset 0 0 0 20px white,inset 0 0 0 21px rgba(0,0,0,.1),inset 0 0 20px 21px rgba(0,0,0,.2); +} + +.umb-cropper-gravity .overlay{ + width: 14px; + height: 14px; + text-align: center; + border-radius: 20px; + background: @turquoise; + border: 3px solid @white; + opacity: 0.8; +} + +.umb-cropper-gravity .overlay i { + font-size: 26px; + line-height: 26px; + opacity: 0.8 !important; +} + +.umb-cropper .crop-container { + text-align: center; +} + +.umb-cropper .crop-slider { + padding: 10px; + border-top: 1px solid @gray-10; + margin-top: 10px; + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + @media (min-width: 769px) { + padding: 10px 50px 10px 50px; + } +} + +.umb-cropper .crop-slider i { + color: @gray-3; + flex: 0 0 25px; + padding: 0 5px; + box-sizing: border-box; +} + +.umb-cropper .crop-slider i:first-of-type { + text-align: right; +} + +.umb-cropper .crop-slider input { + flex: 0 1 auto; +} + .umb-cropper-gravity .viewport, .umb-cropper-gravity, .umb-cropper-imageholder { + display: inline-block; + max-width: 100%; + } + + .umb-cropper-imageholder { + float: left; + } + + .cropList { + display: inline-block; + position: relative; + vertical-align: top; + } + + .gravity-container .viewport { + max-width: 600px; + } + + .gravity-container .viewport:hover { + cursor: pointer; + } + + .imagecropper { + display: flex; + align-items: flex-start; + flex-direction: row; + + @media (max-width: 768px) { + flex-direction: column; + float: left; + max-width: 100%; + } + } + + .imagecropper .umb-cropper__container { + position: relative; + margin-bottom: 10px; + max-width: 100%; + border: 1px solid @gray-10; + + @media (min-width: 769px) { + width: 600px; + } + } + + .umb-close-cropper { + position: absolute; + top: 3px; + right: 3px; + cursor: pointer; + z-index: 1; + } + + .umb-close-cropper:hover { + opacity: .9; + background: @gray-10; + } + + .imagecropper .umb-sortable-thumbnails { + display: flex; + flex-direction: row; + flex-wrap: wrap; + } + + .imagecropper .umb-sortable-thumbnails li { + display: flex; + flex-direction: column; + justify-content: space-between; + padding: 8px; + margin-top: 0; + } + + .imagecropper .umb-sortable-thumbnails li.current { + border-color: @gray-8; + background: @gray-10; + color: @black; + cursor: pointer; + } + + .imagecropper .umb-sortable-thumbnails li:hover, + .imagecropper .umb-sortable-thumbnails li.current:hover { + border-color: @gray-8; + background: @gray-10; + color: @black; + cursor: pointer; + opacity: .95; + } + + .imagecropper .umb-sortable-thumbnails li .crop-name, + .imagecropper .umb-sortable-thumbnails li .crop-size { + display: block; + text-align: left; + font-size: 13px; + line-height: 1; + } + + .imagecropper .umb-sortable-thumbnails li .crop-name { + font-weight: bold; + margin: 10px 0 5px; + } + + .imagecropper .umb-sortable-thumbnails li .crop-size { + font-size: 10px; + font-style: italic; + margin: 0 0 5px; + } + + .btn-crop-delete { + display: block; + text-align: left; + } + +// +// folder-browser +// -------------------------------------------------- +.umb-folderbrowser .add-link{ + display: inline-block; + height: 120px; + width: 120px; + text-align: center; + border: 1px @gray-10 dashed; + line-height: 120px +} + +.umb-upload-drop-zone{ + margin-bottom:5px; +} + +.umb-upload-drop-zone .info, .umb-upload-button-big{ + display: block; + padding: 20px; + opacity: 1; + border: 1px dashed @gray-8; + background: none; + text-align: center; + font-size: 14px; + color: @gray-8; +} + +.umb-upload-button-big:hover{color: @gray-8;} + +.umb-upload-drop-zone .info i.icon, .umb-upload-button-big i.icon{ + font-size: 55px; + line-height: 70px +} + +.umb-upload-button-big {display: block} +.umb-upload-button-big input { + left: 0; + bottom: 0; + height: 100%; + width: 100%; +} + + + +// +// Photo folder styling +// -------------------------------------------------- + +.umb-photo-folder .picrow{ + overflow-y: hidden; + position: relative; +} + + + +.umb-photo-folder .picrow div, .umb-photo-preview{ + margin: 0px; + padding: 0px; + border: none; + display: inline-block; + vertical-align: top; + position: relative; +} + + + +.umb-photo-folder .picrow div a:first-child { + width:100%; + height:100%; +} + +.umb-photo-folder .picrow div.umb-photo { + width:100%; + height:100%; + background-color: @gray-10; +} + +.umb-photo-folder a:hover{text-decoration: none} +.umb-photo-folder .umb-non-thumbnail{ + text-align: center; + vertical-align: middle; + font-size: 12px; + background: @gray-10; + color: @black; + text-decoration: none; +} + +.umb-photo-folder .selector-overlay{ + display: none; +} + +//this is a temp hack, to provide selectors in the dialog: +.umb-photo-folder .pic:hover .selector-overlay { + position: absolute; + bottom: 0px; + left: 0px; + right: 0px; + padding: 5px; + background: @black; + z-index: 100; + display: block; + text-align: center; + color: @white; + opacity: 0.4; + text-decoration:none; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.umb-photo-folder .umb-non-thumbnail i{ + color: @gray-8; + font-size: 50px; + line-height: 60px; + display: block; + margin: auto; + /*vertically aligns */ + position: relative; + top: 50%; + transform: translateY(-50%); +} + +.umb-photo-folder .umb-non-thumbnail span{ + position: absolute; + display: block; + margin: auto; + width: 100%; + top: 20px; +} + +.umb-photo-folder .selected{ + position: relative; +} + +.umb-photo-folder .selected:before{ + content: "\e165"; + font-family: Icomoon; + + position: absolute; + bottom: 10px; + right: 10px; + + font-size: 24px; + color: @black; + opacity: 0.5; + background: @white; + + line-height: 36px; + text-align: center; + -moz-border-radius: 15px; + border-radius: 15px; + + height: 32px; + width: 32px; + overflow: hidden; + display: block; + z-index: 100; +} + + +// +// File upload +// -------------------------------------------------- +.umb-fileupload .preview { + border-radius: 5px; + border: 1px solid @gray-6; + padding: 3px; + background: @gray-9; + float: left; + margin-right: 30px; + margin-bottom: 30px; +} + +.umb-fileupload ul { + list-style: none; + vertical-align: middle; + margin-bottom: 0px; +} + +.umb-fileupload label { + vertical-align: middle; + padding-left: 7px; + font-weight: normal; +} + +.umb-fileupload .preview-file { + color: @gray-4; + height: 45px; + width: 55px; + text-align: center; + text-transform: uppercase; + font-size: 10px; + padding-top: 27px; +} + +.umb-fileupload .file-icon { + text-align: center; + display: block; + position: relative; + padding: 5px 0; + + > .icon { + font-size: 70px; + line-height: 110%; + color: @gray-4; + text-align: center; + } + + > span { + color: @white; + background: @gray-4; + padding: 1px 3px; + font-size: 12px; + line-height: 130%; + position: absolute; + top: 45px; + left: 110px; + } +} + +.umb-fileupload input { + font-size: 12px; + line-height: 1; +} + +// +// Member group picker +// -------------------------------------------------- + +.umb-member-group-box { + width: 45%; +} +.umb-member-group-box:nth-child(1){ + float:left; +} +.umb-member-group-box:nth-child(2){ + float:right; +} + +// +// Related links +// -------------------------------------------------- +.umb-relatedlinks table > tr > td { word-wrap:break-word; word-break: break-all; border-bottom: 1px solid transparent; } +.umb-relatedlinks .handle { cursor:move; } +.umb-relatedlinks table > tbody > tr.unsortable .handle { cursor:default; } + +.umb-relatedlinks table td.col-sort { width: 20px; } +.umb-relatedlinks table td.col-caption { min-width: 200px; } +.umb-relatedlinks table td.col-link { min-width: 200px; } +.umb-relatedlinks table td.col-actions { min-width: 120px; } + +.umb-relatedlinks table td.col-caption .control-wrapper, +.umb-relatedlinks table td.col-link .control-wrapper { display: flex; } + +.umb-relatedlinks table td.col-caption .control-wrapper input[type="text"], +.umb-relatedlinks table td.col-link .control-wrapper input[type="text"] { width: auto; flex: 1; } + +/* sortable placeholder */ +.umb-relatedlinks .sortable-placeholder { + background-color: @tableBackgroundAccent; + display: table-row; +} +.umb-relatedlinks .sortable-placeholder > td { + display: table-cell; + padding: 8px; +} +.umb-relatedlinks .ui-sortable-helper { + display: table-row; + background-color: @white; + opacity: 0.7; +} +.umb-relatedlinks .ui-sortable-helper > td { + display: table-cell; + border-bottom: 1px solid @tableBorder; +} + + +// +// Tags +// -------------------------------------------------- +.umb-tags{ + border: @gray-10 solid 1px; + padding: 10px; + font-size: 13px; + text-shadow: none; + + .tag{ + cursor: default; + margin: 7px; + padding: 10px; + background: @turquoise; + position: relative; + + .icon-trash{ + cursor: pointer; + padding: 2px; + font-size: 12px; + position: relative; + right: -6px; + } + + .umb_confirm-action__overlay.-left{ + top: 6px; + left: auto; + right: 15px; + } + } + + input{ + border: none; + background: @white; + } +} + +// +// Date/time picker +// -------------------------------------------------- +.bootstrap-datetimepicker-widget .btn{padding: 0;} +.bootstrap-datetimepicker-widget .picker-switch .btn{ background: none; border: none;} +.umb-datepicker .input-append .add-on{cursor: pointer;} +.umb-datepicker p {margin-top:10px;} +.umb-datepicker p a{color: @gray-3;} + +// +// Code mirror - even though this isn't a proprety editor right now, it could be so I'm putting the styles here +// -------------------------------------------------- + +.CodeMirror, .CodeMirror-scroll { + height: 100%; + min-height:200px; +} + +// +// Nested boolean (e.g. list view bulk action permissions) +// ---------------------=====----------------------------- +.umb-nested-boolean label {margin-bottom: 8px; float: left; width: 320px;} +.umb-nested-boolean label span {float: left; width: 80%;} +.umb-nested-boolean label input[type='checkbox'] {margin-right: 10px; float: left;} diff --git a/src/Umbraco.Web.UI.Client/src/less/tree.less b/src/Umbraco.Web.UI.Client/src/less/tree.less index c9ab44ea21..acba5f1ac8 100644 --- a/src/Umbraco.Web.UI.Client/src/less/tree.less +++ b/src/Umbraco.Web.UI.Client/src/less/tree.less @@ -174,7 +174,7 @@ } .umb-tree-icon { - cursor: pointer; + cursor: pointer; } .umb-tree i.noSpr { @@ -202,7 +202,7 @@ .umb-tree div.umb-search-group { position: inherit; - display: inherit; + display: inherit; } .umb-tree div.umb-search-group:hover { @@ -549,4 +549,4 @@ body.touch .umb-tree li div.l div { body.touch .umb-actions a { padding: 7px 25px 7px 20px; font-size: 110%; -} \ No newline at end of file +} diff --git a/src/Umbraco.Web.UI.Client/src/less/variables.less b/src/Umbraco.Web.UI.Client/src/less/variables.less index d72a9085ec..3ea09e02fd 100644 --- a/src/Umbraco.Web.UI.Client/src/less/variables.less +++ b/src/Umbraco.Web.UI.Client/src/less/variables.less @@ -1,442 +1,509 @@ -// -// Variables -// -------------------------------------------------- - - -// Global values -// -------------------------------------------------- - - -// Grays -// ------------------------- -@black: #000; -@blackLight: #1d1d1d; -@grayDarker: #222; -@grayDark: #343434; -@gray: #555; -@grayMed: #7f7f7f; -@grayLight: #d9d9d9; -@grayLighter: #f8f8f8; -@white: #fff; - - -// Accent colors -// ------------------------- -@blue: #2e8aea; -@blueDark: #0064cd; -@blueLight: #add8e6; -@green: #46a546; -@red: #9d261d; -@yellow: #ffc40d; -@orange: #DF7F48; -@pink: #c3325f; - - -// Colors -// ------------------------- - -@turquoise-d1: #00AEA2; -@turquoise: #03BFB3; -@turquoise-l1: #42CFC5; -@turquoise-l2: #81DED8; -@turquoise-l3: #C0F0ED; -@turquoise-washed: #F3FDFC; - -@purple-d2: #1D1333; -@purple-d1: #2E2246; -@purple: #413659; -@purple-l1: #675E7A; -@purple-l2: #8D869B; -@purple-l3: #B3AFBD; -@purple-washed: #F6F3FD; - -// UI Colors -@red-d1: #F02E28; -@red: #FE3E39; -@red-l1: #FE6561; -@red-l2: #FE8B88; -@red-l3: #FFB2B0; -@red-washed: #FFECEB; - -@yellow-d2: #F0AC00; -@yellow-d1: #FFC011; -@yellow: #FFCE38; -@yellow-l1: #FFD861; -@yellow-l2: #FFE28A; -@yellow-l3: #FFECB0; -@yellow-washed: #FFFAEB; - -@green-d1: #1FB572; -@green: #35C786; -@green-l1: #4ECF95; -@green-l2: #79E1B2; -@green-l3: #A6F0CF; -@green-washed: #EBFFF6; - -// Grayscale -@gray-1: #1E1C1C; -@gray-2: #303033; -@gray-3: #515054; -@gray-4: #68676B; -@gray-5: #817F85; -@gray-6: #A2A1A6; -@gray-7: #BBBABF; -@gray-8: #D8D7D9; -@gray-9: #E9E9EB; -@gray-10: #F3F3F5; - - -.red{color: @red;} -.blue{color: @blue;} -.black{color: @black;} -.turquoise{color: @turquoise;} -.turquoise-d1{color: @turquoise-d1;} - - -//icon colors for tree icons -.color-red, .color-red i{color: @red-d1 !important;} -.color-blue, .color-blue i{color: @turquoise-d1 !important;} -.color-orange, .color-orange i{color: #d9631e !important;} -.color-green, .color-green i{color: @green-d1 !important;} -.color-yellow, .color-yellow i{color: @yellow-d1 !important;} - -/* Colors based on http://zavoloklom.github.io/material-design-color-palette/colors.html */ -.color-black, .color-black i { color: #000 !important; } -.color-blue-grey, .color-blue-grey i { color: #607d8b !important; } -.color-grey, .color-grey i { color: #9e9e9e !important; } -.color-brown, .color-brown i { color: #795548 !important; } -.color-blue, .color-blue i { color: #2196f3 !important; } -.color-light-blue, .color-light-blue i {color: #03a9f4 !important; } -.color-cyan, .color-cyan i { color: #00bcd4 !important; } -.color-green, .color-green i { color: #4caf50 !important; } -.color-light-green, .color-light-green i {color: #8bc34a !important; } -.color-lime, .color-lime i { color: #cddc39 !important; } -.color-yellow, .color-yellow i { color: #ffeb3b !important; } -.color-amber, .color-amber i { color: #ffc107 !important; } -.color-orange, .color-orange i { color: #ff9800 !important; } -.color-deep-orange, .color-deep-orange i { color: #ff5722 !important; } -.color-red, .color-red i { color: #f44336 !important; } -.color-pink, .color-pink i { color: #e91e63 !important; } -.color-purple,.color-purple i { color: #9c27b0 !important; } -.color-deep-purple, .color-deep-purple i { color: #673ab7 !important; } -.color-indigo, .color-indigo i { color: #3f51b5 !important; } - - -// Scaffolding -// ------------------------- -@bodyBackground: @white; -@textColor: @gray-2; - - -// Links -// ------------------------- -@linkColor: @black; -@linkColorHover: darken(@linkColor, 15%); - -// Typography -// ------------------------- -@sansFontFamily: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif; -@serifFontFamily: Georgia, "Times New Roman", Times, serif; -@monoFontFamily: Monaco, Menlo, Consolas, "Courier New", monospace; - -@baseFontSize: 15px; -@baseFontFamily: @sansFontFamily; -@baseLineHeight: 20px; -@altFontFamily: @serifFontFamily; - -@headingsFontFamily: inherit; // empty to use BS default, @baseFontFamily -@headingsFontWeight: 500; // instead of browser default, bold -@headingsColor: inherit; // empty to use BS default, @textColor - - -// Component sizing -// ------------------------- -// Based on 14px font-size and 20px line-height - -@fontSizeLarge: @baseFontSize * 1.25; // ~18px -@fontSizeMedium: @baseFontSize * 1.15; // ~14px -@fontSizeSmall: @baseFontSize * 0.85; // ~12px -@fontSizeMini: @baseFontSize * 0.75; // ~11px - -@paddingLarge: 11px 19px; // 44px -@paddingSmall: 2px 10px; // 26px -@paddingMini: 0 6px; // 22px - - -// Disabled this to keep consistency throughout the backoffice UI. Untill a better solution is thought up, this will do. -@baseBorderRadius: 3px; // 2px; -@borderRadiusLarge: 3px; // 6px; -@borderRadiusSmall: 3px; // 3px; - - -// Tables -// ------------------------- -@tableBackground: transparent; // overall background-color -@tableBackgroundAccent: @gray-10; // for striping -@tableBackgroundHover: @gray-10; // for hover -@tableBorder: @gray-8; // table and cell border - -// Buttons -// ------------------------- -@btnBackground: @gray-9; -@btnBackgroundHighlight: @gray-9; -@btnBorder: @gray-9; - -@btnPrimaryBackground: @green; -@btnPrimaryBackgroundHighlight: @green; - -@btnInfoBackground: @purple-l1; -@btnInfoBackgroundHighlight: @purple-l1; - -@btnSuccessBackground: @green; -@btnSuccessBackgroundHighlight: @green; - -@btnWarningBackground: @red-l1; -@btnWarningBackgroundHighlight: @red-l1; - -@btnDangerBackground: @red-l1; -@btnDangerBackgroundHighlight: @red-l1; - -@btnInverseBackground: @gray-2; -@btnInverseBackgroundHighlight: @gray-2; - -@btnNeutralBackground: @gray-9; -@btnNeutralBackgroundHighlight: @gray-9; - - -// Forms -// ------------------------- -@inputBackground: @white; -@inputBorder: @gray-7; -@inputBorderRadius: 0; -@inputDisabledBackground: @gray-10; -@formActionsBackground: @gray-9; -@inputHeight: @baseLineHeight + 12px; // base line-height + 8px vertical padding + 2px top/bottom border -@controlRequiredColor: @red; - - -// Tabs -// ------------------------- - -@tabsBorderRadius: @baseBorderRadius; - -// Dropdowns -// ------------------------- -@dropdownBackground: @white; -@dropdownBorder: @gray-8; -@dropdownDividerTop: @gray-8; -@dropdownDividerBottom: @white; - -@dropdownLinkColor: @gray-2; -@dropdownLinkColorHover: @white; -@dropdownLinkColorActive: @white; - -@dropdownLinkBackgroundActive: @linkColor; -@dropdownLinkBackgroundHover: @dropdownLinkBackgroundActive; - - - -// COMPONENT VARIABLES -// -------------------------------------------------- - -// Drawer -@drawerWidth: 400px; - - -// Z-index master list -// ------------------------- -// Used for a bird's eye view of components dependent on the z-axis -// Try to avoid customizing these :) -@zindexDropdown: 1000; -@zindexPopover: 1010; -@zindexTooltip: 1030; -@zindexFixedNavbar: 1030; -@zindexModalBackdrop: 1040; -@zindexModal: 1050; - -@zindexUmbOverlay: 7500; -@zindexOverlayBackdrop: 2000; - -// Sticky bar has a z-index of "500", which is set from javascript in directive -// so set z-index of cropper should be lower to be behind sticky bar. -@zindexCropperOverlay: 499; - -// Sprite icons path -// ------------------------- -@iconSpritePath: "../img/glyphicons-halflings.png"; -@iconWhiteSpritePath: "../img/glyphicons-halflings-white.png"; - - -// Input placeholder text color -// ------------------------- -@placeholderText: @gray-8; - - -// Hr border color -// ------------------------- -@hrBorder: @gray-10; - - -// Horizontal forms & lists -// ------------------------- -@horizontalComponentOffset: 180px; - - -// Wells -// ------------------------- -@wellBackground: @gray-10; - - -// Navbar -// ------------------------- -@navbarCollapseWidth: 979px; -@navbarCollapseDesktopWidth: @navbarCollapseWidth + 1; - -@navbarHeight: 40px; -@navbarBackgroundHighlight: @white; -@navbarBackground: darken(@navbarBackgroundHighlight, 5%); -@navbarBorder: darken(@navbarBackground, 12%); - -@navbarText: @gray-4; -@navbarLinkColor: @gray-4; -@navbarLinkColorHover: @gray-2; -@navbarLinkColorActive: @gray-3; -@navbarLinkBackgroundHover: transparent; -@navbarLinkBackgroundActive: darken(@navbarBackground, 5%); - -@navbarBrandColor: @navbarLinkColor; - -// Inverted navbar -@navbarInverseBackground: @gray-1; -@navbarInverseBackgroundHighlight: @gray-2; -@navbarInverseBorder: @gray-2; - -@navbarInverseText: @gray-8; -@navbarInverseLinkColor: @gray-8; -@navbarInverseLinkColorHover: @white; -@navbarInverseLinkColorActive: @navbarInverseLinkColorHover; -@navbarInverseLinkBackgroundHover: transparent; -@navbarInverseLinkBackgroundActive: @navbarInverseBackground; - -@navbarInverseSearchBackground: lighten(@navbarInverseBackground, 25%); -@navbarInverseSearchBackgroundFocus: @white; -@navbarInverseSearchBorder: @navbarInverseBackground; -@navbarInverseSearchPlaceholderColor: @gray-7; - -@navbarInverseBrandColor: @navbarInverseLinkColor; - - -// Pagination -// ------------------------- -@paginationBackground: @white; -@paginationBorder: @gray-8; -@paginationActiveBackground: @gray-10; - - -// Hero unit -// ------------------------- -@heroUnitBackground: @gray-10; -@heroUnitHeadingColor: inherit; -@heroUnitLeadColor: inherit; - - -// alerts -// ------------------------- -@warningText: @white; -@warningBackground: @yellow-d2; -@warningBorder: transparent; - -@errorText: @white; -@errorBackground: @red-d1; -@errorBorder: transparent; - -@successText: @white; -@successBackground: @green-d1; -@successBorder: transparent; - -@infoText: @white; -@infoBackground: @turquoise-d1; -@infoBorder: transparent; - -@alertBorderRadius: 0; - -// SD: Had to duplicate the above but prefix with 'form' inversed colors -// because we cannot share the above alert colors with forms otherwise we end up with white -// text and giant red backgrounds. - -// Form states -// ------------------------- -@formWarningText: @warningBackground; -@formWarningBackground: lighten(@warningBackground, 38%); -@formWarningBorder: darken(spin(@warningBackground, -10), 3%); - -@formErrorText: @errorBackground; -@formErrorBackground: lighten(@errorBackground, 55%); -@formErrorBorder: darken(spin(@errorBackground, -10), 3%); - -@formSuccessText: @successBackground; -@formSuccessBackground: lighten(@successBackground, 48%); -@formSuccessBorder: darken(spin(@successBackground, -10), 5%); - -@formInfoText: @infoBackground; -@formInfoBackground: lighten(@infoBackground, 41%); -@formInfoBorder: darken(spin(@infoBackground, -10), 7%); - - -// Tooltips and popovers -// ------------------------- -@tooltipColor: @white; -@tooltipBackground: @black; -@tooltipArrowWidth: 5px; -@tooltipArrowColor: @tooltipBackground; - -@popoverBackground: @white; -@popoverArrowWidth: 10px; -@popoverArrowColor: @white; -@popoverTitleBackground: darken(@popoverBackground, 3%); - -// Special enhancement for popovers -@popoverArrowOuterWidth: @popoverArrowWidth + 1; -@popoverArrowOuterColor: @gray-7; - - - -// GRID -// -------------------------------------------------- - - -// Default 940px grid -// ------------------------- -@gridColumns: 12; -@gridColumnWidth: 60px; -@gridGutterWidth: 0px; -@gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1)); - -// 1200px min -@gridColumnWidth1200: 70px; -@gridGutterWidth1200: 30px; -@gridRowWidth1200: (@gridColumns * @gridColumnWidth1200) + (@gridGutterWidth1200 * (@gridColumns - 1)); - -// 768px-979px -@gridColumnWidth768: 42px; -@gridGutterWidth768: 20px; -@gridRowWidth768: (@gridColumns * @gridColumnWidth768) + (@gridGutterWidth768 * (@gridColumns - 1)); - - -// Fluid grid -// ------------------------- -@fluidGridColumnWidth: percentage(@gridColumnWidth/@gridRowWidth); -@fluidGridGutterWidth: percentage(@gridGutterWidth/@gridRowWidth); - -// 1200px min -@fluidGridColumnWidth1200: percentage(@gridColumnWidth1200/@gridRowWidth1200); -@fluidGridGutterWidth1200: percentage(@gridGutterWidth1200/@gridRowWidth1200); - -// 768px-979px -@fluidGridColumnWidth768: percentage(@gridColumnWidth768/@gridRowWidth768); -@fluidGridGutterWidth768: percentage(@gridGutterWidth768/@gridRowWidth768); - -// SORTABLE -// -------------------------------------------------- -@sortableHelperBg: @turquoise-l2; -@sortablePlaceholderBg : @turquoise; +// +// Variables +// -------------------------------------------------- + + +// Global values +// -------------------------------------------------- + + +// Grays +// ------------------------- +@black: #000; +@blackLight: #1D1D1D; +@grayDarker: #222; +@grayDark: #343434; +@gray: #555; +@grayMed: #7F7F7F; +@blueGrey: #607D8B; +@grayLight: #D9D9D9; +@grayLighter: #F8F8F8; +@white: #FFF; +@grayIcon: #9E9E9E; + +// Accent colors +// ------------------------- + + + +@blue: #2E8AEA; +@blueDark: #0064CD; +@blueLight: #ADD8E6; +@green: #46A546; +@red: #9D261D; +@yellow: #FFC40D; +@orange: #DF7F48; +@pink: #C3325F; + + +// Colors +// ------------------------- + +@turquoise-d1: #00AEA2; +@turquoise: #03BFB3; +@turquoise-l1: #42CFC5; +@turquoise-l2: #81DED8; +@turquoise-l3: #C0F0ED; +@turquoise-washed: #F3FDFC; + +@purple-d2: #1D1333; +@purple-d1: #2E2246; +@purple: #413659; +@purple-l1: #675E7A; +@purple-l2: #8D869B; +@purple-l3: #B3AFBD; +@purple-washed: #F6F3FD; + +// UI Colors +@red-d1: #F02E28; +@red: #FE3E39; +@red-l1: #FE6561; +@red-l2: #FE8B88; +@red-l3: #FFB2B0; +@red-washed: #FFECEB; + +@yellow-d2: #F0AC00; +@yellow-d1: #FFC011; +@yellow: #FFCE38; +@yellow-l1: #FFD861; +@yellow-l2: #FFE28A; +@yellow-l3: #FFECB0; +@yellow-washed: #FFFAEB; + +@green-d1: #1FB572; +@green: #35C786; +@green-l1: #4ECF95; +@green-l2: #79E1B2; +@green-l3: #A6F0CF; +@green-washed: #EBFFF6; + +// Grayscale +@gray-1: #1E1C1C; +@gray-2: #303033; +@gray-3: #515054; +@gray-4: #68676B; +@gray-5: #817F85; +@gray-6: #A2A1A6; +@gray-7: #BBBABF; +@gray-8: #D8D7D9; +@gray-9: #E9E9EB; +@gray-10: #F3F3F5; + + +// Additional Icon Colours +@brownIcon: #795548; +@blueIcon: #2196F3; +@lightBlueIcon: #03A9F4; +@cyanIcon: #00BCD4; +@greenIcon: #4CAF50; +@lightGreenIcon: #8BC34A; +@limeIcon: #CDDC39; +@yellowIcon: #FFEB3B; +@amberIcon: #FFC107; +@orangeIcon: #FF9800; +@deepOrangeIcon: #FF5722; +@redIcon: #F44336; +@pinkIcon: #E91E63; +@purpleIcon: #9C27B0; +@deepPurpleIcon: #673AB7; +@indigoIcon: #3F51B5; + + + + + +.red{color: @red;} +.blue{color: @blue;} +.black{color: @black;} +.turquoise{color: @turquoise;} +.turquoise-d1{color: @turquoise-d1;} + + +//icon colors for tree icons +.color-red, .color-red i{color: @red-d1 !important;} +.color-blue, .color-blue i{color: @turquoise-d1 !important;} +.color-orange, .color-orange i{color: @orange !important;} +.color-green, .color-green i{color: @green-d1 !important;} +.color-yellow, .color-yellow i{color: @yellowIcon !important;} + +/* Colors based on https://zavoloklom.github.io/material-design-color-palette/colors.html */ +.btn-color-black {background-color: @black;} +.color-black i { color: @black;} + + +.btn-color-blue-grey {background-color: @blueGrey;} +.color-blue-grey, .color-blue-grey i { color: @blueGrey !important;} + + +.btn-color-grey{background-color: @grayIcon;} +.color-grey, .color-grey i { color: @grayIcon !important; } + + +.btn-color-brown{background-color: @brownIcon;} +.color-brown, .color-brown i { color: @brownIcon !important; } + +.btn-color-blue{background-color: @blueIcon;} +.color-blue, .color-blue i { color: @blueIcon !important; } + +.btn-color-light-blue{background-color: @lightBlueIcon;} +.color-light-blue, .color-light-blue i {color: @lightBlueIcon !important;} + +.btn-color-cyan{background-color: @cyanIcon;} +.color-cyan, .color-cyan i { color: @cyanIcon !important; } + +.btn-color-green{background-color: @greenIcon;} +.color-green, .color-green i { color: @greenIcon !important; } + +.btn-color-light-green{background-color: @lightGreenIcon;} +.color-light-green, .color-light-green i {color: @lightGreenIcon !important; } + +.btn-color-lime{background-color: @limeIcon;} +.color-lime, .color-lime i { color: @limeIcon !important; } + +.btn-color-yellow{background-color: @yellowIcon;} +.color-yellow, .color-yellow i { color: @yellowIcon !important; } + +.btn-color-amber{background-color: @amberIcon;} +.color-amber, .color-amber i { color: @amberIcon !important; } + +.btn-color-orange{background-color: @orangeIcon;} +.color-orange, .color-orange i { color: @orangeIcon !important; } + +.btn-color-deep-orange{background-color: @deepOrangeIcon;} +.color-deep-orange, .color-deep-orange i { color: @deepOrangeIcon !important; } + +.btn-color-red{background-color: @redIcon;} +.color-red, .color-red i { color: @redIcon !important; } + +.btn-color-pink{background-color: @pinkIcon;} +.color-pink, .color-pink i { color: @pinkIcon !important; } + +.btn-color-purple{background-color: @purpleIcon;} +.color-purple, .color-purple i { color: @purpleIcon !important; } + +.btn-color-deep-purple{background-color: @deepPurpleIcon;} +.color-deep-purple, .color-deep-purple i { color: @deepPurpleIcon !important; } + +.btn-color-indigo{background-color: @indigoIcon;} +.color-indigo, .color-indigo i { color: @indigoIcon !important; } + + + +// Scaffolding +// ------------------------- +@bodyBackground: @white; +@textColor: @gray-2; + + +// Links +// ------------------------- +@linkColor: @black; +@linkColorHover: darken(@linkColor, 15%); + +// Typography +// ------------------------- +@sansFontFamily: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif; +@serifFontFamily: Georgia, "Times New Roman", Times, serif; +@monoFontFamily: Monaco, Menlo, Consolas, "Courier New", monospace; + +@baseFontSize: 15px; +@baseFontFamily: @sansFontFamily; +@baseLineHeight: 20px; +@altFontFamily: @serifFontFamily; + +@headingsFontFamily: inherit; // empty to use BS default, @baseFontFamily +@headingsFontWeight: 500; // instead of browser default, bold +@headingsColor: inherit; // empty to use BS default, @textColor + + +// Component sizing +// ------------------------- +// Based on 14px font-size and 20px line-height + +@fontSizeLarge: @baseFontSize * 1.25; // ~18px +@fontSizeMedium: @baseFontSize * 1.15; // ~14px +@fontSizeSmall: @baseFontSize * 0.85; // ~12px +@fontSizeMini: @baseFontSize * 0.75; // ~11px + +@paddingLarge: 11px 19px; // 44px +@paddingSmall: 2px 10px; // 26px +@paddingMini: 0 6px; // 22px + + +// Disabled this to keep consistency throughout the backoffice UI. Untill a better solution is thought up, this will do. +@baseBorderRadius: 3px; // 2px; +@borderRadiusLarge: 3px; // 6px; +@borderRadiusSmall: 3px; // 3px; + + +// Tables +// ------------------------- +@tableBackground: transparent; // overall background-color +@tableBackgroundAccent: @gray-10; // for striping +@tableBackgroundHover: @gray-10; // for hover +@tableBorder: @gray-8; // table and cell border + +// Buttons +// ------------------------- +@btnBackground: @gray-9; +@btnBackgroundHighlight: @gray-9; +@btnBorder: @gray-9; + +@btnPrimaryBackground: @green; +@btnPrimaryBackgroundHighlight: @green; + +@btnInfoBackground: @purple-l1; +@btnInfoBackgroundHighlight: @purple-l1; + +@btnSuccessBackground: @green; +@btnSuccessBackgroundHighlight: @green; + +@btnWarningBackground: @red-l1; +@btnWarningBackgroundHighlight: @red-l1; + +@btnDangerBackground: @red-l1; +@btnDangerBackgroundHighlight: @red-l1; + +@btnInverseBackground: @gray-2; +@btnInverseBackgroundHighlight: @gray-2; + +@btnNeutralBackground: @gray-9; +@btnNeutralBackgroundHighlight: @gray-9; + + +// Forms +// ------------------------- +@inputBackground: @white; +@inputBorder: @gray-7; +@inputBorderRadius: 0; +@inputDisabledBackground: @gray-10; +@formActionsBackground: @gray-9; +@inputHeight: @baseLineHeight + 12px; // base line-height + 8px vertical padding + 2px top/bottom border +@controlRequiredColor: @red; + + +// Tabs +// ------------------------- + +@tabsBorderRadius: @baseBorderRadius; + +// Dropdowns +// ------------------------- +@dropdownBackground: @white; +@dropdownBorder: @gray-8; +@dropdownDividerTop: @gray-8; +@dropdownDividerBottom: @white; + +@dropdownLinkColor: @gray-2; +@dropdownLinkColorHover: @white; +@dropdownLinkColorActive: @white; + +@dropdownLinkBackgroundActive: @linkColor; +@dropdownLinkBackgroundHover: @dropdownLinkBackgroundActive; + + + +// COMPONENT VARIABLES +// -------------------------------------------------- + +// Drawer +@drawerWidth: 400px; + + +// Z-index master list +// ------------------------- +// Used for a bird's eye view of components dependent on the z-axis +// Try to avoid customizing these :) +@zindexDropdown: 1000; +@zindexPopover: 1010; +@zindexTooltip: 1030; +@zindexFixedNavbar: 1030; +@zindexModalBackdrop: 1040; +@zindexModal: 1050; + +@zindexUmbOverlay: 7500; +@zindexOverlayBackdrop: 2000; + +// Sticky bar has a z-index of "500", which is set from javascript in directive +// so set z-index of cropper should be lower to be behind sticky bar. +@zindexCropperOverlay: 499; + +// Sprite icons path +// ------------------------- +@iconSpritePath: "../img/glyphicons-halflings.png"; +@iconWhiteSpritePath: "../img/glyphicons-halflings-white.png"; + + +// Input placeholder text color +// ------------------------- +@placeholderText: @gray-8; + + +// Hr border color +// ------------------------- +@hrBorder: @gray-10; + + +// Horizontal forms & lists +// ------------------------- +@horizontalComponentOffset: 180px; + + +// Wells +// ------------------------- +@wellBackground: @gray-10; + + +// Navbar +// ------------------------- +@navbarCollapseWidth: 979px; +@navbarCollapseDesktopWidth: @navbarCollapseWidth + 1; + +@navbarHeight: 40px; +@navbarBackgroundHighlight: @white; +@navbarBackground: darken(@navbarBackgroundHighlight, 5%); +@navbarBorder: darken(@navbarBackground, 12%); + +@navbarText: @gray-4; +@navbarLinkColor: @gray-4; +@navbarLinkColorHover: @gray-2; +@navbarLinkColorActive: @gray-3; +@navbarLinkBackgroundHover: transparent; +@navbarLinkBackgroundActive: darken(@navbarBackground, 5%); + +@navbarBrandColor: @navbarLinkColor; + +// Inverted navbar +@navbarInverseBackground: @gray-1; +@navbarInverseBackgroundHighlight: @gray-2; +@navbarInverseBorder: @gray-2; + +@navbarInverseText: @gray-8; +@navbarInverseLinkColor: @gray-8; +@navbarInverseLinkColorHover: @white; +@navbarInverseLinkColorActive: @navbarInverseLinkColorHover; +@navbarInverseLinkBackgroundHover: transparent; +@navbarInverseLinkBackgroundActive: @navbarInverseBackground; + +@navbarInverseSearchBackground: lighten(@navbarInverseBackground, 25%); +@navbarInverseSearchBackgroundFocus: @white; +@navbarInverseSearchBorder: @navbarInverseBackground; +@navbarInverseSearchPlaceholderColor: @gray-7; + +@navbarInverseBrandColor: @navbarInverseLinkColor; + + +// Pagination +// ------------------------- +@paginationBackground: @white; +@paginationBorder: @gray-8; +@paginationActiveBackground: @gray-10; + + +// Hero unit +// ------------------------- +@heroUnitBackground: @gray-10; +@heroUnitHeadingColor: inherit; +@heroUnitLeadColor: inherit; + + +// alerts +// ------------------------- +@warningText: @white; +@warningBackground: @yellow-d2; +@warningBorder: transparent; + +@errorText: @white; +@errorBackground: @red-d1; +@errorBorder: transparent; + +@successText: @white; +@successBackground: @green-d1; +@successBorder: transparent; + +@infoText: @white; +@infoBackground: @turquoise-d1; +@infoBorder: transparent; + +@alertBorderRadius: 0; + +// SD: Had to duplicate the above but prefix with 'form' inversed colors +// because we cannot share the above alert colors with forms otherwise we end up with white +// text and giant red backgrounds. + +// Form states +// ------------------------- +@formWarningText: @warningBackground; +@formWarningBackground: lighten(@warningBackground, 38%); +@formWarningBorder: darken(spin(@warningBackground, -10), 3%); + +@formErrorText: @errorBackground; +@formErrorBackground: lighten(@errorBackground, 55%); +@formErrorBorder: darken(spin(@errorBackground, -10), 3%); + +@formSuccessText: @successBackground; +@formSuccessBackground: lighten(@successBackground, 48%); +@formSuccessBorder: darken(spin(@successBackground, -10), 5%); + +@formInfoText: @infoBackground; +@formInfoBackground: lighten(@infoBackground, 41%); +@formInfoBorder: darken(spin(@infoBackground, -10), 7%); + + +// Tooltips and popovers +// ------------------------- +@tooltipColor: @white; +@tooltipBackground: @black; +@tooltipArrowWidth: 5px; +@tooltipArrowColor: @tooltipBackground; + +@popoverBackground: @white; +@popoverArrowWidth: 10px; +@popoverArrowColor: @white; +@popoverTitleBackground: darken(@popoverBackground, 3%); + +// Special enhancement for popovers +@popoverArrowOuterWidth: @popoverArrowWidth + 1; +@popoverArrowOuterColor: @gray-7; + + + +// GRID +// -------------------------------------------------- + + +// Default 940px grid +// ------------------------- +@gridColumns: 12; +@gridColumnWidth: 60px; +@gridGutterWidth: 0px; +@gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1)); + +// 1200px min +@gridColumnWidth1200: 70px; +@gridGutterWidth1200: 30px; +@gridRowWidth1200: (@gridColumns * @gridColumnWidth1200) + (@gridGutterWidth1200 * (@gridColumns - 1)); + +// 768px-979px +@gridColumnWidth768: 42px; +@gridGutterWidth768: 20px; +@gridRowWidth768: (@gridColumns * @gridColumnWidth768) + (@gridGutterWidth768 * (@gridColumns - 1)); + + +// Fluid grid +// ------------------------- +@fluidGridColumnWidth: percentage(@gridColumnWidth/@gridRowWidth); +@fluidGridGutterWidth: percentage(@gridGutterWidth/@gridRowWidth); + +// 1200px min +@fluidGridColumnWidth1200: percentage(@gridColumnWidth1200/@gridRowWidth1200); +@fluidGridGutterWidth1200: percentage(@gridGutterWidth1200/@gridRowWidth1200); + +// 768px-979px +@fluidGridColumnWidth768: percentage(@gridColumnWidth768/@gridRowWidth768); +@fluidGridGutterWidth768: percentage(@gridGutterWidth768/@gridRowWidth768); + +// SORTABLE +// -------------------------------------------------- +@sortableHelperBg: @turquoise-l2; +@sortablePlaceholderBg : @turquoise; diff --git a/src/Umbraco.Web.UI.Client/src/routes.js b/src/Umbraco.Web.UI.Client/src/routes.js index 3fc4d3f78e..2f1a7583b4 100644 --- a/src/Umbraco.Web.UI.Client/src/routes.js +++ b/src/Umbraco.Web.UI.Client/src/routes.js @@ -31,11 +31,11 @@ app.config(function ($routeProvider) { userService.getCurrentUser({ broadcastEvent: broadcast }).then(function (user) { //is auth, check if we allow or reject if (isRequired) { - + //This checks the current section and will force a redirect to 'content' as the default if ($route.current.params.section.toLowerCase() === "default" || $route.current.params.section.toLowerCase() === "umbraco" || $route.current.params.section === "") { $route.current.params.section = "content"; - } + } // U4-5430, Benjamin Howarth // We need to change the current route params if the user only has access to a single section @@ -141,13 +141,32 @@ app.config(function ($routeProvider) { resolve: canRoute(true) }) .when('/:section/:tree/:method', { - templateUrl: function (rp) { + //This allows us to dynamically change the template for this route since you cannot inject services into the templateUrl method. + template: "
", + //This controller will execute for this route, then we replace the template dynamnically based on the current tree. + controller: function ($scope, $route, $routeParams, treeService) { - //if there is no method registered for this then show the dashboard - if (!rp.method) - return "views/common/dashboard.html"; - - return ('views/' + rp.tree + '/' + rp.method + '.html'); + if (!$routeParams.method) { + $scope.templateUrl = "views/common/dashboard.html"; + } + + // Here we need to figure out if this route is for a package tree and if so then we need + // to change it's convention view path to: + // /App_Plugins/{mypackage}/backoffice/{treetype}/{method}.html + + // otherwise if it is a core tree we use the core paths: + // views/{treetype}/{method}.html + + var packageTreeFolder = treeService.getTreePackageFolder($routeParams.tree); + + if (packageTreeFolder) { + $scope.templateUrl = (Umbraco.Sys.ServerVariables.umbracoSettings.appPluginsPath + + "/" + packageTreeFolder + + "/backoffice/" + $routeParams.tree + "/" + $routeParams.method + ".html"); + } + else { + $scope.templateUrl = ('views/' + $routeParams.tree + '/' + $routeParams.method + '.html'); + } }, resolve: canRoute(true) }) diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/help.html b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/help.html index b9428fb242..be985652b9 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/help.html +++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/help.html @@ -22,8 +22,8 @@
  • - - go to our.umbraco.org + + go to our.umbraco.com The friendliest community
  • @@ -46,7 +46,7 @@
    • - + go to umbraco.tv The best Umbraco video tutorials @@ -55,4 +55,4 @@ - \ No newline at end of file + diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/insertmacro.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/insertmacro.controller.js index dbb86e87ec..1fd870b42d 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/insertmacro.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/insertmacro.controller.js @@ -10,16 +10,22 @@ function InsertMacroController($scope, entityResource, macroResource, umbPropEditorHelper, macroService, formHelper) { /** changes the view to edit the params of the selected macro */ - function editParams() { + /** if there is pnly one macro, and it has parameters - editor can skip selecting the Macro **/ + function editParams(insertIfNoParameters) { + //whether to insert the macro in the rich text editor when editParams is called and there are no parameters see U4-10537 + insertIfNoParameters = (typeof insertIfNoParameters !== 'undefined') ? insertIfNoParameters : true; //get the macro params if there are any macroResource.getMacroParameters($scope.selectedMacro.id) .then(function (data) { //go to next page if there are params otherwise we can just exit if (!angular.isArray(data) || data.length === 0) { - //we can just exist! - submitForm(); - + //we can just exist! + if (insertIfNoParameters) { + submitForm(); + } else { + $scope.wizardStep = 'macroSelect'; + } } else { $scope.wizardStep = "paramSelect"; $scope.macroParams = data; @@ -117,7 +123,7 @@ function InsertMacroController($scope, entityResource, macroResource, umbPropEdi formHelper.resetForm({ scope: $scope }); if ($scope.wizardStep === "macroSelect") { - editParams(); + editParams(true); } else { submitForm(); @@ -155,12 +161,19 @@ function InsertMacroController($scope, entityResource, macroResource, umbPropEdi if (found) { //select the macro and go to next screen $scope.selectedMacro = found; - editParams(); + editParams(true); return; } } - //we don't have a pre-selected macro so ensure the correct step is set - $scope.wizardStep = "macroSelect"; + //if there is only one macro in the site and it has parameters, let's not make the editor choose it from a selection of one macro (unless there are no parameters - then weirdly it's a better experience to make that selection) + if ($scope.macros.length == 1) { + $scope.selectedMacro = $scope.macros[0]; + editParams(false); + } + else { + //we don't have a pre-selected macro so ensure the correct step is set + $scope.wizardStep = 'macroSelect'; + } }); diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/legacydelete.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/legacydelete.controller.js index 81b86fc969..9cfd4845b6 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/legacydelete.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/legacydelete.controller.js @@ -16,7 +16,7 @@ function LegacyDeleteController($scope, legacyResource, treeService, navigationS legacyResource.deleteItem({ nodeId: $scope.currentNode.id, nodeType: $scope.currentNode.nodeType, - alias: $scope.currentNode.name, + alias: $scope.currentNode.name }).then(function () { $scope.currentNode.loading = false; //TODO: Need to sync tree, etc... diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js index e76db90f47..5d6a3bf12c 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js @@ -1,149 +1,170 @@ //used for the media picker dialog angular.module("umbraco").controller("Umbraco.Dialogs.LinkPickerController", - function ($scope, eventsService, dialogService, entityResource, contentResource, mediaHelper, userService, localizationService) { - var dialogOptions = $scope.dialogOptions; + function ($scope, eventsService, dialogService, entityResource, contentResource, mediaHelper, userService, localizationService, tinyMceService) { + var dialogOptions = $scope.dialogOptions; - var searchText = "Search..."; - localizationService.localize("general_search").then(function (value) { - searchText = value + "..."; - }); + var searchText = "Search..."; + localizationService.localize("general_search").then(function (value) { + searchText = value + "..."; + }); - $scope.dialogTreeEventHandler = $({}); - $scope.target = {}; - $scope.searchInfo = { - searchFromId: null, - searchFromName: null, - showSearch: false, - results: [], - selectedSearchResults: [] - } + $scope.dialogTreeEventHandler = $({}); + $scope.target = {}; + $scope.searchInfo = { + searchFromId: null, + searchFromName: null, + showSearch: false, + results: [], + selectedSearchResults: [] + } - if (dialogOptions.currentTarget) { - $scope.target = dialogOptions.currentTarget; + if (dialogOptions.currentTarget) { + $scope.target = dialogOptions.currentTarget; - //if we have a node ID, we fetch the current node to build the form data - if ($scope.target.id || $scope.target.udi) { + //if we have a node ID, we fetch the current node to build the form data + if ($scope.target.id || $scope.target.udi) { - var id = $scope.target.udi ? $scope.target.udi : $scope.target.id; + var id = $scope.target.udi ? $scope.target.udi : $scope.target.id; - if (!$scope.target.path) { - entityResource.getPath(id, "Document").then(function (path) { - $scope.target.path = path; - //now sync the tree to this path - $scope.dialogTreeEventHandler.syncTree({ path: $scope.target.path, tree: "content" }); - }); - } + if (!$scope.target.path) { + entityResource.getPath(id, "Document").then(function (path) { + $scope.target.path = path; + //now sync the tree to this path + $scope.dialogTreeEventHandler.syncTree({ + path: $scope.target.path, + tree: "content" + }); + }); + } - contentResource.getNiceUrl(id).then(function (url) { - $scope.target.url = url; - }); - } - } + // if a link exists, get the properties to build the anchor name list + contentResource.getById(id).then(function (resp) { + $scope.anchorValues = tinyMceService.getAnchorNames(JSON.stringify(resp.properties)); + $scope.target.url = resp.urls[0]; + }); + } else if ($scope.target.url.length) { + // a url but no id/udi indicates an external link - trim the url to remove the anchor/qs + // only do the substring if there's a # or a ? + var indexOfAnchor = $scope.target.url.search(/(#|\?)/); + if (indexOfAnchor > -1) { + // populate the anchor + $scope.target.anchor = $scope.target.url.substring(indexOfAnchor); + // then rewrite the model and populate the link + $scope.target.url = $scope.target.url.substring(0, indexOfAnchor); + } + } + } - function nodeSelectHandler(ev, args) { - args.event.preventDefault(); - args.event.stopPropagation(); + if (dialogOptions.anchors) { + $scope.anchorValues = dialogOptions.anchors; + } - if (args.node.metaData.listViewNode) { - //check if list view 'search' node was selected + function nodeSelectHandler(ev, args) { + args.event.preventDefault(); + args.event.stopPropagation(); - $scope.searchInfo.showSearch = true; - $scope.searchInfo.searchFromId = args.node.metaData.listViewNode.id; - $scope.searchInfo.searchFromName = args.node.metaData.listViewNode.name; - } - else { - eventsService.emit("dialogs.linkPicker.select", args); + if (args.node.metaData.listViewNode) { + //check if list view 'search' node was selected - if ($scope.currentNode) { - //un-select if there's a current one selected - $scope.currentNode.selected = false; - } + $scope.searchInfo.showSearch = true; + $scope.searchInfo.searchFromId = args.node.metaData.listViewNode.id; + $scope.searchInfo.searchFromName = args.node.metaData.listViewNode.name; + } else { + eventsService.emit("dialogs.linkPicker.select", args); - $scope.currentNode = args.node; - $scope.currentNode.selected = true; - $scope.target.id = args.node.id; - $scope.target.udi = args.node.udi; - $scope.target.name = args.node.name; + if ($scope.currentNode) { + //un-select if there's a current one selected + $scope.currentNode.selected = false; + } - if (args.node.id < 0) { - $scope.target.url = "/"; - } - else { - contentResource.getNiceUrl(args.node.id).then(function (url) { - $scope.target.url = url; - }); - } + $scope.currentNode = args.node; + $scope.currentNode.selected = true; + $scope.target.id = args.node.id; + $scope.target.udi = args.node.udi; + $scope.target.name = args.node.name; - if (!angular.isUndefined($scope.target.isMedia)) { - delete $scope.target.isMedia; - } - } - } + if (args.node.id < 0) { + $scope.target.url = "/"; + } else { + contentResource.getById(args.node.id).then(function (resp) { + $scope.anchorValues = tinyMceService.getAnchorNames(JSON.stringify(resp.properties)); + $scope.target.url = resp.urls[0]; + }); + } - function nodeExpandedHandler(ev, args) { - if (angular.isArray(args.children)) { + if (!angular.isUndefined($scope.target.isMedia)) { + delete $scope.target.isMedia; + } + } + } - //iterate children - _.each(args.children, function (child) { - //check if any of the items are list views, if so we need to add a custom - // child: A node to activate the search - if (child.metaData.isContainer) { - child.hasChildren = true; - child.children = [ - { - level: child.level + 1, - hasChildren: false, - name: searchText, - metaData: { - listViewNode: child, - }, - cssClass: "icon umb-tree-icon sprTree icon-search", - cssClasses: ["not-published"] + function nodeExpandedHandler(ev, args) { + if (angular.isArray(args.children)) { + + //iterate children + _.each(args.children, function (child) { + //check if any of the items are list views, if so we need to add a custom + // child: A node to activate the search + if (child.metaData.isContainer) { + child.hasChildren = true; + child.children = [ + { + level: child.level + 1, + hasChildren: false, + name: searchText, + metaData: { + listViewNode: child + }, + cssClass: "icon umb-tree-icon sprTree icon-search", + cssClasses: ["not-published"] } ]; - } - }); - } - } + } + }); + } + } - $scope.switchToMediaPicker = function () { - userService.getCurrentUser().then(function (userData) { - dialogService.mediaPicker({ - startNodeId: userData.startMediaIds.length == 0 ? -1 : userData.startMediaIds[0], - callback: function(media) { - $scope.target.id = media.id; - $scope.target.isMedia = true; - $scope.target.name = media.name; - $scope.target.url = mediaHelper.resolveFile(media); - } - }); - }); - }; + $scope.switchToMediaPicker = function () { + userService.getCurrentUser().then(function (userData) { + dialogService.mediaPicker({ + startNodeId: userData.startMediaIds.length == 0 ? -1 : userData.startMediaIds[0], + callback: function (media) { + $scope.target.id = media.id; + $scope.target.isMedia = true; + $scope.target.name = media.name; + $scope.target.url = mediaHelper.resolveFile(media); + } + }); + }); + }; - $scope.hideSearch = function () { - $scope.searchInfo.showSearch = false; - $scope.searchInfo.searchFromId = null; - $scope.searchInfo.searchFromName = null; - $scope.searchInfo.results = []; - } + $scope.hideSearch = function () { + $scope.searchInfo.showSearch = false; + $scope.searchInfo.searchFromId = null; + $scope.searchInfo.searchFromName = null; + $scope.searchInfo.results = []; + } - // method to select a search result - $scope.selectResult = function (evt, result) { - result.selected = result.selected === true ? false : true; - nodeSelectHandler(evt, {event: evt, node: result}); - }; + // method to select a search result + $scope.selectResult = function (evt, result) { + result.selected = result.selected === true ? false : true; + nodeSelectHandler(evt, { + event: evt, + node: result + }); + }; - //callback when there are search results - $scope.onSearchResults = function (results) { - $scope.searchInfo.results = results; - $scope.searchInfo.showSearch = true; - }; + //callback when there are search results + $scope.onSearchResults = function (results) { + $scope.searchInfo.results = results; + $scope.searchInfo.showSearch = true; + }; - $scope.dialogTreeEventHandler.bind("treeNodeSelect", nodeSelectHandler); - $scope.dialogTreeEventHandler.bind("treeNodeExpanded", nodeExpandedHandler); + $scope.dialogTreeEventHandler.bind("treeNodeSelect", nodeSelectHandler); + $scope.dialogTreeEventHandler.bind("treeNodeExpanded", nodeExpandedHandler); - $scope.$on('$destroy', function () { - $scope.dialogTreeEventHandler.unbind("treeNodeSelect", nodeSelectHandler); - $scope.dialogTreeEventHandler.unbind("treeNodeExpanded", nodeExpandedHandler); - }); - }); \ No newline at end of file + $scope.$on('$destroy', function () { + $scope.dialogTreeEventHandler.unbind("treeNodeSelect", nodeSelectHandler); + $scope.dialogTreeEventHandler.unbind("treeNodeExpanded", nodeExpandedHandler); + }); + }); diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.html b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.html index 442357edcc..3b02853127 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.html +++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.html @@ -1,15 +1,27 @@
      \ No newline at end of file +
      diff --git a/src/Umbraco.Web.UI.Client/src/views/components/media/umb-media-node-info.html b/src/Umbraco.Web.UI.Client/src/views/components/media/umb-media-node-info.html index 3a01d735e7..19095acb90 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/media/umb-media-node-info.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/media/umb-media-node-info.html @@ -9,7 +9,7 @@ size="small"> - + - \ No newline at end of file + diff --git a/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/settingsdashboardintro.html b/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/settingsdashboardintro.html index d59d10d393..54bcf19abe 100644 --- a/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/settingsdashboardintro.html +++ b/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/settingsdashboardintro.html @@ -5,10 +5,10 @@

      Find out more:

      diff --git a/src/Umbraco.Web.UI.Client/src/views/datatypes/datatype.edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/datatypes/datatype.edit.controller.js index 74d35201c2..1755799e42 100644 --- a/src/Umbraco.Web.UI.Client/src/views/datatypes/datatype.edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/datatypes/datatype.edit.controller.js @@ -28,7 +28,7 @@ function DataTypeEditController($scope, $routeParams, $location, appState, navig label: preVals[i].label, view: preVals[i].view, value: preVals[i].value, - config: preVals[i].config, + config: preVals[i].config }); } } @@ -50,8 +50,9 @@ function DataTypeEditController($scope, $routeParams, $location, appState, navig $scope.preValues = []; if ($routeParams.create) { - + $scope.page.loading = true; + $scope.showIdentifier = false; //we are creating so get an empty data type item dataTypeResource.getScaffold($routeParams.id) @@ -77,6 +78,8 @@ function DataTypeEditController($scope, $routeParams, $location, appState, navig $scope.page.loading = true; + $scope.showIdentifier = true; + //we are editing so get the content item from the server dataTypeResource.getById($routeParams.id) .then(function(data) { diff --git a/src/Umbraco.Web.UI.Client/src/views/datatypes/edit.html b/src/Umbraco.Web.UI.Client/src/views/datatypes/edit.html index 686ac2ef57..39f6f72324 100644 --- a/src/Umbraco.Web.UI.Client/src/views/datatypes/edit.html +++ b/src/Umbraco.Web.UI.Client/src/views/datatypes/edit.html @@ -21,28 +21,31 @@ - -
      - - Required -
      + +
      {{content.id}}
      + {{content.key}} +
      -
      + +
      + + Required +
      - -
      {{content.selectedEditor}}
      -
      +
      + +
      {{content.selectedEditor}}
      +
      - + - - + +
      diff --git a/src/Umbraco.Web.UI.Client/src/views/datatypes/move.html b/src/Umbraco.Web.UI.Client/src/views/datatypes/move.html index 09390cdb81..f05b8a6c79 100644 --- a/src/Umbraco.Web.UI.Client/src/views/datatypes/move.html +++ b/src/Umbraco.Web.UI.Client/src/views/datatypes/move.html @@ -1,4 +1,4 @@ -
      +
      diff --git a/src/Umbraco.Web.UI.Client/src/views/dictionary/create.html b/src/Umbraco.Web.UI.Client/src/views/dictionary/create.html new file mode 100644 index 0000000000..5b73df3f86 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/dictionary/create.html @@ -0,0 +1,19 @@ +
      + +
      +
      Create an item under {{currentNode.name}}
      +
      + +
      +
      + + + + + + +
      +
      +
      \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/views/dictionary/delete.html b/src/Umbraco.Web.UI.Client/src/views/dictionary/delete.html new file mode 100644 index 0000000000..61c26c09a7 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/dictionary/delete.html @@ -0,0 +1,12 @@ +
      +
      + +

      + Are you sure you want to delete {{currentNode.name}} ? +

      + + + + +
      +
      \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/views/dictionary/dictionary.create.controller.js b/src/Umbraco.Web.UI.Client/src/views/dictionary/dictionary.create.controller.js new file mode 100644 index 0000000000..f47244bb10 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/dictionary/dictionary.create.controller.js @@ -0,0 +1,44 @@ +/** + * @ngdoc controller + * @name Umbraco.Editors.Dictionary.CreateController + * @function + * + * @description + * The controller for creating dictionary items + */ +function DictionaryCreateController($scope, $location, dictionaryResource, navigationService, notificationsService, formHelper, appState) { + var vm = this; + + vm.itemKey = ""; + + function createItem() { + + var node = $scope.dialogOptions.currentNode; + + dictionaryResource.create(node.id, vm.itemKey).then(function (data) { + navigationService.hideMenu(); + + // set new item as active in tree + var currPath = node.path ? node.path : "-1"; + navigationService.syncTree({ tree: "dictionary", path: currPath + "," + data, forceReload: true, activate: true }); + + // reset form state + formHelper.resetForm({ scope: $scope }); + + // navigate to edit view + var currentSection = appState.getSectionState("currentSection"); + $location.path("/" + currentSection + "/dictionary/edit/" + data); + + + }, function (err) { + if (err.data && err.data.message) { + notificationsService.error(err.data.message); + navigationService.hideMenu(); + } + }); + } + + vm.createItem = createItem; +} + +angular.module("umbraco").controller("Umbraco.Editors.Dictionary.CreateController", DictionaryCreateController); diff --git a/src/Umbraco.Web.UI.Client/src/views/dictionary/dictionary.delete.controller.js b/src/Umbraco.Web.UI.Client/src/views/dictionary/dictionary.delete.controller.js new file mode 100644 index 0000000000..43d6bac401 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/dictionary/dictionary.delete.controller.js @@ -0,0 +1,50 @@ +/** + * @ngdoc controller + * @name Umbraco.Editors.Dictionary.DeleteController + * @function + * + * @description + * The controller for deleting dictionary items + */ +function DictionaryDeleteController($scope, $location, dictionaryResource, treeService, navigationService, appState) { + var vm = this; + + function cancel() { + navigationService.hideDialog(); + } + + function performDelete() { + // stop from firing again on double-click + if ($scope.busy) { return false; } + + //mark it for deletion (used in the UI) + $scope.currentNode.loading = true; + $scope.busy = true; + + dictionaryResource.deleteById($scope.currentNode.id).then(function () { + $scope.currentNode.loading = false; + + // get the parent id + var parentId = $scope.currentNode.parentId; + + treeService.removeNode($scope.currentNode); + + navigationService.hideMenu(); + + var currentSection = appState.getSectionState("currentSection"); + if (parentId !== "-1") { + // set the view of the parent item + $location.path("/" + currentSection + "/dictionary/edit/" + parentId); + } else { + // we have no parent, so redirect to section + $location.path("/" + currentSection + "/"); + } + + }); + } + + vm.cancel = cancel; + vm.performDelete = performDelete; +} + +angular.module("umbraco").controller("Umbraco.Editors.Dictionary.DeleteController", DictionaryDeleteController); diff --git a/src/Umbraco.Web.UI.Client/src/views/dictionary/dictionary.edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/dictionary/dictionary.edit.controller.js new file mode 100644 index 0000000000..1b9d5c3f4c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/dictionary/dictionary.edit.controller.js @@ -0,0 +1,115 @@ +/** + * @ngdoc controller + * @name Umbraco.Editors.Dictionary.EditController + * @function + * + * @description + * The controller for editing dictionary items + */ +function DictionaryEditController($scope, $routeParams, dictionaryResource, treeService, navigationService, appState, editorState, contentEditingHelper, formHelper, notificationsService, localizationService) { + var vm = this; + + //setup scope vars + vm.nameDirty = false; + vm.page = {}; + vm.page.loading = false; + vm.page.nameLocked = false; + vm.page.menu = {}; + vm.page.menu.currentSection = appState.getSectionState("currentSection"); + vm.page.menu.currentNode = null; + vm.description = ""; + + function loadDictionary() { + + vm.page.loading = true; + + //we are editing so get the content item from the server + dictionaryResource.getById($routeParams.id) + .then(function (data) { + + bindDictionary(data); + + vm.page.loading = false; + }); + } + + function createTranslationProperty(translation) { + return { + alias: translation.isoCode, + label: translation.displayName, + hideLabel : false + } + } + + function bindDictionary(data) { + localizationService.localize("dictionaryItem_description").then(function (value) { + vm.description = value.replace("%0%", data.name); + }); + + // create data for umb-property displaying + for (var i = 0; i < data.translations.length; i++) { + data.translations[i].property = createTranslationProperty(data.translations[i]); + } + + contentEditingHelper.handleSuccessfulSave({ + scope: $scope, + savedContent: data + }); + + // set content + vm.content = data; + + //share state + editorState.set(vm.content); + + navigationService.syncTree({ tree: "dictionary", path: data.path, forceReload: true }).then(function (syncArgs) { + vm.page.menu.currentNode = syncArgs.node; + }); + } + + function onInit() { + loadDictionary(); + } + + function saveDictionary() { + if (formHelper.submitForm({ scope: $scope, statusMessage: "Saving..." })) { + + vm.page.saveButtonState = "busy"; + + dictionaryResource.save(vm.content, vm.nameDirty) + .then(function (data) { + + formHelper.resetForm({ scope: $scope, notifications: data.notifications }); + + bindDictionary(data); + + + vm.page.saveButtonState = "success"; + }, + function (err) { + + contentEditingHelper.handleSaveError({ + redirectOnFailure: false, + err: err + }); + + notificationsService.error(err.data.message); + + vm.page.saveButtonState = "error"; + }); + } + } + + vm.save = saveDictionary; + + $scope.$watch("vm.content.name", function (newVal, oldVal) { + //when the value changes, we need to set the name dirty + if (newVal && (newVal !== oldVal) && typeof(oldVal) !== "undefined") { + vm.nameDirty = true; + } + }); + + onInit(); +} + +angular.module("umbraco").controller("Umbraco.Editors.Dictionary.EditController", DictionaryEditController); diff --git a/src/Umbraco.Web.UI.Client/src/views/dictionary/dictionary.list.controller.js b/src/Umbraco.Web.UI.Client/src/views/dictionary/dictionary.list.controller.js new file mode 100644 index 0000000000..35739b3db7 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/dictionary/dictionary.list.controller.js @@ -0,0 +1,47 @@ +/** + * @ngdoc controller + * @name Umbraco.Editors.Dictionary.ListController + * @function + * + * @description + * The controller for listting dictionary items + */ +function DictionaryListController($scope, $location, dictionaryResource, localizationService, appState) { + var vm = this; + vm.title = "Dictionary overview"; + vm.loading = false; + vm.items = []; + + function loadList() { + + vm.loading = true; + + dictionaryResource.getList() + .then(function (data) { + + vm.items = data; + + vm.loading = false; + }); + } + + function clickItem(id) { + var currentSection = appState.getSectionState("currentSection"); + $location.path("/" + currentSection + "/dictionary/edit/" + id); + } + + vm.clickItem = clickItem; + + function onInit() { + localizationService.localize("dictionaryItem_overviewTitle").then(function (value) { + vm.title = value; + }); + + loadList(); + } + + onInit(); +} + + +angular.module("umbraco").controller("Umbraco.Editors.Dictionary.ListController", DictionaryListController); diff --git a/src/Umbraco.Web.UI.Client/src/views/dictionary/edit.html b/src/Umbraco.Web.UI.Client/src/views/dictionary/edit.html new file mode 100644 index 0000000000..c016d37eca --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/dictionary/edit.html @@ -0,0 +1,43 @@ +
      + + +
      + + + + + +

      + + + +
      + + + + + + + + + + + +
      +
      +
      diff --git a/src/Umbraco.Web.UI.Client/src/views/dictionary/list.html b/src/Umbraco.Web.UI.Client/src/views/dictionary/list.html new file mode 100644 index 0000000000..82b088df49 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/dictionary/list.html @@ -0,0 +1,46 @@ +
      + + + + + + + +
      +
      +
      +
      +
      + Name +
      +
      + + + +
      +
      +
      +
      +
      +
      +
      + + +
      +
      + +
      +
      +
      +
      +
      +
      +
      diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/copy.html b/src/Umbraco.Web.UI.Client/src/views/documenttypes/copy.html index db1a0db640..2976f65917 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/copy.html +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/copy.html @@ -1,4 +1,4 @@ -
      +
      diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.controller.js b/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.controller.js index aade96c3cc..2ffeec3388 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.controller.js @@ -6,12 +6,13 @@ * @description * The controller for the doc type creation dialog */ -function DocumentTypesCreateController($scope, $location, navigationService, contentTypeResource, formHelper, appState, notificationsService, localizationService) { +function DocumentTypesCreateController($scope, $location, navigationService, contentTypeResource, formHelper, appState, notificationsService, localizationService, iconHelper) { $scope.model = { allowCreateFolder: $scope.dialogOptions.currentNode.parentId === null || $scope.dialogOptions.currentNode.nodeType === "container", folderName: "", creatingFolder: false, + creatingDoctypeCollection: false }; var disableTemplates = Umbraco.Sys.ServerVariables.features.disabledFeatures.disableTemplates; @@ -24,6 +25,10 @@ function DocumentTypesCreateController($scope, $location, navigationService, con $scope.model.creatingFolder = true; }; + $scope.showCreateDocTypeCollection = function () { + $scope.model.creatingDoctypeCollection = true; + }; + $scope.createContainer = function () { if (formHelper.submitForm({ scope: $scope, formCtrl: this.createFolderForm, statusMessage: localizeCreateFolder })) { @@ -61,6 +66,54 @@ function DocumentTypesCreateController($scope, $location, navigationService, con } }; + $scope.createCollection = function () { + + if (formHelper.submitForm({ scope: $scope, formCtrl: this.createDoctypeCollectionForm, statusMessage: "Creating Doctype Collection..." })) { + + // see if we can find matching icons + var collectionIcon = "icon-folders", collectionItemIcon = "icon-document"; + iconHelper.getIcons().then(function (icons) { + + for (var i = 0; i < icons.length; i++) { + // for matching we'll require a full match for collection, partial match for item + if (icons[i].substring(5) == $scope.model.collectionName.toLowerCase()) { + collectionIcon = icons[i]; + } else if (icons[i].substring(5).indexOf($scope.model.collectionItemName.toLowerCase()) > -1) { + collectionItemIcon = icons[i]; + } + } + + contentTypeResource.createCollection(node.id, $scope.model.collectionName, $scope.model.collectionItemName, collectionIcon, collectionItemIcon).then(function (collectionData) { + + navigationService.hideMenu(); + $location.search('create', null); + $location.search('notemplate', null); + + formHelper.resetForm({ + scope: $scope + }); + + var section = appState.getSectionState("currentSection"); + + // redirect to the item id + $location.path("/settings/documenttypes/edit/" + collectionData.ItemId); + + }, function (err) { + + $scope.error = err; + + //show any notifications + if (angular.isArray(err.data.notifications)) { + for (var i = 0; i < err.data.notifications.length; i++) { + notificationsService.showNotification(err.data.notifications[i]); + } + } + }); + }); + } + + }; + // Disabling logic for creating document type with template if disableTemplates is set to true if (!disableTemplates) { $scope.createDocType = function () { diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.html b/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.html index e5043be785..549ad0452b 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.html +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.html @@ -1,6 +1,6 @@
    • + class="preview-rows columns" style="margin-top: 5px; margin-bottom: 25px; float:left">
      + ng-class="{last:$last}" + ng-repeat="area in layout.areas | filter:zeroWidthFilter" + ng-style="{width: percentage(area.grid) + '%', 'max-width': '100%'}">

      {{area.maxItems}}

      @@ -95,15 +95,13 @@
      - - + + - +
      - + - + - + - +
      diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/includeproperties.prevalues.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/includeproperties.prevalues.controller.js index 0cd199ae4d..216f1555e2 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/includeproperties.prevalues.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/includeproperties.prevalues.controller.js @@ -4,6 +4,9 @@ function includePropsPreValsController($rootScope, $scope, localizationService, $scope.model.value = []; } + $scope.hasError = false; + $scope.errorMsg = ""; + $scope.propertyAliases = []; $scope.selectedField = null; $scope.systemFields = [ @@ -45,6 +48,11 @@ function includePropsPreValsController($rootScope, $scope, localizationService, return alias; } + $scope.changeField = function () { + $scope.hasError = false; + $scope.errorMsg = ""; + } + $scope.removeField = function(e) { $scope.model.value = _.reject($scope.model.value, function (x) { return x.alias === e.alias; @@ -123,19 +131,34 @@ function includePropsPreValsController($rootScope, $scope, localizationService, $scope.addField = function () { var val = $scope.selectedField; - var isSystem = val.startsWith("_system_"); - if (isSystem) { - val = val.trimStart("_system_"); - } + if (val) { + var isSystem = val.startsWith("_system_"); + if (isSystem) { + val = val.trimStart("_system_"); + } - var exists = _.find($scope.model.value, function (i) { - return i.alias === val; - }); - if (!exists) { - $scope.model.value.push({ - alias: val, - isSystem: isSystem ? 1 : 0 + var exists = _.find($scope.model.value, function (i) { + return i.alias === val; }); + + if (!exists) { + $scope.hasError = false; + $scope.errorMsg = ""; + + $scope.model.value.push({ + alias: val, + isSystem: isSystem ? 1 : 0 + }); + } + else { + //there was an error, do the highlight (will be set back by the directive) + $scope.hasError = true; + $scope.errorMsg = "Property is already added"; + } + } + else { + $scope.hasError = true; + $scope.errorMsg = "No property selected"; } } diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/includeproperties.prevalues.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/includeproperties.prevalues.html index 2e210e635f..749d5b5cb0 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/includeproperties.prevalues.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/includeproperties.prevalues.html @@ -1,7 +1,7 @@ 
      - @@ -9,6 +9,7 @@ + {{errorMsg}}
      diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js index 8f9279fb02..62da8f268a 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js @@ -58,23 +58,26 @@ function listViewController($rootScope, $scope, $routeParams, $injector, $cookie items: [] }; - $scope.currentNodePermissions = {} + //when this is null, we don't check permissions + $scope.currentNodePermissions = null; - //Just ensure we do have an editorState - if (editorState.current) { - //Fetch current node allowed actions for the current user - //This is the current node & not each individual child node in the list - var currentUserPermissions = editorState.current.allowedActions; + if ($scope.entityType === "content") { + //Just ensure we do have an editorState + if (editorState.current) { + //Fetch current node allowed actions for the current user + //This is the current node & not each individual child node in the list + var currentUserPermissions = editorState.current.allowedActions; - //Create a nicer model rather than the funky & hard to remember permissions strings - $scope.currentNodePermissions = { - "canCopy": _.contains(currentUserPermissions, 'O'), //Magic Char = O - "canCreate": _.contains(currentUserPermissions, 'C'), //Magic Char = C - "canDelete": _.contains(currentUserPermissions, 'D'), //Magic Char = D - "canMove": _.contains(currentUserPermissions, 'M'), //Magic Char = M - "canPublish": _.contains(currentUserPermissions, 'U'), //Magic Char = U - "canUnpublish": _.contains(currentUserPermissions, 'U'), //Magic Char = Z (however UI says it can't be set, so if we can publish 'U' we can unpublish) - }; + //Create a nicer model rather than the funky & hard to remember permissions strings + $scope.currentNodePermissions = { + "canCopy": _.contains(currentUserPermissions, 'O'), //Magic Char = O + "canCreate": _.contains(currentUserPermissions, 'C'), //Magic Char = C + "canDelete": _.contains(currentUserPermissions, 'D'), //Magic Char = D + "canMove": _.contains(currentUserPermissions, 'M'), //Magic Char = M + "canPublish": _.contains(currentUserPermissions, 'U'), //Magic Char = U + "canUnpublish": _.contains(currentUserPermissions, 'U') //Magic Char = Z (however UI says it can't be set, so if we can publish 'U' we can unpublish) + }; + } } //when this is null, we don't check permissions diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html index 97500fd7c1..2683317dc1 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html @@ -10,7 +10,7 @@ - +
      Create diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.html index 7607a9391d..fd28929616 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.html @@ -7,6 +7,7 @@
      @@ -45,11 +45,11 @@ Add - +
      -
      +

      Tab:
      Select the tab who's properties should be displayed. If left blank, the first tab on the doc type will be used. diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.editor.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.editor.html index 29d8c882d1..5d89da51b6 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.editor.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.editor.html @@ -1,11 +1,11 @@ 

      - + -
      +

      {{property.notSupportedMessage}}

      diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.html index bc3e4547b9..9a5d75ae92 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.html @@ -1,54 +1,66 @@ -
      "); - // Build a placeholder cell that spans all the cells in the row: http://stackoverflow.com/questions/25845310/jquery-ui-sortable-and-table-cell-size + // Build a placeholder cell that spans all the cells in the row: https://stackoverflow.com/questions/25845310/jquery-ui-sortable-and-table-cell-size var cellCount = 0; $('td, th', ui.helper).each(function () { // For each td or th try and get it's colspan attribute, and add that or 1 to the total diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.controller.js index 17f0f3b698..c5a739bec2 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.controller.js @@ -1,6 +1,6 @@ angular.module("umbraco") .controller("Umbraco.PropertyEditors.RTEController", - function ($rootScope, $scope, $q, $locale, dialogService, $log, imageHelper, assetsService, $timeout, tinyMceService, angularHelper, stylesheetResource, macroService) { + function ($rootScope, $scope, $q, $locale, dialogService, $log, imageHelper, assetsService, $timeout, tinyMceService, angularHelper, stylesheetResource, macroService, editorState) { $scope.isLoading = true; @@ -273,11 +273,12 @@ angular.module("umbraco") syncContent(editor); }); - + tinyMceService.createLinkPicker(editor, $scope, function(currentTarget, anchorElement) { $scope.linkPickerOverlay = { view: "linkpicker", currentTarget: currentTarget, + anchors: tinyMceService.getAnchorNames(JSON.stringify(editorState.current.properties)), show: true, submit: function(model) { tinyMceService.insertLinkInEditor(editor, model.target, anchorElement); diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/tags/tags.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/tags/tags.controller.js index 06365d0483..05d36efbb7 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/tags/tags.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/tags/tags.controller.js @@ -7,13 +7,10 @@ angular.module("umbraco") $scope.isLoading = true; $scope.tagToAdd = ""; - assetsService.loadJs("lib/typeahead.js/typeahead.bundle.min.js", $scope).then(function () { + function setModelValue(val) { - $scope.isLoading = false; - - //load current value - - if ($scope.model.value) { + $scope.model.value = val || $scope.model.value; + if ($scope.model.value) { if (!$scope.model.config.storageType || $scope.model.config.storageType !== "Json") { //it is csv if (!$scope.model.value) { @@ -21,7 +18,14 @@ angular.module("umbraco") } else { if($scope.model.value.length > 0) { - $scope.model.value = $scope.model.value.split(","); + // split the csv string, and remove any duplicate values + var tempArray = $scope.model.value.split(',').map(function(v) { + return v.trim(); + }); + + $scope.model.value = tempArray.filter(function(v, i, self) { + return self.indexOf(v) === i; + }); } } } @@ -29,6 +33,14 @@ angular.module("umbraco") else { $scope.model.value = []; } + } + + assetsService.loadJs("lib/typeahead.js/typeahead.bundle.min.js", $scope).then(function () { + + $scope.isLoading = false; + + //load current value + setModelValue(); // Method required by the valPropertyValidator directive (returns true if the property editor has at least one tag selected) $scope.validateMandatory = function () { @@ -52,7 +64,7 @@ angular.module("umbraco") $scope.addTagOnEnter = function (e) { var code = e.keyCode || e.which; - if (code == 13) { //Enter keycode + if (code == 13) { //Enter keycode if ($element.find('.tags-' + $scope.model.alias).parent().find(".tt-dropdown-menu .tt-cursor").length === 0) { //this is required, otherwise the html form will attempt to submit. e.preventDefault(); @@ -67,35 +79,46 @@ angular.module("umbraco") addTag($scope.tagToAdd); $scope.tagToAdd = ""; //this clears the value stored in typeahead so it doesn't try to add the text again - // http://issues.umbraco.org/issue/U4-4947 + // https://issues.umbraco.org/issue/U4-4947 $typeahead.typeahead('val', ''); }; - + // Set the visible prompt to -1 to ensure it will not be visible + $scope.promptIsVisible = "-1"; $scope.removeTag = function (tag) { var i = $scope.model.value.indexOf(tag); + if (i >= 0) { + // Make sure to hide the prompt so it does not stay open because another item gets a new number in the array index + $scope.promptIsVisible = "-1"; + + // Remove the tag from the index $scope.model.value.splice(i, 1); + //this is required to re-validate $scope.propertyForm.tagCount.$setViewValue($scope.model.value.length); } }; + $scope.showPrompt = function (idx, tag){ + + var i = $scope.model.value.indexOf(tag); + + // Make the prompt visible for the clicked tag only + if (i === idx) { + $scope.promptIsVisible = i; + } + } + + $scope.hidePrompt = function(){ + $scope.promptIsVisible = "-1"; + } + //vice versa $scope.model.onValueChanged = function (newVal, oldVal) { //update the display val again if it has changed from the server - $scope.model.value = newVal; - - if (!$scope.model.config.storageType || $scope.model.config.storageType !== "Json") { - //it is csv - if (!$scope.model.value) { - $scope.model.value = []; - } - else { - $scope.model.value = $scope.model.value.split(","); - } - } + setModelValue(newVal); }; //configure the tags data source @@ -160,7 +183,7 @@ angular.module("umbraco") tagsHound.get(query, function (suggestions) { cb(removeCurrentTagsFromSuggestions(suggestions)); }); - }, + } }).bind("typeahead:selected", function (obj, datum, name) { angularHelper.safeApply($scope, function () { addTag(datum["value"]); @@ -190,4 +213,4 @@ angular.module("umbraco") }); } -); \ No newline at end of file +); diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/tags/tags.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/tags/tags.html index e9fbde9027..18990b3e4a 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/tags/tags.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/tags/tags.html @@ -1,27 +1,35 @@
      - -
      - Loading... -
      -
      +
      + Loading... +
      - +
      - - - - + - + + -
      - -
      \ No newline at end of file + + + + + + + + +
      + + diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/tags/tags.prevalues.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/tags/tags.prevalues.html index 2eb9aecf1e..d1113c41a4 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/tags/tags.prevalues.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/tags/tags.prevalues.html @@ -3,8 +3,8 @@ - \ No newline at end of file + diff --git a/src/Umbraco.Web.UI.Client/src/views/scripts/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/scripts/edit.controller.js index 68fd2d0107..edc7f52ae2 100644 --- a/src/Umbraco.Web.UI.Client/src/views/scripts/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/scripts/edit.controller.js @@ -156,7 +156,7 @@ }); }, readOnly: true - }, + } ]); // initial cursor placement diff --git a/src/Umbraco.Web.UI.Client/src/views/templates/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/templates/edit.controller.js index 36f64c11ee..b23d11dea1 100644 --- a/src/Umbraco.Web.UI.Client/src/views/templates/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/templates/edit.controller.js @@ -27,7 +27,7 @@ vm.page.keyboardShortcutsOverview.push(templateHelper.getTemplateEditorShortcuts()); - vm.save = function () { + vm.save = function (suppressNotification) { vm.page.saveButtonState = "busy"; vm.template.content = vm.editor.getValue(); @@ -44,11 +44,13 @@ rebindCallback: function (orignal, saved) {} }).then(function (saved) { + if (!suppressNotification) { localizationService.localizeMany(["speechBubbles_templateSavedHeader", "speechBubbles_templateSavedText"]).then(function(data){ var header = data[0]; var message = data[1]; notificationsService.success(header, message); }); + } vm.page.saveButtonState = "success"; @@ -134,6 +136,21 @@ vm.page.loading = false; vm.template = template; + // if this is a new template, bind to the blur event on the name + if ($routeParams.create) { + $timeout(function() { + var nameField = angular.element(document.querySelector('[data-element="editor-name-field"]')); + if (nameField) { + nameField.bind('blur', function(event) { + if (event.target.value) { + vm.save(true); + } + }); + } + }); + } + + //sync state editorState.set(vm.template); navigationService.syncTree({ tree: "templates", path: vm.template.path, forceReload: true }).then(function (syncArgs) { @@ -249,7 +266,7 @@ }); }, readOnly: true - }, + } ]); @@ -516,9 +533,13 @@ var availableMasterTemplates = []; // filter out the current template and the selected master template - angular.forEach(vm.templates, function(template){ - if(template.alias !== vm.template.alias && template.alias !== vm.template.masterTemplateAlias) { - availableMasterTemplates.push(template); + angular.forEach(vm.templates, function (template) { + if (template.alias !== vm.template.alias && template.alias !== vm.template.masterTemplateAlias) { + var templatePathArray = template.path.split(','); + // filter descendant templates of current template + if (templatePathArray.indexOf(String(vm.template.id)) === -1) { + availableMasterTemplates.push(template); + } } }); diff --git a/src/Umbraco.Web.UI.Client/src/views/users/user.controller.js b/src/Umbraco.Web.UI.Client/src/views/users/user.controller.js index 0f3519c7ba..1569b5979b 100644 --- a/src/Umbraco.Web.UI.Client/src/views/users/user.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/users/user.controller.js @@ -31,6 +31,8 @@ vm.disableUser = disableUser; vm.enableUser = enableUser; vm.unlockUser = unlockUser; + vm.resendInvite = resendInvite; + vm.deleteNonLoggedInUser = deleteNonLoggedInUser; vm.changeAvatar = changeAvatar; vm.clearAvatar = clearAvatar; vm.save = save; @@ -49,7 +51,9 @@ "sections_users", "content_contentRoot", "media_mediaRoot", - "user_noStartNodes" + "user_noStartNodes", + "user_defaultInvitationMessage", + "user_deleteUserConfirmation" ]; localizationService.localizeMany(labelKeys).then(function (values) { @@ -61,6 +65,8 @@ vm.labels.contentRoot = values[5]; vm.labels.mediaRoot = values[6]; vm.labels.noStartNodes = values[7]; + vm.labels.defaultInvitationMessage = values[8]; + vm.labels.deleteUserConfirmation = values[9]; }); // get user @@ -341,8 +347,10 @@ vm.unlockUserButtonState = "busy"; usersResource.unlockUsers([vm.user.id]).then(function (data) { vm.user.userState = 0; + vm.user.failedPasswordAttempts = 0; setUserDisplayState(); vm.unlockUserButtonState = "success"; + formHelper.showNotifications(data); }, function (error) { vm.unlockUserButtonState = "error"; @@ -350,6 +358,44 @@ }); } + function resendInvite() { + vm.resendInviteButtonState = "busy"; + + if (vm.resendInviteMessage) { + vm.user.message = vm.resendInviteMessage; + } + else { + vm.user.message = vm.labels.defaultInvitationMessage; + } + + usersResource.inviteUser(vm.user).then(function (data) { + vm.resendInviteButtonState = "success"; + vm.resendInviteMessage = ""; + formHelper.showNotifications(data); + }, function (error) { + vm.resendInviteButtonState = "error"; + formHelper.showNotifications(error.data); + }); + } + + function deleteNonLoggedInUser() { + vm.deleteNotLoggedInUserButtonState = "busy"; + + var confirmationMessage = vm.labels.deleteUserConfirmation; + if (!confirm(confirmationMessage)) { + vm.deleteNotLoggedInUserButtonState = "danger"; + return; + } + + usersResource.deleteNonLoggedInUser(vm.user.id).then(function (data) { + formHelper.showNotifications(data); + goToPage(vm.breadcrumbs[0]); + }, function (error) { + vm.deleteNotLoggedInUserButtonState = "error"; + formHelper.showNotifications(error.data); + }); + } + function clearAvatar() { // get user usersResource.clearAvatar(vm.user.id).then(function (data) { diff --git a/src/Umbraco.Web.UI.Client/src/views/users/views/user/details.html b/src/Umbraco.Web.UI.Client/src/views/users/views/user/details.html index 67f204aa2f..7c93f1fd84 100644 --- a/src/Umbraco.Web.UI.Client/src/views/users/views/user/details.html +++ b/src/Umbraco.Web.UI.Client/src/views/users/views/user/details.html @@ -8,14 +8,16 @@ - + @@ -239,7 +241,7 @@
      -
      - + + + +
      + + + +
      +
      Last login: @@ -358,4 +388,4 @@
      -
      \ No newline at end of file + diff --git a/src/Umbraco.Web.UI/Media/Web.config b/src/Umbraco.Web.UI/Media/Web.config index 6cbb733ea7..cd48da3840 100644 --- a/src/Umbraco.Web.UI/Media/Web.config +++ b/src/Umbraco.Web.UI/Media/Web.config @@ -6,4 +6,4 @@ - \ No newline at end of file + diff --git a/src/Umbraco.Web.UI/Properties/Settings.Designer.cs b/src/Umbraco.Web.UI/Properties/Settings.Designer.cs index 11dc1e00c3..24b8be234b 100644 --- a/src/Umbraco.Web.UI/Properties/Settings.Designer.cs +++ b/src/Umbraco.Web.UI/Properties/Settings.Designer.cs @@ -25,7 +25,7 @@ namespace Umbraco.Web.UI.Properties { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("http://our.umbraco.org/umbraco/webservices/api/repository.asmx")] + [global::System.Configuration.DefaultSettingValueAttribute("https://our.umbraco.com/umbraco/webservices/api/repository.asmx")] public string Umbraco_Web_UI_org_umbraco_our_Repository { get { return ((string)(this["Umbraco_Web_UI_org_umbraco_our_Repository"])); diff --git a/src/Umbraco.Web.UI/Properties/Settings.settings b/src/Umbraco.Web.UI/Properties/Settings.settings index 5df40e9fea..9ea781aa29 100644 --- a/src/Umbraco.Web.UI/Properties/Settings.settings +++ b/src/Umbraco.Web.UI/Properties/Settings.settings @@ -3,7 +3,7 @@ - http://our.umbraco.org/umbraco/webservices/api/repository.asmx + https://our.umbraco.com/umbraco/webservices/api/repository.asmx \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index 3a7cbc4429..c07cd295f9 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -492,6 +492,7 @@ + @@ -560,9 +561,6 @@ scripting.config - - metablogConfig.config - ExamineSettings.config @@ -759,7 +757,6 @@ - @@ -993,7 +990,6 @@ Designer - Designer @@ -1034,9 +1030,9 @@ xcopy "$(ProjectDir)"..\packages\SqlServerCE.4.0.0.1\x86\*.* "$(TargetDir)x86\" True True - 7110 + 7130 / - http://localhost:7110 + http://localhost:7130 False False diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/RegisterMember.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/RegisterMember.cshtml index 787cfbfcc7..9a978fc152 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/RegisterMember.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/RegisterMember.cshtml @@ -47,7 +47,7 @@ @if (success) { @* This message will show if RedirectOnSucces is set to false (default) *@ -

      Registration succeeeded.

      +

      Registration succeeded.

      } else { @@ -101,4 +101,4 @@ else } -} \ No newline at end of file +} diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/nb.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/nb.xml index ce0975b780..bafef111d2 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/nb.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/nb.xml @@ -2,7 +2,7 @@ The Umbraco community - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files Angi domene @@ -469,7 +469,7 @@ Databasekonfigurasjon installer-knappen for å installere Umbraco %0% databasen]]> Neste for å fortsette.]]> - Databasen ble ikke funnet! Vennligst sjekk at informasjonen i "connection string" i "web.config"-filen er korrekt.

      For å fortsette, vennligst rediger "web.config"-filen (bruk Visual Studio eller din favoritteditor), rull ned til bunnen, og legg til tilkoblingsstrengen for din database i nøkkelen "umbracoDbDSN" og lagre filen.

      Klikk prøv på nytt når du er ferdig.
      Mer informasjon om redigering av web.config her.

      ]]> + Databasen ble ikke funnet! Vennligst sjekk at informasjonen i "connection string" i "web.config"-filen er korrekt.

      For å fortsette, vennligst rediger "web.config"-filen (bruk Visual Studio eller din favoritteditor), rull ned til bunnen, og legg til tilkoblingsstrengen for din database i nøkkelen "umbracoDbDSN" og lagre filen.

      Klikk prøv på nytt når du er ferdig.
      Mer informasjon om redigering av web.config her.

      ]]>
      Vennligst kontakt din ISP om nødvendig. Hvis du installerer på en lokal maskin eller server, må du kanskje skaffe informasjonen fra din systemadministrator.]]> Trykk på knappen oppgrader for å oppgradere databasen din til Umbraco %0%

      Ikke vær urolig - intet innhold vil bli slettet og alt vil fortsette å virke etterpå!

      ]]>
      Trykk Neste for å fortsette.]]> diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/zh_tw.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/zh_tw.xml index b1997a1c0a..16387728b1 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/zh_tw.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/zh_tw.xml @@ -2,7 +2,7 @@ The Umbraco community - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files 管理主機名稱 @@ -171,7 +171,7 @@ 子項目 目標 預計發表的時間(伺服器端) - 這是什麼意思?]]> + 這是什麼意思?]]> 點選以便上傳 @@ -553,7 +553,7 @@

      請編輯檔案"web.config" (例如使用Visual Studio或您喜歡的編輯器),移動到檔案底部,並在名稱為"UmbracoDbDSN"的字串中設定資料庫連結資訊,並存檔。

      點選重試按鈕當上述步驟完成。
      - + 在此查詢更多編輯web.config的資訊。

      ]]> 若需要時,請聯繫您的網路公司。如果您在本地機器或伺服器安裝的話,您也許需要聯絡系統管理者。]]> diff --git a/src/Umbraco.Web.UI/Umbraco/developer/Packages/installer.aspx b/src/Umbraco.Web.UI/Umbraco/developer/Packages/installer.aspx new file mode 100644 index 0000000000..37dca8400e --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/developer/Packages/installer.aspx @@ -0,0 +1,10 @@ +<%@ Page Language="c#" MasterPageFile="../../masterpages/umbracoPage.Master" +AutoEventWireup="True" Inherits="umbraco.presentation.developer.packages.Installer" Trace="false" ValidateRequest="false" %> +<%@ Register TagPrefix="cc1" Namespace="umbraco.uicontrols" Assembly="controls" %> + + + + + + + diff --git a/src/Umbraco.Web.UI/Views/Web.config b/src/Umbraco.Web.UI/Views/Web.config index 479445713d..bc9ac2bdef 100644 --- a/src/Umbraco.Web.UI/Views/Web.config +++ b/src/Umbraco.Web.UI/Views/Web.config @@ -1,65 +1,65 @@ - - -
      -
      - - + + +
      +
      + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - + + + - - - - + + + + - - - - - - - + + + + + + - - + + - - - - - + + + + + diff --git a/src/Umbraco.Web.UI/config/BackOfficeTours/getting-started.json b/src/Umbraco.Web.UI/config/BackOfficeTours/getting-started.json index e6c42930a8..0508676f4a 100644 --- a/src/Umbraco.Web.UI/config/BackOfficeTours/getting-started.json +++ b/src/Umbraco.Web.UI/config/BackOfficeTours/getting-started.json @@ -54,7 +54,7 @@ { "element": "#applications [data-element='section-user']", "title": "User profile", - "content": "Click on your user avatar to open the user profile dialog.", + "content": "Now click on your user avatar to open the user profile dialog.", "event": "click", "backdropOpacity": 0.6 }, @@ -140,7 +140,7 @@ { "element": "[data-element='editor-description']", "title": "Enter a description", - "content": "

      A description helps to pick the right document type when creating content.

      Write a description to our Home page. It could be:

      The home page of the website

      " + "content": "

      A description helps to pick the right document type when creating content.

      Write a description for our Home page. It could be:

      The home page of the website

      " }, { "element": "[data-element='group-add']", @@ -169,7 +169,7 @@ { "element": "[data-element~='overlay-property-settings'] [data-element='property-description']", "title": "Enter a description", - "content": "

      A description will help to fill in the right content.

      Enter a description for the property editor. It could be:

      Write a nice introduction text so the visitors feel welcome

      " + "content": "

      A description will help your editor fill in the right content.

      Enter a description for the property editor. It could be:

      Write a nice introduction text so the visitors feel welcome

      " }, { "element": "[data-element~='overlay-property-settings'] [data-element='editor-add']", @@ -207,6 +207,18 @@ "content": "Click Submit to add the property to the document type.", "event": "click" }, + { + "element": "[data-element~='sub-view-permissions']", + "title": "Check the document type permissions", + "content": "Click Permissions to view the permissions page.", + "event": "click" + }, + { + "element": "[data-element~='permissions-allow-as-root']", + "title": "Allow this document type to work at the root of your site", + "content": "Toggle the switch Allow as root to allow new content pages based on this document type to be created at the root of your site", + "event": "click" + }, { "element": "[data-element='button-save']", "title": "Save the document type", @@ -247,7 +259,7 @@ "title": "Open context menu", "content": "

      Open the context menu by hovering over the root of the content section.

      Now click the three small dots to the right.

      ", "event": "click", - "eventElement": "[data-element='tree-root'] [data-element='tree-item-options']" + "eventElement": "#tree [data-element='tree-root'] [data-element='tree-item-options']" }, { "element": "[data-element='action-create-homePage']", @@ -346,7 +358,7 @@ "steps": [ { "title": "View your Umbraco site", - "content": "

      Our three main components to a page are done: Document type, Template, and Content. It is now time to see the result.

      In this tour you will learn how to see your published website.

      ", + "content": "

      Our three main components for a page are done: Document type, Template, and Content. It is now time to see the result.

      In this tour you will learn how to see your published website.

      ", "type": "intro" }, { diff --git a/src/Umbraco.Web.UI/config/EmbeddedMedia.Release.config b/src/Umbraco.Web.UI/config/EmbeddedMedia.Release.config index 6472968e44..0c7e4c19f0 100644 --- a/src/Umbraco.Web.UI/config/EmbeddedMedia.Release.config +++ b/src/Umbraco.Web.UI/config/EmbeddedMedia.Release.config @@ -26,37 +26,45 @@ - + - + - + - + - + + + + + + json + + + - + @@ -116,4 +124,11 @@ + + + + + + + diff --git a/src/Umbraco.Web.UI/config/EmbeddedMedia.config b/src/Umbraco.Web.UI/config/EmbeddedMedia.config index cf9fb4f22d..bf81cf720b 100644 --- a/src/Umbraco.Web.UI/config/EmbeddedMedia.config +++ b/src/Umbraco.Web.UI/config/EmbeddedMedia.config @@ -26,37 +26,45 @@ - + - + - + - + - + + + + + + json + + + - + @@ -116,4 +124,11 @@ + + + + + + + diff --git a/src/Umbraco.Web.UI/config/HealthChecks.Release.config b/src/Umbraco.Web.UI/config/HealthChecks.Release.config index 69324bf513..1eb7b0e07a 100644 --- a/src/Umbraco.Web.UI/config/HealthChecks.Release.config +++ b/src/Umbraco.Web.UI/config/HealthChecks.Release.config @@ -2,10 +2,10 @@ diff --git a/src/Umbraco.Web.UI/config/HealthChecks.config b/src/Umbraco.Web.UI/config/HealthChecks.config index 75cf3713bd..4e927e8bb6 100644 --- a/src/Umbraco.Web.UI/config/HealthChecks.config +++ b/src/Umbraco.Web.UI/config/HealthChecks.config @@ -2,10 +2,10 @@ diff --git a/src/Umbraco.Web.UI/config/feedProxy.Release.config b/src/Umbraco.Web.UI/config/feedProxy.Release.config index e76284c13f..7e079e371e 100644 --- a/src/Umbraco.Web.UI/config/feedProxy.Release.config +++ b/src/Umbraco.Web.UI/config/feedProxy.Release.config @@ -8,4 +8,5 @@ + diff --git a/src/Umbraco.Web.UI/config/feedProxy.config b/src/Umbraco.Web.UI/config/feedProxy.config index e76284c13f..7e079e371e 100644 --- a/src/Umbraco.Web.UI/config/feedProxy.config +++ b/src/Umbraco.Web.UI/config/feedProxy.config @@ -8,4 +8,5 @@ + diff --git a/src/Umbraco.Web.UI/config/metablogConfig.Release.config b/src/Umbraco.Web.UI/config/metablogConfig.Release.config deleted file mode 100644 index a714b2cbe9..0000000000 --- a/src/Umbraco.Web.UI/config/metablogConfig.Release.config +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/src/Umbraco.Web.UI/config/metablogConfig.config b/src/Umbraco.Web.UI/config/metablogConfig.config deleted file mode 100644 index a3f43d9480..0000000000 --- a/src/Umbraco.Web.UI/config/metablogConfig.config +++ /dev/null @@ -1,19 +0,0 @@ - - - - My FAQs - 0 - 1080 - False - Articulate - - - - - - - - - - - \ No newline at end of file diff --git a/src/Umbraco.Web.UI/config/splashes/noNodes.aspx b/src/Umbraco.Web.UI/config/splashes/noNodes.aspx index d46ecd6113..bf68c3ac32 100644 --- a/src/Umbraco.Web.UI/config/splashes/noNodes.aspx +++ b/src/Umbraco.Web.UI/config/splashes/noNodes.aspx @@ -39,14 +39,14 @@

      Easy start with Umbraco.tv

      We have created a bunch of 'how-to' videos, to get you easily started with Umbraco. Learn how to build projects in just a couple of minutes. Easiest CMS in the world.

      - Umbraco.tv → + Umbraco.tv →

      Be a part of the community

      The Umbraco community is the best of its kind, be sure to visit, and if you have any questions, we're sure that you can get your answers from the community.

      - our.Umbraco → + our.Umbraco →
      diff --git a/src/Umbraco.Web.UI/config/trees.Release.config b/src/Umbraco.Web.UI/config/trees.Release.config index c0205c7db4..f3761d2c96 100644 --- a/src/Umbraco.Web.UI/config/trees.Release.config +++ b/src/Umbraco.Web.UI/config/trees.Release.config @@ -16,8 +16,9 @@ - + + @@ -44,4 +45,4 @@ - \ No newline at end of file + diff --git a/src/Umbraco.Web.UI/config/trees.config b/src/Umbraco.Web.UI/config/trees.config index a36df8bbff..14f8fd9dcf 100644 --- a/src/Umbraco.Web.UI/config/trees.config +++ b/src/Umbraco.Web.UI/config/trees.config @@ -14,7 +14,7 @@ - + @@ -23,21 +23,21 @@ - - - - - - - - - - - + + + + + + + + + + + - \ No newline at end of file + diff --git a/src/Umbraco.Web.UI/config/umbracoSettings.Release.config b/src/Umbraco.Web.UI/config/umbracoSettings.Release.config index 3f06c398f5..88d350225b 100644 --- a/src/Umbraco.Web.UI/config/umbracoSettings.Release.config +++ b/src/Umbraco.Web.UI/config/umbracoSettings.Release.config @@ -1,11 +1,11 @@ - @@ -40,7 +40,7 @@ - In Preview Mode - click to end]]> + In Preview Mode - click to end]]> diff --git a/src/Umbraco.Web.UI/config/umbracoSettings.config b/src/Umbraco.Web.UI/config/umbracoSettings.config index 658eb07f0a..aa8225b082 100644 --- a/src/Umbraco.Web.UI/config/umbracoSettings.config +++ b/src/Umbraco.Web.UI/config/umbracoSettings.config @@ -14,7 +14,7 @@ - umbracoWidth + umbracoWidth umbracoHeight umbracoBytes umbracoExtension @@ -84,7 +84,7 @@ - In Preview Mode - click to end + In Preview Mode - click to end ]]> @@ -304,7 +304,13 @@ By default you can add a altTemplate querystring or append a template name to the current URL which will make Umbraco render the content on the current page with the template you requested, for example: http://mysite.com/about-us/?altTemplate=Home and http://mysite.com/about-us/Home would render the - "About Us" page with a template with the alias Home. Setting this setting to true stops that behavior + "About Us" page with a template with the alias Home. Setting this setting to true stops that behavior + @validateAlternativeTemplates + By default you can add a altTemplate querystring or append a template name to the current URL which + will make Umbraco render the content on the current page with the template you requested, for example: + http://mysite.com/about-us/?altTemplate=Home and http://mysite.com/about-us/Home would render the + "About Us" page with a template with the alias Home. Setting this setting to true will ensure that + only templates that have been permitted on the document type will be allowed @disableFindContentByIdPath By default you can call any content Id in the url and show the content with that id, for example: http://mysite.com/1092 or http://mysite.com/1092.aspx would render the content with id 1092. Setting @@ -316,7 +322,7 @@ --> diff --git a/src/Umbraco.Web.UI/umbraco/Install/Views/Web.config b/src/Umbraco.Web.UI/umbraco/Install/Views/Web.config index d7f2ec9848..a95df8b9d7 100644 --- a/src/Umbraco.Web.UI/umbraco/Install/Views/Web.config +++ b/src/Umbraco.Web.UI/umbraco/Install/Views/Web.config @@ -1,58 +1,58 @@ - - -
      -
      - - + + +
      +
      + + - - - - - - - - - - - + + + + + + + + + + + - - - + + + - - - - + + + + - - - - - - - + + + + + + + - - + + - - - - - + + + + + diff --git a/src/Umbraco.Web.UI/umbraco/Views/Default.cshtml b/src/Umbraco.Web.UI/umbraco/Views/Default.cshtml index d0b0118870..fb69579bf6 100644 --- a/src/Umbraco.Web.UI/umbraco/Views/Default.cshtml +++ b/src/Umbraco.Web.UI/umbraco/Views/Default.cshtml @@ -1,19 +1,10 @@ -@using System.Collections -@using System.Net.Http -@using System.Web.Mvc.Html -@using Umbraco.Core +@using Umbraco.Core @using ClientDependency.Core @using ClientDependency.Core.Mvc -@using Microsoft.Owin.Security -@using Newtonsoft.Json -@using Newtonsoft.Json.Linq @using Umbraco.Core.IO @using Umbraco.Web -@using Umbraco.Web.Editors @using umbraco - @inherits System.Web.Mvc.WebViewPage - @{ var isDebug = false; if (Request.RawUrl.IndexOf('?') >= 0) @@ -32,9 +23,7 @@ .RequiresCss("lib/bootstrap-social/bootstrap-social.css", "Umbraco") .RequiresCss("lib/font-awesome/css/font-awesome.min.css", "Umbraco"); } - - @@ -51,20 +40,27 @@ new BasicPath("Umbraco", IOHelper.ResolveUrl(SystemDirectories.Umbraco)), new BasicPath("UmbracoClient", IOHelper.ResolveUrl(SystemDirectories.UmbracoClient))) -
      - + - +
      -
      +
      + +
      - +
      - @Html.BareMinimumServerVariablesScript(Url, Url.Action("ExternalLogin", "BackOffice", new { area = ViewBag.UmbracoPath })) + @Html.BareMinimumServerVariablesScript(Url, ApplicationContext.Current, Url.Action("ExternalLogin", "BackOffice", new { area = ViewBag.UmbracoPath })) - - - @*And finally we can load in our angular app*@ - - + + @if (isDebug) { - + @Html.RenderProfiler() } - diff --git a/src/Umbraco.Web.UI/umbraco/config/create/UI.xml b/src/Umbraco.Web.UI/umbraco/config/create/UI.xml index c1fc5c06b9..a1010a142d 100644 --- a/src/Umbraco.Web.UI/umbraco/config/create/UI.xml +++ b/src/Umbraco.Web.UI/umbraco/config/create/UI.xml @@ -73,7 +73,7 @@ - +
      Dictionary editor egenskab
      /create/simple.ascx diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/da.xml b/src/Umbraco.Web.UI/umbraco/config/lang/da.xml index 787fa211b4..8984ffa81a 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/da.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/da.xml @@ -2,7 +2,7 @@ The Umbraco community - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files Tilføj domæne @@ -95,9 +95,6 @@ Domæner - - For - Ryd valg Vælg @@ -135,6 +132,30 @@ Gem og generer modeller Fortryd Genskab + Slet tag + Fortryd + Bekræft + + + For + Brugeren har slettet indholdet + Brugeren har afpubliceret indholdet + Brugeren har gemt og udgivet indholdet + Brugeren har gemt indholdet + Brugeren har flyttet indholdet + Brugeren har kopieret indholdet + Brugeren har tilbagerullet indholdet til en tidligere tilstand + Brugeren har sendt indholdet til udgivelse + Brugeren har sendt indholdet til oversættelse + Kopieret + Udgivet + Flyttet + Gemt + Slettet + Afpubliceret + Indhold tilbagerullet + Sendt til udgivelse + Sendt til oversættelse For at skifte det valgte indholds dokumenttype, skal du først vælge en ny dokumenttype, som er gyldig på denne placering. @@ -191,6 +212,9 @@ Upd: dette dokument er udgiver, men er ikke i cachen (intern fejl) Kunne ikke hente url'en Dette dokument er udgivet, men dets url ville kollidere med indholdet %0% + Udgiv + Udgivet + Udgivet (Ventede ændringer) Udgivet Udgivelsesstatus Udgivelsesdato @@ -204,6 +228,7 @@ Alternativ tekst (valgfri) Type Afpublicér + Afpubliceret Sidst redigeret Tidspunkt for seneste redigering Fjern fil @@ -213,7 +238,7 @@ Undersider Åben i vindue Dette oversætter til den følgende tid på serveren: - Hvad betyder det?]]> + Hvad betyder det?]]> Er du sikker på, at du vil slette dette element? Egenskaben %0% anvender editoren %1% som ikke er understøttet af Nested Content. Tilføj en ny tekstboks @@ -234,6 +259,7 @@ Slip filerne her... Link til medie eller klik her for at vælge filer + Du kan trække filer herind for at uploade Tilladte filtyper er kun Kan ikke uploade denne fil, den har ikke en godkendt filtype Maks filstørrelse er @@ -397,6 +423,7 @@ Navnet '%0%' eksisterer allerede. ]]> + Ordbog Indtast dit brugernavn @@ -682,7 +709,7 @@ Næste for at fortsætte.]]> Databasen er ikke fundet. Kontrollér venligst at informationen i database forbindelsesstrengen i "web.config" filen er korrekt.

      -

      For at fortsætte bedes du venligst rette "web.config" filen (ved at bruge Visual Studio eller dit favoritprogram), scroll til bunden, tilføj forbindelsesstrengen til din database i feltet som hedder "umbracoDbDSN" og gem filen.

      Klik på Forsøg igen knappen når du er færdig.
      Mere information om at redigere web.config her.

      ]]> +

      For at fortsætte bedes du venligst rette "web.config" filen (ved at bruge Visual Studio eller dit favoritprogram), scroll til bunden, tilføj forbindelsesstrengen til din database i feltet som hedder "umbracoDbDSN" og gem filen.

      Klik på Forsøg igen knappen når du er færdig.
      Mere information om at redigere web.config her.

      ]]>
      Kontakt venligst din ISP hvis det er nødvendigt. Hvis du installerer på en lokal maskine eller server kan du muligvis få informationerne fra din systemadministrator.]]> Tryk på Opgradér knappen for at opgradere din database til Umbraco %0%

      Bare rolig - intet indhold vil blive slettet og alt vil stadig fungere bagefter!

      ]]>
      @@ -763,6 +790,8 @@ Glemt adgangskode? En e-mail vil blive sendt til den angivne adresse med et link til at nulstille din adgangskode En e-mail med instruktioner for nulstilling af adgangskoden vil blive sendt til den angivne adresse, hvis det matcher vores optegnelser + Vis adgangskode + Skjul adgangskode Tilbage til login formular Angiv en ny adgangskode Din adgangskode er blevet opdateret @@ -961,7 +990,7 @@ Mange hilsner fra Umbraco robotten Nulstil - + Nuværende version @@ -1125,19 +1154,19 @@ Mange hilsner fra Umbraco robotten Makro - En makro er et element, som kan have forskellige indstillinger, når det indsættes. + En makro er et element, som kan have forskellige indstillinger, når det indsættes. Brug det som en genbrugelig del af dit design såsom gallerier, formularer og lister. Sideværdi - Viser værdien af et felt fra den nuværende side. Kan indstilles til at bruge rekursive værdier eller + Viser værdien af et felt fra den nuværende side. Kan indstilles til at bruge rekursive værdier eller vise en standardværdi i tilfælde af, at feltet er tomt. Partial view - Et Partial View er et skabelonelement, som kan indsættes i andre skabeloner og derved + Et Partial View er et skabelonelement, som kan indsættes i andre skabeloner og derved genbruges og deles på tværs af sideskabelonerne. @@ -1148,7 +1177,7 @@ Mange hilsner fra Umbraco robotten Indsæt en underliggende skabelon @RenderBody() element. ]]> @@ -1157,8 +1186,8 @@ Mange hilsner fra Umbraco robotten Definer en sektion @section { ... }. Herefter kan denne sektion flettes ind i + Definerer en del af din skabelon som en navngivet sektion, ved at + omkranse den i @section { ... }. Herefter kan denne sektion flettes ind i overliggende skabelon ved at indsætte et @RenderSection element. ]]> @@ -1166,15 +1195,15 @@ Mange hilsner fra Umbraco robotten Indsæt en sektion @RenderSection(name) element. Den underliggende skabelon skal have + Henter indholdet af en sektion fra den underliggende skabelon ind, ved at indsætte et + @RenderSection(name) element. Den underliggende skabelon skal have defineret en sektion via et @section [name]{ ... } element. ]]> Sektionsnavn Sektionen er obligatorisk - + Hvis obligatorisk, skal underskabelonen indeholde en @section -definition. @@ -1186,7 +1215,7 @@ Mange hilsner fra Umbraco robotten Returner alt indhold indhold af typen "%0%" - + fra mit website hvor @@ -1218,14 +1247,14 @@ Mange hilsner fra Umbraco robotten Skabelon - + Rich Text Editor - Image + Billede Macro Embed - Headline - Quote + Overskrift + Citat Vælg indholdstype Vælg layout Tilføj række @@ -1241,9 +1270,9 @@ Mange hilsner fra Umbraco robotten Billedtekst... Skriv her... - Gitterlayout - Et layout er det overordnede arbejdsområde til dit gitter - du vil typisk kun behøve ét eller to - Tilføj gitterlayout + Grid layout + Et layout er det overordnede arbejdsområde til dit grid - du vil typisk kun behøve ét eller to + Tilføj grid layout Juster dit layout ved at justere kolonnebredder og tilføj yderligere sektioner Rækkekonfigurationer @@ -1252,7 +1281,7 @@ Mange hilsner fra Umbraco robotten Juster rækken ved at indstille cellebredder og tilføje yderligere celler Kolonner - Det totale antaller kolonner i gitteret + Det totale antal kolonner i dit grid Indstillinger Konfigurer, hvilket indstillinger, brugeren kan ændre @@ -1352,10 +1381,10 @@ Mange hilsner fra Umbraco robotten Indsæt før felt Rekursivt Standard felter - Uppercase + Store bogstaver URL encode Hvis indholdet af felterne skal sendes til en url, skal denne slåes til så specialtegn formateres - Denne tekst vil blive brugt hvis ovenstående felter er tomme + Denne tekst bruges hvis ovenstående felter er tomme Dette felt vil blive brugt hvis ovenstående felt er tomt Ja, med klokkeslæt. Dato/tid separator: @@ -1539,7 +1568,7 @@ Mange hilsner fra Umbraco robotten - Validation + Validering Valider som e-mail Valider som tal Valider som Url @@ -1577,4 +1606,11 @@ Mange hilsner fra Umbraco robotten Karakterer tilbage + + Slettet indhold med Id: {0} Relateret til original "parent" med id: {1} + Slettet medie med Id: {0} relateret til original "parent" / mappe med id: {1} + Kan ikke automatisk genoprette dette dokument/medie + Der findes ikke nogen "Genopret" relation for dette dokument/medie. Brug "Flyt" muligheden fra menuen for at flytte det manuelt. + Det dokument/medie du ønsker at genoprette under ('%0%') er i skraldespanden. Brug "Flyt" muligheden fra menuen for at flytte det manuelt. +
      diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/de.xml b/src/Umbraco.Web.UI/umbraco/config/lang/de.xml index d82662cfae..467d64897a 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/de.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/de.xml @@ -2,7 +2,7 @@ The Umbraco community - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files Hostnamen verwalten @@ -465,7 +465,7 @@ Die Datenbank wurde für Umbraco %0% konfiguriert. Klicken Sie auf <strong>weiter</strong>, um fortzufahren. <p>Die angegebene Datenbank ist leider nicht erreichbar. Bitte prüfen Sie die Verbindungszeichenfolge ("Connection String") in der "web.config"-Datei.</p> <p>Um fortzufahren, passen Sie bitte die "web.config"-Datei mit einem beliebigen Text-Editor an. Scrollen Sie dazu nach unten, fügen Sie die Verbindungszeichenfolge für die zuverbindende Datenbank als Eintrag "UmbracoDbDSN" hinzu und speichern Sie die Datei.</p> -<p>Klicken Sie nach erfolgter Anpassung auf <strong>Wiederholen</strong>.<br />Wenn Sie weitere technische Informationen benötigen, besuchen Sie <a href="http://our.Umbraco.org/wiki" target="_blank">The Umbraco documentation wiki</a>.</p> +<p>Klicken Sie nach erfolgter Anpassung auf <strong>Wiederholen</strong>.<br />Wenn Sie weitere technische Informationen benötigen, besuchen Sie <a href="https://our.umbraco.com/wiki" target="_blank">The Umbraco documentation wiki</a>.</p> Um diesen Schritt abzuschließen, müssen Sie die notwendigen Informationen zur Datenbankverbindung angeben.<br />Bitte kontaktieren Sie Ihren Provider bzw. Server-Administrator für weitere Informationen. diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml index 2d3af2c4de..80c18a597d 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml @@ -2,7 +2,7 @@ The Umbraco community - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files Culture and Hostnames @@ -46,6 +46,7 @@ Set permissions Unlock Create Content Template + Resend Invitation Content @@ -100,9 +101,6 @@ Domains - - Viewing for - Clear selection Select @@ -140,6 +138,30 @@ Save and generate models Undo Redo + Delete tag + Cancel + Confirm + + + Viewing for + Delete Content performed by user + UnPublish performed by user + Save and Publish performed by user + Save Content performed by user + Move Content performed by user + Copy Content performed by user + Content rollback performed by user + Content Send To Publish performed by user + Content Send To Translation performed by user + Copy + Publish + Move + Save + Delete + Unpublish + Rollback + Send To Publish + Send To Translation To change the document type for the selected content, first select from the list of valid types for this location. @@ -222,7 +244,7 @@ Child items Target This translates to the following time on the server: - What does this mean?]]> + What does this mean?]]> Are you sure you want to delete this item? Property %0% uses editor %1% which is not supported by Nested Content. Add another text box @@ -245,6 +267,7 @@ Drop your files here... Link to media or click here to choose files + You can drag files here to upload Only allowed file types are Cannot upload this file, it does not have an approved file type Max file size is @@ -286,6 +309,7 @@ Discard changes You have unsaved changes Are you sure you want to navigate away from this page? - you have unsaved changes + Unpublishing will remove this page and all its descendants from the site. Done @@ -318,6 +342,7 @@ Link title Link + Anchor / querystring Name Manage hostnames Close this window @@ -418,6 +443,7 @@ The key '%0%' already exists. ]]> + Dictionary overview Enter your username @@ -435,6 +461,7 @@ Enter your email... Enter a message... Your username is usually your email + #value or ?key=value Allow at root @@ -630,6 +657,7 @@ Submit Type Type to search... + under Up Update Upgrade @@ -733,7 +761,7 @@

      To proceed, please edit the "web.config" file (using Visual Studio or your favourite text editor), scroll to the bottom, add the connection string for your database in the key named "UmbracoDbDSN" and save the file.

      Click the retry button when - done.
      + done.
      More information on editing web.config here.

      ]]> @@ -888,6 +916,8 @@ To manage your website, simply open the Umbraco back office and start adding con Forgotten password? An email will be sent to the address specified with a link to reset your password An email with password reset instructions will be sent to the specified address if it matched our records + Show password + Hide password Return to login form Please provide a new password Your Password has been updated @@ -895,41 +925,41 @@ To manage your website, simply open the Umbraco back office and start adding con Umbraco: Reset Password - - - - - - + + + + + + +
      - - + +
      +
      - - - + + + -
      - -
      - -
      + +
      + +
      -
      + - + - - - + + +
      +

      - - + + -
      +
      - - + +
      +

      Password reset requested

      @@ -939,12 +969,12 @@ To manage your website, simply open the Umbraco back office and start adding con

      - - + + +
      +
      Click this link to reset your password - -
      @@ -956,22 +986,22 @@ To manage your website, simply open the Umbraco back office and start adding con %1% -

      -
      -
      + - -


      -
      - - + +


      +
      + + - + ]]> @@ -1015,53 +1045,53 @@ To manage your website, simply open the Umbraco back office and start adding con - - - - - - + + + + + + + - - + +
      +
      - - + + -
      - -
      - -
      + +
      + +
      -
      + - + - - - + + -
      +

      - - + - +
      +
      - - +
      +

      Hi %0%,

      -

      +

      This is an automated mail to inform you that the task '%1%' has been performed on the page '%2%' by the user '%3%'

      - - @@ -1071,7 +1101,7 @@ To manage your website, simply open the Umbraco back office and start adding con

      Update summary:

      + +
      EDIT
      %6% -
      +

      Have a nice day!

      @@ -1083,10 +1113,10 @@ To manage your website, simply open the Umbraco back office and start adding con

      -


      +


      @@ -1250,6 +1280,7 @@ To manage your website, simply open the Umbraco back office and start adding con You have picked a media item currently deleted or in the recycle bin You have picked media items currently deleted or in the recycle bin Deleted item + Trashed enter external link @@ -1419,6 +1450,9 @@ To manage your website, simply open the Umbraco back office and start adding con An error occurred while unlocking the user Member was exported to file An error occurred while exporting the member + User %0% was deleted + Invite user + Invitation has been re-sent to %0% Uses CSS syntax ex: h1, .redHeader, .blueTex @@ -1650,9 +1684,9 @@ To manage your website, simply open the Umbraco back office and start adding con Hide this property value from content editors that don't have access to view sensitive information Show on member profile Allow this property value to be displayed on the member profile page - + tab has no sort order - + Where is this composition used? This composition is currently used in the composition of the following content types: @@ -1907,41 +1941,41 @@ To manage your website, simply open the Umbraco back office and start adding con Umbraco: Invitation - - - - - - + + + + + + + - - + +
      +
      - - - + + + -
      - -
      - -
      + +
      + +
      -
      +
      + - - - + + +
      +

      - - + + -
      +
      - - + +
      +

      Hi %0%,

      @@ -1959,12 +1993,12 @@ To manage your website, simply open the Umbraco back office and start adding con
      - - + + +
      +
      Click this link to accept the invite - -
      @@ -1979,33 +2013,36 @@ To manage your website, simply open the Umbraco back office and start adding con %3% -

      -
      -
      + - -


      -
      - - + +


      +
      + + - + ]]> Invite + Resending invitation... + Delete User + Are you sure you wish to delete this user account? Validation - Validate as email + Validate as an email address Validate as a number - Validate as a Url + Validate as a URL ...or enter a custom validation Field is mandatory Enter a regular expression @@ -2059,6 +2096,10 @@ To manage your website, simply open the Umbraco back office and start adding con Media - Total XML: %0%, Total: %1%, Total invalid: %2% Content - Total XML: %0%, Total published: %1%, Total invalid: %2% + Database - The database schema is correct for this version of Umbraco + %0% problems were detected with your database schema (Check the log for details) + Some errors were detected while validating the database schema against the current version of Umbraco. + Your website's certificate is valid. Certificate validation error: '%0%' Your website's SSL certificate has expired. @@ -2162,4 +2203,11 @@ To manage your website, simply open the Umbraco back office and start adding con characters left + + Trashed content with Id: {0} related to original parent content with Id: {1} + Trashed media with Id: {0} related to original parent media item with Id: {1} + Cannot automatically restore this item + There is no 'restore' relation found for this node. Use the Move menu item to move it manually. + The item you want to restore it under ('%0%') is in the recycle bin. Use the Move menu item to move the item manually. + diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml index 5f453075bd..b018a562fc 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml @@ -2,7 +2,7 @@ The Umbraco community - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files Culture and Hostnames @@ -46,6 +46,7 @@ Set permissions Unlock Create Content Template + Resend Invitation Content @@ -100,9 +101,6 @@ Domains - - Viewing for - Clear selection Select @@ -140,7 +138,32 @@ Save and generate models Undo Redo + Delete tag + Cancel + Confirm + + Viewing for + Delete Content performed by user + UnPublish performed by user + Save and Publish performed by user + Save Content performed by user + Move Content performed by user + Copy Content performed by user + Content rollback performed by user + Content Send To Publish performed by user + Content Send To Translation performed by user + Copy + Publish + Move + Save + Delete + Unpublish + Rollback + Send To Publish + Send To Translation + + To change the document type for the selected content, first select from the list of valid types for this location. Then confirm and/or amend the mapping of properties from the current type to the new, and click Save. @@ -222,7 +245,7 @@ Child items Target This translates to the following time on the server: - What does this mean?]]> + What does this mean?]]> Are you sure you want to delete this item? Property %0% uses editor %1% which is not supported by Nested Content. Add another text box @@ -245,6 +268,7 @@ Drop your files here... Link to media or click here to choose files + You can drag files here to upload Only allowed file types are Cannot upload this file, it does not have an approved file type Max file size is @@ -286,6 +310,7 @@ Discard changes You have unsaved changes Are you sure you want to navigate away from this page? - you have unsaved changes + Unpublishing will remove this page and all its descendants from the site. Done @@ -318,6 +343,7 @@ Link title Link + Anchor / querystring Name Close this window Are you sure you want to delete @@ -417,6 +443,7 @@ The key '%0%' already exists. ]]> + Dictionary overview Enter your username @@ -434,6 +461,7 @@ Enter your email... Enter a message... Your username is usually your email + #value or ?key=value Allow at root @@ -629,6 +657,7 @@ Submit Type Type to search... + under Up Update Upgrade @@ -730,7 +759,7 @@

      To proceed, please edit the "web.config" file (using Visual Studio or your favourite text editor), scroll to the bottom, add the connection string for your database in the key named "UmbracoDbDSN" and save the file.

      Click the retry button when - done.
      + done.
      More information on editing web.config here.

      ]]> @@ -885,6 +914,8 @@ To manage your website, simply open the Umbraco back office and start adding con Forgotten password? An email will be sent to the address specified with a link to reset your password An email with password reset instructions will be sent to the specified address if it matched our records + Show password + Hide password Return to login form Please provide a new password Your Password has been updated @@ -892,41 +923,41 @@ To manage your website, simply open the Umbraco back office and start adding con Umbraco: Reset Password - - - - - - + + + + + + + - - + +
      +
      - - - + + + -
      - -
      - -
      + +
      + +
      -
      + - + - - - + + +
      +

      - - + + -
      +
      - - + +
      +

      Password reset requested

      @@ -936,12 +967,12 @@ To manage your website, simply open the Umbraco back office and start adding con

      - - + + +
      +
      Click this link to reset your password - -
      @@ -953,22 +984,22 @@ To manage your website, simply open the Umbraco back office and start adding con %1% -

      -
      -
      + - -


      -
      - - + +


      + + + - + ]]> @@ -1012,53 +1043,53 @@ To manage your website, simply open the Umbraco back office and start adding con - - - - - - + + + + + + + - - + +
      +
      - - + + -
      - -
      - -
      + +
      + +
      -
      + - + - - - + + -
      +

      - - + - +
      +
      - - +
      +

      Hi %0%,

      -

      +

      This is an automated mail to inform you that the task '%1%' has been performed on the page '%2%' by the user '%3%'

      - - @@ -1068,7 +1099,7 @@ To manage your website, simply open the Umbraco back office and start adding con

      Update summary:

      + +
      EDIT
      %6% -
      +

      Have a nice day!

      @@ -1080,10 +1111,10 @@ To manage your website, simply open the Umbraco back office and start adding con

      -


      +


      @@ -1247,6 +1278,7 @@ To manage your website, simply open the Umbraco back office and start adding con You have picked a media item currently deleted or in the recycle bin You have picked media items currently deleted or in the recycle bin Deleted item + Trashed enter external link @@ -1416,6 +1448,9 @@ To manage your website, simply open the Umbraco back office and start adding con An error occurred while unlocking the user Member was exported to file An error occurred while exporting the member + User %0% was deleted + Invite user + Invitation has been re-sent to %0% Uses CSS syntax ex: h1, .redHeader, .blueTex @@ -1642,9 +1677,9 @@ To manage your website, simply open the Umbraco back office and start adding con Hide this property value from content editors that don't have access to view sensitive information Show on member profile Allow this property value to be displayed on the member profile page - + tab has no sort order - + Where is this composition used? This composition is currently used in the composition of the following content types: @@ -1899,41 +1934,41 @@ To manage your website, simply open the Umbraco back office and start adding con Umbraco: Invitation - - - - - - + + + + + + + - - + +
      +
      - - - + + + -
      - -
      - -
      + +
      + +
      -
      +
      + - - - + + +
      +

      - - + + -
      +
      - - + +
      +

      Hi %0%,

      @@ -1951,12 +1986,12 @@ To manage your website, simply open the Umbraco back office and start adding con
      - - + + +
      +
      Click this link to accept the invite - -
      @@ -1971,32 +2006,35 @@ To manage your website, simply open the Umbraco back office and start adding con %3% -

      -
      -
      + - -


      - - - + +


      + + + - + ]]>
      Invite + Resending invitation... + Delete User + Are you sure you wish to delete this user account? Validation - Validate as email + Validate as an email address Validate as a number - Validate as a Url + Validate as a URL ...or enter a custom validation Field is mandatory Enter a regular expression @@ -2050,6 +2088,10 @@ To manage your website, simply open the Umbraco back office and start adding con Media - Total XML: %0%, Total: %1%, Total invalid: %2% Content - Total XML: %0%, Total published: %1%, Total invalid: %2% + Database - The database schema is correct for this version of Umbraco + %0% problems were detected with your database schema (Check the log for details) + Some errors were detected while validating the database schema against the current version of Umbraco. + Your website's certificate is valid. Certificate validation error: '%0%' Your website's SSL certificate has expired. @@ -2153,4 +2195,15 @@ To manage your website, simply open the Umbraco back office and start adding con characters left + + Trashed content with Id: {0} related to original parent content with Id: {1} + Trashed media with Id: {0} related to original parent media item with Id: {1} + Cannot automatically restore this item + There is no 'restore' relation found for this node. Use the Move menu item to move it manually. + The item you want to restore it under ('%0%') is in the recycle bin. Use the Move menu item to move the item manually. + + + Select your notifications for + Notification settings saved for + diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/es.xml b/src/Umbraco.Web.UI/umbraco/config/lang/es.xml index cf44e6e955..fed40e2d79 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/es.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/es.xml @@ -2,7 +2,7 @@ The Umbraco community - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files Administrar hostnames @@ -213,7 +213,7 @@ Nodos hijo Target Esto se traduce en la siguiente hora en el servidor: - ¿Esto qué significa?]]> + ¿Esto qué significa?]]> ¿Estás seguro que quieres eliminar este elemento? Propiedad %0% utiliza editor %1% que no está soportado por Nested Content. Añadir otra caja de texto @@ -698,7 +698,7 @@ Configuración de la base de datos instalar para instalar %0% la base de datos de Umbraco]]> Próximo para continuar]]> - ¡No se ha encontrado ninguna base de datos! Mira si la información en la "connection string" del “web.config” es correcta.

      Para continuar, edite el "web.config" (bien sea usando Visual Studio o su editor de texto preferido), vaya al final del archivo y añada la cadena de conexión para la base de datos con el nombre (key) "umbracoDbDSN" y guarde el archivo.

      Pinche en reintentar cuando haya terminado.
      Pinche aquí para mayor información de como editar el web.config (en inglés)

      ]]>
      + ¡No se ha encontrado ninguna base de datos! Mira si la información en la "connection string" del “web.config” es correcta.

      Para continuar, edite el "web.config" (bien sea usando Visual Studio o su editor de texto preferido), vaya al final del archivo y añada la cadena de conexión para la base de datos con el nombre (key) "umbracoDbDSN" y guarde el archivo.

      Pinche en reintentar cuando haya terminado.
      Pinche aquí para mayor información de como editar el web.config (en inglés)

      ]]>
      Por favor, contacta con tu ISP si es necesario. Si estás realizando la instalación en una máquina o servidor local, quizás necesites información de tu administrador de sistemas.]]> Pinche en actualizar para actualizar la base de datos a Umbraco %0%

      Ningún contenido será borrado de la base de datos y seguirá funcionando después de la actualización

      ]]>
      Pinche en Próximo para continuar. ]]> diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml b/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml index d721a8fc8b..b3d5edf512 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml @@ -2,21 +2,24 @@ The Umbraco community - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files - Gérer les noms d'hôtes + Culture et noms d'hôte Informations d'audit Parcourir Changer le type de document Copier Créer + Exporter + Créer un groupe Créer un package Supprimer Désactiver Vider la corbeille - Exporter un type - Importer un type + Activer + Exporter le type de document + Importer un type de document Importer un package Editer dans Canvas Déconnexion @@ -27,6 +30,7 @@ Dépublier Rafraîchir Republier le site tout entier + Renommer Récupérer Spécifiez les permissions pour la page %0% Choisissez où déplacer @@ -35,10 +39,41 @@ Version antérieure Envoyer pour publication Envoyer pour traduction + Spécifier le groupe Trier Traduire Mettre à jour + Spécifier les permissions + Débloquer + Créer un modèle de contenu + Envoyer à nouveau l'invitation + + Contenu + Administration + Structure + Autre + + + Permettre d'attribuer la culture et des noms d'hôte + Permettre d'accéder au journal d'historique d'un noeud + Permettre d'accéder à un noeud + Permettre de modifier le type de document d'un noeud + Permettre de copier un noeud + Permettre de créer des noeuds + Permettre de supprimer des noeuds + Permettre de déplacer un noeud + Permettre de définir et modifier l'accès public à un noeud + Permettre de publier un noeud + Permettre de modifier les permissions pour un noeud + Permettre de revenir à une situation antérieure + Permettre d'envoyer un noeud pour approbation avant publication + Permettre d'envoyer un noeud à la traduction + Permettre de modifier l'ordonnancement des noeuds + Permettre de traduire un noeud + Permettre de sauvegarder un noeud + Permettre la création d'un Modèle de Contenu + Permission refusée. Ajouter un nouveau domaine @@ -53,18 +88,19 @@ Domaine '%0%' déjà assigné Domaine '%0%' mis à jour Editer les domaines actuels - +
      Les domaines contenant un chemin d'un niveau sont autorisés, ex : "example.com/en". Pour autant, cela - devrait être évité. Utilisez plutôt la gestion des noms d'hôte.]]>
      + devrait être évité. Utilisez plutôt la gestion de la culture et des noms d'hôte.]]> + Hériter Culture - ou hériter de la culture des noeuds parents. S'appliquera aussi
      - au noeud courant, à moins qu'un domaine ci-dessous soit aussi d'application.]]>
      + + ou hériter de la culture des noeuds parents. S'appliquera aussi
      + au noeud courant, à moins qu'un domaine ci-dessous soit aussi d'application.]]> +
      Domaines - - Aperçu pour - Vider la sélection Choisir @@ -90,7 +126,8 @@ Retourner à la liste Sauver Sauver et publier - Sauver et envoyer pour approbation + Sauver et planifier + Sauver et envoyer pour approbation Sauver la mise en page de la liste Prévisualiser La prévisualisation est désactivée car aucun modèle n'a été assigné. @@ -98,9 +135,31 @@ Afficher les styles Insérer un tableau Générer les modèles + Sauver et générer les modèles Défaire Refaire + + Aperçu pour + Suppressions de contenu réalisées par utilisateur + Dépublications réalisées par utilisateur + Sauvegardes et publications réalisées par utilisateur + Sauvegardes de contenu réalisées par utilisateur + Déplacements de contenu réalisés par utilisateur + Copies de contenu réalisées par utilisateur + Récupérations de contenu réalisées par utilisateur + Envois de contenu pour publication réalisés par utilisateur + Envois de contenu pour traduction réalisés par utilisateur + Copie + Publication + Déplacement + Sauvegarde + Suppression + Dépublication + Récupération + Envoi pour publication + Envoi pour traduction + Pour changer le type de document du contenu séléctionné, faites d'abord un choix dans la liste des types valides à cet endroit. Puis modifiez si nécessaire la correspondance des propriétés du type actuel vers le nouveau, et cliquez sur Sauver. @@ -141,30 +200,38 @@ Dernière publication Il n'y a aucun élément à afficher Il n'y a aucun élément à afficher dans cette liste. + Aucun contenu n'a encore été ajouté + Aucun membre n'a encore été ajouté Type de Média Lien vers des média(s) Groupe de membres Rôle Type de membre + Aucune modification n'a été faite Aucune date choisie Titre de la page + Ce média n'a pas de lien Propriétés Ce document est publié mais n'est pas visible car son parent '%0%' n'est pas publié Oups : ce document est publié mais n'est pas présent dans le cache (erreur interne Umbraco) Oups: impossible d'obtenir cet url (erreur interne - voir fichier log) Oups: ce document est publié mais son url entrerait en collision avec le contenu %0% Publier + Publié + Publié (changements en cours) Statut de publication Publié le Dépublié le Supprimer la date - Ordre de tri mis à jour + Défininir la date + Ordre de tri mis à jour Pour trier les noeuds, faites-les simplement glisser à l'aide de la souris ou cliquez sur les entêtes de colonne. Vous pouvez séléctionner plusieurs noeuds en gardant la touche "shift" ou "ctrl" enfoncée pendant votre séléction. Statistiques Titre (optionnel) Texte alternatif (optionnel) Type Dépublier + Dépublié Dernière édition Date/heure à laquelle ce document a été édité Supprimer le(s) fichier(s) @@ -174,18 +241,34 @@ Eléments enfants Cible Ceci se traduit par l'heure suivante sur le serveur : - Qu'est-ce que cela signifie?]]> + Qu'est-ce que cela signifie?]]> + Etes-vous certain(e) de vouloir supprimer cet éléménent? + La propriété %0% utilise l'éditeur %1% qui n'est pas supporté par Nested Content. Ajouter un autre champ texte Enlever ce champ texte + Racine du contenu + Cette valeur est masquée. Si vous avez besoin de pouvoir accéder à cette valeur, veuillez prendre contact avec l'administrateur du site web. + Cette valeur est masquée. + + Créer un nouveau Modèle de Contenu à partir de '%0%' + Vide + Sélectionner un Modèle de Contenu + Modèle de Contenu créé + Un modèle de Contenu a été créé à partir de '%0%' + Un autre Modèle de Contenu existe déjà avec le même nom + Un Modèle de Contenu est du contenu pré-défini qu'un éditeur peut sélectionner et utiliser comme base pour la création de nouveau contenu + Cliquez pour télécharger Faites glisser vos fichier ici... Lien vers le média ou cliquez ici pour choisir un fichier Les seuls types de fichiers autorisés sont + Ce fichier ne peut pas ête chargé, il n'est pas d'un type de fichier autorisé. La taille maximum de fichier est - + Racine du média + Créer un nouveau membre Tous les membres @@ -193,6 +276,7 @@ Où voulez-vous créer le nouveau %0% Créer un élément sous + Sélectionnez le type de document pour lequel vous souhaitez créer un modèle de contenu Choisissez un type et un titre "Types de documents".]]> "Types de médias".]]> @@ -221,7 +305,8 @@ Invalider les changements Vous avez des changements en cours Etes-vous certain(e) de vouloir quitter cette page? - vous avez des changements en cours - + La dépublication va supprimer du site cette page ainsi que tous ses descendants. + Terminé @@ -280,7 +365,10 @@ Cette macro ne contient aucune propriété éditable Coller Editer les permissions pour - Les éléments dans la corbeille sont en cours de suppression. Ne fermez pas cette fenêtre avant que cette opération soit terminée. + Définir les permissions pour + Définir les permissions pour %0% pour le groupe d'utilisateurs %1% + Sélectionnez les groupes d'utilisateurs pour lesquels vous souhaitez définir les permissions + Les éléments dans la corbeille sont en cours de suppression. Ne fermez pas cette fenêtre avant que cette opération soit terminée. La corbeille est maintenant vide Les éléments supprimés de la corbeille seront supprimés définitivement regexlib.com rencontre actuellement des problèmes sur lesquels nous n'avons aucun contrôle. Nous sommes sincèrement désolés pour le désagrément.]]> @@ -292,10 +380,14 @@ Le cache du site va être mis à jour. Tous les contenus publiés seront mis à jour. Et tous les contenus dépubliés resteront invisibles. Nombre de colonnes Nombre de lignes - Définir un placeholder ID. En mettant un ID sur votre placeholder, vous pouvez injecter du contenu à cet endroit depuis les modèles enfants, - en faisant référence à cet ID au sein d'un élément <asp:content />.]]> - Séléctionnez un placeholder id dans la liste ci-dessous. Vous pouvez seulement - choisir un ID se trouvant dans le parent du modèle actuel.]]> + + Définir un placeholder ID. En mettant un ID sur votre placeholder, vous pouvez injecter du contenu à cet endroit depuis les modèles enfants, + en faisant référence à cet ID au sein d'un élément <asp:content />.]]> + + + Séléctionnez un placeholder ID dans la liste ci-dessous. Vous pouvez seulement + choisir un ID se trouvant dans le parent du modèle actuel.]]> + Cliquez sur l'image pour la voir en taille réelle Sélectionner un élément Voir l'élément de cache @@ -307,14 +399,19 @@ Ouvre le document lié dans une nouvelle fenêtre ou un nouvel onglet Lier à un media Lier à un fichier + Sélectionner le noeud de base du contenu Sélectionner le media Sélectionner l'icône Sélectionner l'élément Sélectionner le lien Sélectionner la macro Sélectionner le contenu + Sélectionner le noeud de base des media Sélectionner le membre Sélectionner le groupe de membres + Sélectionner le noeud + Sélectionner les sections + Sélectionner les utilisateurs Aucune icone n'a été trouvée Il n'y a pas de paramètres pour cette macro Il n'y a pas de macro disponible à insérer @@ -329,9 +426,11 @@ Selectionner un snippet - + %0%' ci-dessous.
      Vous pouvez ajouter d'autres langues depuis le menu ci-dessous "Langues". - ]]>
      + ]]> + Nom de Culture Modifiez la clé de l'élément de dictionaire. @@ -339,6 +438,7 @@ La clé '%0%' existe déjà. ]]> + Aperçu du dictionaire Votre nom d'utilisateur @@ -346,13 +446,16 @@ Confirmation de votre mot de passe Nommer %0%... Entrez un nom... + Entrez un email... + Entrez un nom d'utilisateur... Libellé... Entrez une description... Rechercher... Filtrer... Ajouter des tags (appuyer sur enter entre chaque tag)... Entrez votre email - Votre nom d'utilisateur est généralement votre adresse email + Entrez un message... + Votre nom d'utilisateur est généralement votre adresse email Autoriser à la racine @@ -372,6 +475,11 @@ Créer une liste personnalisée Supprimer la liste personnalisée + + Renommé + Entrez un nouveau nom de répertoire ici + %0% a été renommé en %1% + Ajouter une valeur de base Type de donnée en base de donées @@ -432,6 +540,7 @@ Il y a une erreur de configuration du type de données utilisé pour cette propriété, veuillez vérifier le type de données. + Options A propos Action Actions @@ -472,18 +581,25 @@ Erreur Trouver Premier + Général + Groupes Hauteur Aide + Cacher + Historique Icône Importer + Info Marge intérieure Insérer Installer Non valide Justifier + Libellé Langue Dernier Mise en page + Liens En cours de chargement Bloqué Connexion @@ -491,6 +607,7 @@ Déconnexion Macro Obligatoire + Message Déplacer Plus Nom @@ -498,9 +615,12 @@ Suivant Non de + Inactif OK Ouvrir + Actif ou + Trier par Mot de passe Chemin Placeholder ID @@ -509,13 +629,16 @@ Propriétés Email de réception des données de formulaire Corbeille + Votre corbeille est vide Restant Enlever Renommer Renouveller Requis + Retrouver Réessayer Permissions + Publication Programmée Rechercher Désolé, nous ne pouvons pas trouver ce que vous recherchez Aucun élément n'a été ajouté @@ -524,6 +647,7 @@ Afficher la page à l'envoi Taille Trier + Statut Envoyer Type Rechercher... @@ -550,6 +674,7 @@ Sauvegarde... actuel Intégrer + Retrouver sélectionné @@ -559,7 +684,20 @@ Jaune Orange Bleu + Bleu-gris + Gris + Brun + Bleu Clair + Cyan + Vert Clair + Limon + Ambre + Orange Foncé Rouge + Rose + Mauve + Mauve Foncé + Indigo @@ -590,7 +728,6 @@ Général Editeur - Couleur de fond Gras @@ -598,7 +735,6 @@ Police Texte - Page @@ -607,28 +743,38 @@ Impossible de sauvegarder le fichier web.config. Veuillez modifier la "connection string" manuellement. Votre base de données a été détectée et est identifiée comme étant Configuration de la base de données - + installer pour installer la base de données Umbraco %0% - ]]> + ]]> + Suivant pour poursuivre.]]> - Base de données non trouvée ! Veuillez vérifier les informations de la "connection string" dans le fichier web.config.

      + + Base de données non trouvée ! Veuillez vérifier les informations de la "connection string" dans le fichier web.config.

      Pour poursuivre, veuillez éditer le fichier "web.config" (avec Visual Studio ou votre éditeur de texte favori), scroller jusqu'en bas, ajouter le "connection string" pour votre base de données dans la ligne avec la clé "umbracoDbDSN" et sauvegarder le fichier.

      Cliquez sur le bouton Réessayer lorsque cela est fait. -
      - Plus d'informations sur l'édition du fichier web.config ici.

      ]]>
      - +
      + Plus d'informations sur l'édition du fichier web.config ici.

      ]]> +
      + + Veuillez contacter votre fournisseur de services internet si nécessaire. - Si vous installez Umbraco sur un ordinateur ou un serveur local, vous aurez peut-être besoin de consulter votre administrateur système.]]> - + + + Appuyez sur le bouton Upgrader pour mettre à jour votre base de données vers Umbraco %0%

      N'ayez pas d'inquiétude : aucun contenu ne sera supprimé et tout continuera à fonctionner parfaitement par après !

      - ]]>
      - Appuyez sur Suivant pour - poursuivre. ]]> + ]]> +
      + + Appuyez sur Suivant pour + poursuivre. ]]> + Suivant pour poursuivre la configuration]]> Le mot de passe par défaut doit être modifié !]]> L'utilisateur par défaut a été désactivé ou n'a pas accès à Umbraco!

      Aucune autre action n'est requise. Cliquez sur Suivant pour poursuivre.]]> @@ -640,41 +786,56 @@ Fichiers et dossiers concernés Plus d'informations sur la configuration des permissions Vous devez donner à ASP.NET les droits de modification sur les fichiers/dossiers suivants - Vos configurations de permissions sont presque parfaites !

      - Vous pouvez faire fonctionner Umbraco sans problèmes, mais vous ne serez pas en mesure d'installer des packages, ce qui est hautement recommandé pour tirer pleinement profit d'Umbraco.]]>
      + + Vos configurations de permissions sont presque parfaites !

      + Vous pouvez faire fonctionner Umbraco sans problèmes, mais vous ne serez pas en mesure d'installer des packages, ce qui est hautement recommandé pour tirer pleinement profit d'Umbraco.]]> +
      Comment résoudre Cliquez ici pour lire la version texte tutoriel vidéo sur la définition des permissions des répertoires pour Umbraco, ou lisez la version texte.]]> - Vos configurations de permissions pourraient poser problème ! + + Vos configurations de permissions pourraient poser problème !

      - Vous pouvez faire fonctionner Umbraco sans problèmes, mais vous ne serez pas en mesure d'installer des packages, ce qui est hautement recommandé pour tirer pleinement profit d'Umbraco.]]>
      - Vos configurations de permissions ne sont pas prêtes pour Umbraco ! + Vous pouvez faire fonctionner Umbraco sans problèmes, mais vous ne serez pas en mesure d'installer des packages, ce qui est hautement recommandé pour tirer pleinement profit d'Umbraco.]]> + + + Vos configurations de permissions ne sont pas prêtes pour Umbraco !

      - Pour faire fonctionner Umbraco, vous aurez besoin de mettre à jour les permissions sur les fichiers/dossiers.]]>
      - Vos configurations de permissions sont parfaites !

      - Vous êtes prêt(e) à faire fonctionner Umbraco et à installer des packages !]]>
      + Pour faire fonctionner Umbraco, vous aurez besoin de mettre à jour les permissions sur les fichiers/dossiers.]]> +
      + + Vos configurations de permissions sont parfaites !

      + Vous êtes prêt(e) à faire fonctionner Umbraco et à installer des packages !]]> +
      Résoudre un problème sur un dossier Suivez ce lien pour plus d'informations sur les problèmes avec ASP.NET et la création de dossiers Définir les permissions de dossier - + + ]]> + Je veux démarrer "from scratch" - + Apprenez comment) Vous pouvez toujours choisir d'installer Runway plus tard. Pour cela, allez dans la section "Développeur" et sélectionnez "Packages". - ]]> + ]]> + Vous venez de mettre en place une plateforme Umbraco toute nette. Que voulez-vous faire ensuite ? Runway est installé - + Voici la liste des modules recommandés, cochez ceux que vous souhaitez installer, ou regardez la liste complète des modules - ]]> + ]]> + Recommandé uniquement pour les utilisateurs expérimentés Je veux commencer avec un site simple - + "Runway" est un site simple qui fournit des types de documents et des modèles de base. L'installateur peut mettre en place Runway automatiquement pour vous, mais vous pouvez facilement l'éditer, l'enrichir, ou le supprimer par la suite. Il n'est pas nécessaire, et vous pouvez parfaitement vous en passer pour utiliser Umbraco. Cela étant dit, @@ -685,7 +846,8 @@ Inclus avec Runway : Home page, Getting Started page, Installing Modules page.
      Modules optionnels : Top Navigation, Sitemap, Contact, Gallery.
      - ]]> + ]]> + Qu'est-ce que Runway Etape 1/5 : Accepter la licence Etape 2/5 : Configuration de la base de données @@ -693,24 +855,36 @@ Etape 4/5 : Sécurité Umbraco Etape 5/5 : Umbraco est prêt Merci d'avoir choisi Umbraco - Parcourir votre nouveau site -Vous avez installé Runway, alors pourquoi ne pas jeter un oeil au look de votre nouveau site ?]]> - Aide et informations complémentaires -Obtenez de l'aide de notre "award winning" communauté, parcourez la documentation ou regardez quelques vidéos gratuites sur la manière de construire un site simple, d'utiliser les packages ainsi qu'un guide rapide sur la terminologie Umbraco]]> + + Parcourir votre nouveau site +Vous avez installé Runway, alors pourquoi ne pas jeter un oeil au look de votre nouveau site ?]]> + + + Aide et informations complémentaires +Obtenez de l'aide de notre communauté "award winning", parcourez la documentation ou regardez quelques vidéos gratuites sur la manière de construire un site simple, d'utiliser les packages ainsi qu'un guide rapide sur la terminologie Umbraco]]> + Umbraco %0% est installé et prêt à être utilisé - fichier /web.config et mettre à jour le paramètre AppSetting umbracoConfigurationStatus situé en bas à la valeur '%0%'.]]> - démarrer instantanément en cliquant sur le bouton "Lancer Umbraco" ci-dessous.
      -Si vous débutez avec Umbraco, vous pouvez trouver une foule de ressources dans nos pages "Getting Started".]]>
      - Lancer Umbraco -Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à ajouter du contenu, à mettre à jour les modèles d'affichage et feuilles de styles ou à ajouter de nouvelles fonctionnalités]]> + + fichier /web.config et mettre à jour le paramètre AppSetting umbracoConfigurationStatus situé en bas à la valeur '%0%'.]]> + + + démarrer instantanément en cliquant sur le bouton "Lancer Umbraco" ci-dessous.
      +Si vous débutez avec Umbraco, vous pouvez trouver une foule de ressources dans nos pages "Getting Started".]]> +
      + + Lancer Umbraco +Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à ajouter du contenu, à mettre à jour les modèles d'affichage et feuilles de styles ou à ajouter de nouvelles fonctionnalités]]> + La connexion à la base de données a échoué. Umbraco Version 3 Umbraco Version 4 Regarder - Umbraco %0%, qu'il s'agisse d'une nouvelle installation ou d'une mise à jour à partir de la version 3.0 + + Umbraco %0%, qu'il s'agisse d'une nouvelle installation ou d'une mise à jour à partir de la version 3.0

      - Appuyez sur "suivant" pour commencer l'assistant.]]>
      + Appuyez sur "suivant" pour commencer l'assistant.]]> +
      Code de la Culture @@ -721,13 +895,13 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Renouvellez votre session maintenant pour sauvegarder votre travail - Joyeux dimanche - Joyeux lundi - Joyeux mardi - Joyeux mercredi + Joyeux dimanche détonnant + Joyeux lundi lumineux + Joyeux mardi magique + Joyeux mercredi merveilleux Joyeux jeudi Joyeux vendredi - Joyeux samedi + Joyeux chamedi Connectez-vous ci-dessous Identifiez-vous avec La session a expiré @@ -735,13 +909,95 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Mot de passe oublié? Un email contenant un lien pour ré-initialiser votre mot de passe sera envoyé à l'adresse spécifiée Un email contenant les instructions de ré-initialisation de votre mot de passe sera envoyée à l'adresse spécifiée si elle correspond à nos informations. + Montrer le mot de passe + Cacher le mot de passe Revenir au formulaire de connexion Veuillez fournir un nouveau mot de passe Votre mot de passe a été mis à jour Le lien sur lequel vous avez cliqué est non valide ou a expiré. Umbraco: Ré-initialiser le mot de passe - Votre nom d'utilisateur pour vous connecter au back-office Umbraco est : %0%.

      Cliquez ici pour ré-initialiser votre mot de passe, ou recopiez cet URL dans votre navigateur :

      %1%

      ]]> + + + + + + + + + + + +
      + + + + + +
      + +
      + +
      +
      + + + + + + +
      +
      +
      + + + + +
      + + + + +
      +

      + Une réinitialisation de votre mot de passe a été demandée +

      +

      + Votre nom d'utilisateur pour vous connecter au back-office Umbraco est : %0% +

      +

      + + + + + + +
      + + Cliquez sur ce lien pour réinitialiser votre mot de passe + +
      +

      +

      Si vous ne pouvez pas cliquer sur le lien, recopiez cet URL dans votre navigateur :

      + + + + +
      + + %1% + +
      +

      +
      +
      +


      +
      +
      + + + ]]> @@ -765,7 +1021,8 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Editez vos notifications pour %0% - + - Hello %0%

      - -

      Ceci est un email automatique pour vous informer que la tâche '%1%' - a été executée sur la page '%2%' - par l'utilisateur '%3%' -

      - -

      -

      Résumé de la mise à jour :

      - - %6% + ]]> + + + + + + + + + +
      + + + +
      + + + + + +
      + +
      + +
      +
      + + + + + +
      +
      +
      + + + + +
      + + + + +
      +

      + Salut %0%, +

      +

      + Ceci est un email automatique pour vous informer que la tâche '%1%' a été exécutée sur la page '%2%' par l'utilisateur '%3%' +

      + + + + + + +
      + +
      + MODIFIER
      +
      +

      +

      Résumé de la mise à jour :

      + + %6% +
      +

      +

      + Bonne journée !

      + Avec les salutations du Robot Umbraco +

      +
      +
      +


      +
      +
      -

      - - - -

      Bonne journée !

      - Avec les salutations du Robot Umbraco -

      ]]>
      + + + ]]> + La notification [%0%] à propos de %1% a été executée sur %2% Notifications - + et localisez le package. Les packages Umbraco ont généralement une extension ".umb" ou ".zip". - ]]> + ]]> + Déposez pour uploader ou cliquez ici pour choisir les fichiers Uploader un package @@ -852,8 +1165,10 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Meta data du package Nom du package Le package ne contient aucun élément -
      - Vous pouvez supprimer tranquillement ce package de votre installation en cliquant sur "Désinstaller le package" ci-dessous.]]>
      + +
      + Vous pouvez supprimer tranquillement ce package de votre installation en cliquant sur "Désinstaller le package" ci-dessous.]]> +
      Aucune mise à jour disponible Options du package Package readme @@ -862,9 +1177,11 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Le package a été désinstallé Le package a été désinstallé avec succès Désinstaller le package - + + Remarque : tous les documents, media etc. dépendant des éléments que vous supprimez vont cesser de fonctionner, ce qui peut provoquer une instabilité du système, - désinstallez donc avec prudence. En cas de doute, contactez l'auteur du package.]]> + désinstallez donc avec prudence. En cas de doute, contactez l'auteur du package.]]> + Télécharger la mise à jour depuis le repository Mettre à jour le package Instructions de mise à jour @@ -913,32 +1230,51 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à %0% n'a pas pu être publié car cet élément est programmé pour être publié bientôt. ]]> - + - + + + - + + + - + + + + ]]> + Inclure les pages enfant non publiées Publication en cours - veuillez patienter... %0% pages sur %1% ont été publiées... %0% a été publié %0% et ses pages enfants ont été publiées Publier %0% et toutes ses pages enfant - Publier pour publier %0% et la rendre ainsi accessible publiquement.

      + + Publier pour publier %0% et la rendre ainsi accessible publiquement.

      Vous pouvez publier cette page et toutes ses sous-pages en cochant Inclure les pages enfant non pubiées ci-dessous. - ]]>
      + ]]> +
      Vous n'avez configuré aucune couleur approuvée - + + Vous avez choisi un élément de contenu actuellement supprimé ou dans la corbeille + Vous avez choisi des éléments de contenu actuellement supprimés ou dans la corbeille + + + Vous avez choisi un élément media actuellement supprimé ou dans la corbeille + Vous avez choisi des éléments media actuellement supprimés ou dans la corbeille + Elément supprimé + + introduire un lien externe choisir une page interne Légende @@ -1021,6 +1357,7 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Validation Les erreurs de validation doivent être corrigées avant de pouvoir sauvegarder l'élément Echec + Sauvegardé Permissions utilisateur insuffisantes, l'opération n'a pas pu être complétée Annulation L'opération a été annulée par une extension tierce @@ -1054,6 +1391,7 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Erreur lors de la sauvegarde de l'utilisateur (consultez les logs) Utilisateur sauvegardé Type d'utilisateur sauvegardé + Groupe d'utilisateurs sauvegardé Fichier non sauvegardé Le fichier n'a pas pu être sauvegardé. Vérifiez les permissions de fichier. Fichier sauvegardé @@ -1079,11 +1417,34 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Vue partielle sauvegardée sans erreurs ! Vue partielle non sauvegardée Une erreur est survenue lors de la sauvegarde du fichier. + Permissions sauvegardées pour Vue script sauvegardée Vue script sauvegardée sans erreur ! Vue script non sauvegardée Une erreur est survenue lors de la sauvegarde du fichier. Une erreur est survenue lors de la sauvegarde du fichier. + %0% groupes d'utilisateurs supprimés + %0% a été supprimé + %0% utilisateurs activés + Une erreur est survenue lors de l'activation des utilisateurs + %0% utilisateurs désactivés + Une erreur est survenue lors de la désactivation des utilisateurs + %0% est à présent activé + Une erreur est survenue lors de l'activation de l'utilisateur + %0% est à présent désactivé + Une erreur est survenue lors de la désactivation de l'utilisateur + Les groupes d'utilisateurs ont été définis + %0% groupes d'utilisateurs supprimés + %0% a été supprimé + %0% utilisateurs débloqués + Une erreur est survenue lors du débloquage des utilisateurs + %0% est à présent débloqué + Une erreur est survenue lors du débloquage de l'utilisateur + Le membre a été exporté vers le fichier + Une erreur est survenue lors de l'export du membre + L'utilisateur %0% a été supprimé + Inviter l'utilisateur + L'invitation a été envoyée à nouveau à %0% Utilise la syntaxe CSS. Ex : h1, .redHeader, .blueTex @@ -1201,7 +1562,7 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à - Rich Text Editor + Rich Text Editor Image Macro Embed @@ -1244,6 +1605,8 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Autoriser tous les éditeurs Autoriser toutes les configurations de rangées + Eléments maximum + Laisser vide ou mettre à 0 pour un nombre illimté Configurer comme défaut Choisir en plus Choisir le défaut @@ -1308,11 +1671,27 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à utilisant cet éditeur seront mis à jour avec la nouvelle configuration Le membre peut éditer - Afficher dans le profil du membre - + Autoriser la modification de la valeur de cette propriété par le membre à partir de sa page de profil + Est une donnée sensible + Cacher cette propriété aux éditeurs de contenu qui n'ont pas accès à la visualisation des données sensibles + Afficher dans le profil du membre + Permettre d'afficher la valeur de cette propriété sur la page de profil du membre + + l'onglet n'a pas d'ordre de tri + + Où cette composition est-elle utilisée? + Cette composition est actuellement utilisée dans la composition des types de contenu suivants : - + + Fabrication des modèles + ceci peut prendre un peu de temps, ne vous inquiétez pas + Modèles générés + Les modèles n'ont pas pu être générés + La génération des modèles a échoué, voyez les exceptions dans les U log + + + Ajouter un champ de rechange Champ de rechange Ajouter une valeur par défaut @@ -1353,10 +1732,12 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Tâches qui vous sont assignées - vous sont assignées. Pour voir un aperçu détaillé incluant les commentaires, cliquez sur "Détails" ou juste sur le nom de la page. + + vous sont assignées. Pour voir un aperçu détaillé incluant les commentaires, cliquez sur "Détails" ou juste sur le nom de la page. Vous pouvez aussi télécharger la page au format XML en cliquant sur le lien "Télécharger XML".
      Pour clôturer une tâche de traduction, allez sur Détails, puis cliquez sur le bouton "Terminer la tâche". - ]]>
      + ]]> +
      Terminer la tâche Détails Télécharger toutes les tâches de traductions au format XML @@ -1364,7 +1745,8 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Télécharger la DTD XML Champs Inclure les pages enfants - + + ]]> + [%0%] tâches de traductions pour %1% Aucun utilisateur traducteur trouvé. Veuillez créer un utilisateur traducteur avant d'envoyer du contenu pour traduction Tâches que vous avez créées - que vous avez créées. Pour voir un aperçu détaillé incluant les commentaires, + + que vous avez créées. Pour voir un aperçu détaillé incluant les commentaires, cliquez sur "Détails" ou juste sur le nom de la page. Vous pouvez aussi télécharger la page au format XML en cliquant sur le lien "Télécharger XML". Pour clôturer une tâche de traduction, allez sur Détails, puis cliquez sur le bouton "Terminer tâche". - ]]> + ]]> + La page '%0%' a été envoyée pour traduction Veuillez choisir la langue dans laquelle le contenu doit être traduit Envoyer la page '%0%' pour traduction @@ -1401,6 +1786,9 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Uploader le fichier de traduction XML + Contenu + Types de contenu + Media Navigateur de cache Corbeille Packages créés @@ -1421,6 +1809,8 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Types de relations Packages Packages + Vues Partielles + Vues Partielles pour les Fichiers Macro Fichiers Python Installer depuis le repository Installer Runway @@ -1431,8 +1821,7 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Modèles Fichiers XSLT Analytique - Vues partielles - Fichiers Macro pour les vues partielles + Utilisateurs Nouvelle mise à jour disponible @@ -1441,23 +1830,45 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Erreur lors de la recherche de mises à jour. Veuillez vérifier le stack trace pour obtenir plus d'informations sur l'erreur. + Accès + Sur base des groupes et des noeuds de départ, l'utilisateur a accès aux noeuds suivants + Donner accès Administrateur Champ catégorie + Utilisateur créé Changer le mot de passe + Changer la photo Nouveau mot de passe + n'a pas été bloqué + Le mot de passe n'a pas été modifié Confirmez votre nouveau mot de passe Vous pouvez changer votre mot de passe d'accès au Back Office Umbraco en remplissant le formulaire ci-dessous puis en cliquant sur le bouton "Changer le mot de passe" Canal de contenu + Créer un autre utilisateur + Créer de nouveaux utilisateurs pour leur donner accès à Umbraco. Lors de la création d'un nouvel utilisateur, un mot de passe est généré que vous pouvez partager avec ce dernier. Champ description Désactiver l'utilisateur Type de document Editeur Champ extrait + Tentatives de connexion échouées + Voir le profil de l'utilisateur + Ajouter des groupes pour donner les accès et permissions + Inviter un autre utilisateur + Inviter de nouveaux utilisateurs pour leur donner accès à Umbraco. Un email d'invitation sera envoyé à chaque utilisateur avec des informations concernant la connexion à Umbraco. Langue + Spécifiez la langue dans laquelle vous souhaitez voir les menus et dialogues + Date du dernier bloquage + Dernière connexion + Dernière modification du mot de passe Identifiant Noeud de départ dans la librarie de média + Limiter la librairie média à un noeud de départ spécifique + Noeuds de départ dans la librairie de média + Limiter la librairie média à des noeuds de départ spécifique Sections Désactiver l'accès Umbraco + ne s'est pas encore connecté Ancien mot de passe Mot de passe Réinitialiser le mot de passe @@ -1472,17 +1883,153 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Remplacer les permissions sur les noeuds enfants Vous êtes en train de modifiez les permissions pour les pages : Choisissez les pages dont les permissions doivent être modifiées + Supprimer la photo + Permissions par défaut + Permissions granulaires + Définir les permissions sur des noeuds spécifiques + Profil Rechercher tous les enfants + Ajouter les sections auxquelles les utilisateurs peuvent accéder + Sélectionner les groupes d'utilisateurs + Aucun noeud de départ sélectionné + Aucun noeud de départ sélectionné + Actif + Tous + Désactivé + Bloqué + Invité Noeud de départ du contenu + Limiter l'arborescence de contenu à un noeud de départ spécifique + Noeuds de départ du contenu + Limiter l'arborescence de contenu à des noeuds de départ spécifiques + Nom (A-Z) + Nom (Z-A) + Plus récent + Plus ancien + Dernière connexion + Dernière mise à jour de l'utilisateur + a été créé + Le nouvel utilisateur a été créé avec succès. Utilisez le mot de passe ci-dessous pour la connexion à Umbraco. + Gestion des utilisateurs Nom d'utilisateur - Permissions utilisateur + Permissions de l'utilisateur + Permissions du groupe d'utilisateurs + Groupe d'utilisateurs + Groupes d'utilisateurs + a été invité + Une invitation a été envoyée au nouvel utilisateur avec les détails concernant la connexion à Umbraco. + Bien le bonjour et bienvenue dans Umbraco! Vous serez prêt.e dans moins d'1 minute, vous devez encore simplement configurer votre mot de passe et ajouter une photo pour votre avatar. + Chargez une photo afin que les autres utilisateurs puissent vous reconnaître facilement. Rédacteur Traducteur Modifier Votre profil Votre historique récent La session expire dans + Inviter un utilisateur + Créer un utilisateur + Envoyer l'invitation + Retour aux utilisateurs + Umbraco: Invitation + + + + + + + + + + + + +
      + + + + + +
      + +
      + +
      +
      + + + + + + +
      +
      +
      + + + + +
      + + + + +
      +

      + Salut %0%, +

      +

      + Vous avez été invité.e par %1% à accéder au Umbraco Back Office. +

      +

      + Message de %1%: +
      + %2% +

      + + + + + + +
      + + + + + + +
      + + Cliquez sur ce lien pour accepter l'invitation + +
      +
      +

      Si vous ne pouvez pas cliquer sur le lien, copiez cet URL dans votre navigateur :

      + + + + +
      + + %3% + +
      +

      +
      +
      +


      +
      +
      + + ]]> +
      + Inviter + Nouvel envoi de l'invitation en cours... + Supprimer l'Utilisateur + Etes-vous certain(e) de vouloir supprimer le compte de cet utilisateur? + Validation Valider comme email @@ -1541,8 +2088,14 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Total XML : %0%, Total : %1% Total XML : %0%, Total publié : %1% + Base de données - Le schéma de la base de données est correct pour cette version de Umbraco + %0% problèmes ont été détectés avec le schéma de votre base de données (Voyez le fichier log pour les détails) + Des erreurs ont été détectées lors de la validation du schéma de la base de données par rapport à la version actuelle de Umbraco. + Le certificat de votre site a été marqué comme valide. Erreur de validation du certificat : '%0%' + Le certificat SSL de votre site web a expiré. + Le certificat SSL de votre site web va expirer dans %0% jours. Erreur en essayant de contacter l'URL %0% - '%1%' Vous êtes actuellement %0% à voir le site via le schéma HTTPS. La valeur appSetting 'umbracoUseSSL' est fixée à 'false' dans votre fichier web.config. Une fois que vous donnerez accès à ce site en utilisant le schéma HTTPS, cette valeur devra être mise à 'true'. @@ -1588,6 +2141,21 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Une configuration générant un header qui empêche l'intégration du site par d'autres sites via IFRAME a été ajoutée à votre fichier web.config. Impossible de modifier le fichier web.config. Erreur : %0% + X-Content-Type-Options utilisé pour la protection contre les vulnérabilités de MIME sniffing a été trouvé.]]> + X-Content-Type-Options utilisé pour la protection contre les vulnérabilités de MIME sniffing n'a pas été trouvé.]]> + Ajoute une valeur dans la section httpProtocol/customHeaders du fichier web.config pour protéger contre les vulnérabilités de MIME sniffing. + Une configuration a été ajoutée dans votre fichier web.config pour créer un header protégeant contre les vulnérabilités de MIME sniffing. + + Strict-Transport-Security, aussi connu sous le nom de HSTS-header, a été trouvé.]]> + Strict-Transport-Security, aussi connu sous le nom de HSTS-header, n'a pas été trouvé.]]> + Ajoute l'en-tête 'Strict-Transport-Security' avec la valeur 'max-age=10886400; preload' à la section httpProtocol/customHeaders du fichier web.config. Utilisez cette correction uniquement si vos domaines vont fonctionner en https pour les 18 prochaines semaines (minimum). + L'en-tête HSTS a été ajouté dans votre fichier web.config. + + X-XSS-Protection a été trouvé.]]> + X-XSS-Protection n'a pas été trouvé.]]> + Ajoute l'en-tête 'X-XSS-Protection' avec la valeur '1; mode=block' à la section httpProtocol/customHeaders du fichier web.config. + L'en-tête X-XSS-Protection a été ajouté dans votre fichier web.config. + @@ -1601,6 +2169,8 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à %0%.]]> %0%.]]> +

      Les résultats de l'exécution du Umbraco Health Checks planifiée le %0% à %1% sont les suivants :

      %2%]]>
      + Statut du Umbraco Health Check Désactiver URL tracker @@ -1622,5 +2192,7 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Pas d'élément de dictionaire à choisir + + caractères restant + - diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/he.xml b/src/Umbraco.Web.UI/umbraco/config/lang/he.xml index 686ac9f837..1e3258976a 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/he.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/he.xml @@ -2,7 +2,7 @@ The Umbraco community - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files נהל שמות מתחם @@ -383,7 +383,7 @@

      To proceed, please edit the "web.config" file (using Visual Studio or your favourite text editor), scroll to the bottom, add the connection string for your database in the key named "UmbracoDbDSN" and save the file.

      Click the retry button when - done.
      + done.
      More information on editing web.config here.

      ]]> Please contact your ISP if necessary. diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/it.xml b/src/Umbraco.Web.UI/umbraco/config/lang/it.xml index 6132c2a7ab..dba069327e 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/it.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/it.xml @@ -2,7 +2,7 @@ The Umbraco community - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files Gestisci hostnames @@ -127,38 +127,38 @@ Benvenuto - Stay - Discard changes - You have unsaved changes - Are you sure you want to navigate away from this page? - you have unsaved changes + Rimani + Scarta le modifiche + Hai delle modifiche non salvate + Sei sicuro di voler lasciare questa pagina? - hai delle modifiche non salvate - Done + Fatto - Deleted %0% item - Deleted %0% items - Deleted %0% out of %1% item - Deleted %0% out of %1% items + Elimianto %0% elemento + Elimianto %0% elementi + Eliminato %0% su %1% elemento + Eliminato %0% su %1% elementi - Published %0% item - Published %0% items - Published %0% out of %1% item - Published %0% out of %1% items + Pubblicato %0% elemento + Pubblicato %0% elementi + Pubblicato %0% su %1% elemento + Pubblicato %0% su %1% elementi - Unpublished %0% item - Unpublished %0% items - Unpublished %0% out of %1% item - Unpublished %0% out of %1% items + %0% elemento non pubblicato + %0% elementi non pubblicati + Elementi non pubblicati - %0% su %1% + Elementi non pubblicati - %0% su %1% - Moved %0% item - Moved %0% items - Moved %0% out of %1% item - Moved %0% out of %1% items + Spostato %0% elemento + Spsotato %0% elementi + Spostato %0% su %1% elemento + Spostato %0% su %1% elementi - Copied %0% item - Copied %0% items - Copied %0% out of %1% item - Copied %0% out of %1% items + Copiato %0% elemento + Copiato %0% elementi + Copiato %0% su %1% elemento + Copiato %0% su %1% elementi Titolo del Link @@ -381,7 +381,7 @@ Avanti per proseguire.]]> Database non trovato! Perfavore, controlla che le informazioni della stringa di connessione nel file "web.config" siano corrette.

      -

      Per procedere, edita il file "web.config" (utilizzando Visual Studio o l'editor di testo che preferisci), scorri in basso, aggiungi la stringa di connessione per il database chiamato "umbracoDbDSN" e salva il file.

      Clicca il tasto riprova quando hai finito.
      Maggiori dettagli per la modifica del file web.config qui.

      ]]> +

      Per procedere, edita il file "web.config" (utilizzando Visual Studio o l'editor di testo che preferisci), scorri in basso, aggiungi la stringa di connessione per il database chiamato "umbracoDbDSN" e salva il file.

      Clicca il tasto riprova quando hai finito.
      Maggiori dettagli per la modifica del file web.config qui.

      ]]>
      Premi il tasto aggiorna per aggiornare il database ad Umbraco %0%

      Non preoccuparti, il contenuto non verrà perso e tutto continuerà a funzionare dopo l'aggiornamento!

      ]]>
      @@ -738,43 +738,43 @@ Per gestire il tuo sito web, è sufficiente aprire il back office di Umbraco e i Embed Headline Quote - Choose type of content - Choose a layout - Add a row - Add content - Drop content - Settings applied + Seleziona il tipo di contenuto + Seleziona un layout + Aggiungi una riga + Aggiungi contenuto + Elimina contenuto + Impostazioni applicati - This content is not allowed here - This content is allowed here + Questo contenuto non è consentito qui + Questo contenuto è consentito qui - Click to embed - Click to insert image - Image caption... - Write here... + Clicca per incorporare + Clicca per inserire l'immagine + Didascalia dell'immagine... + Scrivi qui... - Grid Layouts - Layouts are the overall work area for the grid editor, usually you only need one or two different layouts - Add Grid Layout - Adjust the layout by setting column widths and adding additional sections - Row configurations - Rows are predefined cells arranged horizontally - Add row configuration - Adjust the row by setting cell widths and adding additional cells + I Grid Layout + I layout sono l'area globale di lavoro per il grid editor, di solito ti serve solo uno o due layout differenti + Aggiungi un Grid Layout + Sistema il layout impostando la larghezza della colonna ed aggiungendo ulteriori sezioni + Configurazioni della riga + Le righe sono le colonne predefinite disposte orizzontalmente + Aggiungi configurazione della riga + Sistema la riga impostando la larghezza della colonna ed aggiungendo ulteriori colonne - Columns - Total combined number of columns in the grid layout + Colonne + Totale combinazioni delle colonne nel grid layout - Settings - Configure what settings editors can change + Impostazioni + Configura le impostazioni che possono essere cambiate dai editori - Styles - Configure what styling editors can change + Stili + Configura i stili che possono essere cambiati dai editori - Settings will only save if the entered json configuration is valid + Le impostazioni verranno salvate soltanto se è valido il json inserito - Allow all editors - Allow all row configurations + Permetti tutti i editor + Permetti tutte le configurazioni della riga diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/ja.xml b/src/Umbraco.Web.UI/umbraco/config/lang/ja.xml index fb5918db81..2d53b99237 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/ja.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/ja.xml @@ -2,7 +2,7 @@ The Umbraco community - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files ドメインの割り当て diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/ko.xml b/src/Umbraco.Web.UI/umbraco/config/lang/ko.xml index 01c2704178..ab830a39a5 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/ko.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/ko.xml @@ -2,7 +2,7 @@ The Umbraco community - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files 호스트명 관리 @@ -378,7 +378,7 @@ 데이터베이스를 찾을 수 없습니다. “web.config”파일의 "connection string"이 바르게 설정되었는지 확인하세요.

      "web.config" 파일에 맨아래에 ,키네임을 "UmbracoDbDSN"로 하여 사용하시는 데이터베이스의 connection string 정보를 입력하시고 파일을 저장하세요.

      - 완료 후재시도버튼을 누르세요.
      + 완료 후재시도버튼을 누르세요.
      web.config의 더많은 정보는 여기에 있습니다.

      ]]>
      필요하시다면 사용하시는 ISP쪽에 문의하시기 바랍니다.. diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/nl.xml b/src/Umbraco.Web.UI/umbraco/config/lang/nl.xml index d398a839ec..211f7f6e48 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/nl.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/nl.xml @@ -2,7 +2,7 @@ The Umbraco community - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files Beheer domeinnamen @@ -36,6 +36,10 @@ Sorteren Vertalen Bijwerken + Rechten instellen + Deblokkeer + Content sjabloon aanmaken + Uitnodiging opnieuw versturen Toegang geweigerd. @@ -171,7 +175,14 @@ Subitems Doel Dit betekend de volgende tijd op de server: - Wat houd dit in?]]> + Wat houd dit in?]]> + Ben je er zeker van dat je dit item wilt verwijderen? + Eigenschap %0% gebruikt editor %1% welke niet wordt ondersteund door Nested Content. + Voeg nog een tekstvak toe + Verwijder dit tekstvak + Content root + Deze waarde is verborgen. Indien u toegang nodig heeft om deze waarde te bekijken, contacteer dan uw website administrator. + Deze waarde is verborgen Klik om te uploaden @@ -214,6 +225,7 @@ Negeer wijzigingen Wijzigingen niet opgeslagen Weet je zeker dat deze pagina wilt verlaten? - er zijn onopgeslagen wijzigingen + Depubliceren zal deze pagina en alle onderliggend paginas verwijderen van de site. Done @@ -506,6 +518,7 @@ Verstuur Typen Typ om te zoeken... + onder Omhoog Update Upgrade @@ -574,7 +587,7 @@ Database configuratie installeren om de Umbraco %0% database te installeren]]> Volgende om door te gaan.]]> - De database kon niet gevonden worden! Gelieve na te kijken of de informatie in de "connection string" van het "web.config" bestand correct is.

      Om door te gaan, gelieve het "web.config" bestand aan te passen (met behulp van Visual Studio of je favoriete tekstverwerker), scroll in het bestand naar beneden, voeg de connection string voor je database toe in de key met naam "umbracoDbDSN" en sla het bestand op.

      Klik op de knop opnieuw proberen als je hiermee klaar bent.
      Meer informatie over het aanpassen van de web.config vind je hier.

      ]]>
      + De database kon niet gevonden worden! Gelieve na te kijken of de informatie in de "connection string" van het "web.config" bestand correct is.

      Om door te gaan, gelieve het "web.config" bestand aan te passen (met behulp van Visual Studio of je favoriete tekstverwerker), scroll in het bestand naar beneden, voeg de connection string voor je database toe in de key met naam "umbracoDbDSN" en sla het bestand op.

      Klik op de knop opnieuw proberen als je hiermee klaar bent.
      Meer informatie over het aanpassen van de web.config vind je hier.

      ]]>
      Gelieve contact op te nemen met je ISP indien nodig. Wanneer je installeert op een lokale computer of server, dan heb je waarschijnlijk informatie nodig van je systeembeheerder.]]> Klik de upgrade knop om je database te upgraden naar Umbraco %0%

      Maak je geen zorgen - er zal geen inhoud worden gewist en alles blijft gewoon werken!

      ]]>
      Klik Volgende om verder te gaan.]]> @@ -1018,6 +1031,28 @@ Echter, Runway biedt een gemakkelijke basis om je snel op weg te helpen. Als je Script view niet opgeslagen Er is een fout opgetreden bij het opslaan van dit bestand. Er is een fout opgetreden bij het opslaan van dit bestand. + %0% gebruikersgroepen verwijderd + %0% is verwijderd + %0% gebruikers geactiveerd + Er heeft zich een fout voorgedaan tijdens het activeren van de gebruikers + %0% users gedeactiveerd + Er heeft zich een fout voorgedaan tijdens het deactiveren van de gebruikers + %0% is nu geactiveerd + Er heeft zich een fout voorgedaan tijdens het activeren van de gebruiker + %0% is nu gedeactiveerd + Er heeft zich een fout voorgedaan tijdens het deactiveren van de gebruiker + Gebruikers groepen zijn ingesteld + %0% gebruikersgroepen verwijderd + %0% is verwijderd + %0% gebruikers gedeblokkeerd + Er heeft zich een fout voorgedaan tijdens het deblokkeren van de gebruikers + %0% is nu gedeblokkeerd + Er heeft zich een fout voorgedaan tijdens het deblokkeren van de gebruikers + Lid is geexporteerd naar een bestand + Er heeft zich een fout voorgedaan tijdens het exporteren van het lid + Gebruiker %0% is verwijderd + Gebruiker uitnodigen + Uitnodiging is opnieuw gestuurd naar gebruiker %0% Gebruik CSS syntax bijv: h1, .redHeader, .blueTex @@ -1146,7 +1181,12 @@ Echter, Runway biedt een gemakkelijke basis om je snel op weg te helpen. Als je die gebruik maken van deze editor zullen geupdate worden met deze nieuwe instellingen Lid kan bewerken + Toestaan dat deze eigenschap kan worden gewijzigd door het lid op zijn profiel pagina. + Omvat gevoelige gegevens + Verberg deze eigenschap voor de content editor die geen toegang heeft tot het bekijken van gevoelige informatie. Toon in het profiel van leden + Toelaten dat deze eigenschap wordt getoond op de profiel pagina van het lid. + tab heeft geen sorteervolgorde @@ -1274,23 +1314,45 @@ Om een vertalingstaak te sluiten, ga aub naar het detailoverzicht en klik op de Er is een fout opgetreden bij het zoeken naar een update. Bekijk de trace-stack voor verdere informatie. + Toegang + Gebaseerd op de gebruikers groepen en start pagina's heeft de bruiker toegang tot de volgende pagina's + Toegang geven Beheerders Categorieveld + Gebruiker aangemaakt Verander je wachtwoord + Wijzig je foto Wijzig je wachtwoord + is niet gedeblokkeerd + Het wachtwoord is niet gewijzigd Bevestig nieuw password Je kunt je wachtwoord veranderen door onderstaan formulier in te vullen en op de knop 'Verander wachtwoord' te klikken Inhoudskanaal + Nog een gebruiker aanmaken + Maak nieuwe gebruikers aan om hun toegang te geven tot Umbraco. Wanneer een nieuwe gebruiker wordt aangemaakt wordt er een wachtwoord gegenereerd dat je met hun kan delen. Omschrijving Geblokkeerde gebruiker Documenttype Redacteur Samenvattingsveld + Foute wachtwoord pogingen + Ga naar gebruikersprofiel + Voeg gebruikersgroepen toe om rechten in te stellen + Nog een gebruiker uitnodigen + Nodig gebruikers uit om hen toegang te geven to Umbraco. Een uitnodiging wordt via e-mail verstuurd met instructies hoe de gebruiker kan inloggen. Taal + Stel de taal in die gebruiker zal zien in menu's en dialoog vensters + Laatst geblokkeerd datu, + Laatste keer ingelogd + Laatste keer paswoord gewijzigd Loginnaam Startnode in Mediabibliotheek + Beperk de mediabibliotheek tot een specifieke startnode + Startnodes in Mediabibliotheek + Beperk de mediabibliotheek tot een specifieke startnodes Secties Blokkeer Umbraco toegang + heeft nog niet ingelogd Oude wachtwoord Wachtwoord Reset wachtwoord @@ -1305,16 +1367,151 @@ Om een vertalingstaak te sluiten, ga aub naar het detailoverzicht en klik op de Vervang rechten op de subitems U bent momenteel rechten aan het aanpassen voor volgende pagina's: Selecteer pagina's om hun rechten aan te passen - Doorzoek alle subitems - Startnode in Content + Verwijder je foto + Standaard rechten + Specifieke rechten + Geef rechten op specifieke nodes + Profiel + Doorzoek alle subitems + Geef de gebruiker toegang tot secties + Selecteer een gebruikersgroep + Geen startnode geselecteerd + Geen startnodes geselecteerd + Actief + Alles + Gedeactiveerd + Geblokkeerd + Uitgenodigd + Startnode in Content + Beperk de content toegan een specifieke start node + Startnodes in Content + Beperk de content toegan een specifieke start nodes + Naam (A-Z) + Naam (Z-A) + Nieuwste + Oudste + Laatste inlog + Laatste keer bijgewerkt + is aangemaakt + De gebruiker is aangemaakt. Om in te loggen in Umbraco gebruik je onderstaand wachtwoord. + Gebruikers beheren Gebruikersnaam Gebruikersrechten + Gebruikersgroep rechten + Gebruikersgroep + Gebruikersgroepen + is uitgenodigd + Een uitnodiging is gestuurd naar de nieuwe gebruiker met informatie over hoe in te loggen in Umbraco + Hallo en welk in Umbraco! Binnen ongeveer 1 minuut kan je aan de slag. Je moet enkel je wachtwoord instellen en een foto toevoegen. + Wijzig je foto zodat andere gebruikers je makkelijk kunnen herkennen. Auteur Vertaler Wijzig Je profiel Je recente historie Sessie verloopt over + Gebruiker uitnodigen + Gebruiker aanmaken + Uitnodiging versturen + Terug naar gebruikers + Umbraco: Uitnodiging + + + + + + + + + + + + +
      + + + + + +
      + +
      + +
      +
      + + + + + + +
      +
      +
      + + + + +
      + + + + +
      +

      + Hallo %0%, +

      +

      + U bent uitgenodigd door %1% om in te loggen in de Umbraco Backoffice. +

      +

      + Bericht van %1%: +
      + %2% +

      + + + + + + +
      + + + + + + +
      + + Klik hier om de uitnodiging te accepteren + +
      +
      +

      Als je niet op de link kunt klikken, kopieer deze dan in de adresbalk van je browser:

      + + + + +
      + + %3% + +
      +

      +
      +
      +


      +
      +
      + + ]]> +
      + Uitnodigen + Uitnodiging opnieuw aan het versturen... + Verwijder gebruiker + Ben je zeker dat je deze gebruiker wil verwijderen? Validatie @@ -1444,4 +1641,11 @@ Om een vertalingstaak te sluiten, ga aub naar het detailoverzicht en klik op de URL tracker staat nu aan. Fout bij het aanzetten van de URL tracker. Meer informatie kan gevonden worden in de log file. + + Content verwijderd met id : {0} gerelateerd aan aan bovenliggend item met Id: {1} + Media verwijderd met id: {0} gerelateerd aan aan bovenliggend item met Id: {1} + Kan dit item niet automatisch herstellen + Er is geen 'herstel' relatie gevonden voor dit item. Gebruik de "Verplaats" optie om het manueel terug te zetten + Het item dat u wil herstellen onder ('%0%') zit in de prullenbak. Gebruik de "Verplaats" optie om het manueel terug te zetten +
      diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/pl.xml b/src/Umbraco.Web.UI/umbraco/config/lang/pl.xml index d47b06d10e..98759d5851 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/pl.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/pl.xml @@ -2,7 +2,7 @@ The Umbraco community - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files Zarządzanie hostami @@ -214,7 +214,7 @@ Elementy dzieci Cel Oznacza to następującą godzinę na serwerze: - Co to oznacza?]]> + Co to oznacza?]]> Czy na pewno chcesz usunąć ten element? Właściwość %0% używa edytora %1%, który nie jest wspierany przez Nested Content. Dodaj kolejne pole tekstowe @@ -688,7 +688,7 @@ Naciśnij przycisk instaluj, aby zainstalować bazę danych Umb

      Aby kontynuować, dokonaj edycji pliku "web.config" (używając Visual Studio lub dowolnego edytora tekstu), przemieść kursor na koniec pliku, dodaj parametry połączenia do Twojej bazy danych w kluczu o nazwie "umbracoDbDSN" i zapisz plik.

      Kliknij ponów próbę kiedy - skończysz.
      + skończysz.
      Tu znajdziesz więcej informacji na temat edycji pliku "web.config".

      ]]>
      Skontaktuj się z Twoim dostawą usług internetowych jeśli zajdzie taka potrzeba. diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/pt.xml b/src/Umbraco.Web.UI/umbraco/config/lang/pt.xml index 1ffa74f87f..bcbd609b5f 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/pt.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/pt.xml @@ -2,7 +2,7 @@ The Umbraco community - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files Gerenciar hostnames @@ -374,7 +374,7 @@ Próximo para prosseguir.]]> Banco de dados não encontrado! Favor checar se a informação no "connection string" do "web.config" esteja correta.

      Para prosseguir, favor editar o arquivo "web.config" (usando Visual Studio ou seu editor de texto favorito), role até embaixo, adicione a connection string para seu banco de dados com a chave de nome "UmbracoDbDSN" e salve o arquivo

      -

      Clique o botão tentar novamente quando terminar.
      +

      Clique o botão tentar novamente quando terminar.
      Mais informações em como editar o web.config aqui.

      ]]>
      Favor contatar seu provedor de internet ou hospedagem web se necessário. Se você estiver instalando em uma máquina ou servidor local é possível que você precise dessas informações por um administrador de sistema.]]> diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/ru.xml b/src/Umbraco.Web.UI/umbraco/config/lang/ru.xml index 009fbdb683..8ebe8c0ef7 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/ru.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/ru.xml @@ -1,8 +1,8 @@ - + The Umbraco community - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files Языки и домены @@ -19,6 +19,7 @@ Отключить Очистить корзину Включить + Экспорт Экспортировать Импортировать Импортировать пакет @@ -158,8 +159,9 @@ Вернуться к списку Сохранить Сохранить и построить модели - Сохранить и опубликовать - Сохранить и направить на публикацию + Опубликовать + Запланировать + Направить на публикацию Сохранить список Выбрать Выбрать текущую папку @@ -201,7 +203,20 @@ Желтый Оранжевый Синий + Серо-синий + Серый + Коричневый + Светло-синий + Голубой + Светло-зеленый + Лайм + Янтарный + Рыжий Красный + Розовый + Лиловый + Темно-лиловый + Индиго Об этой странице @@ -221,6 +236,8 @@ Скрыть ВНИМАНИЕ: невозможно получить URL документа (внутренняя ошибка - подробности в системном журнале) Опубликовано + Это значение скрыто. Если Вам нужен доступ к просмотру этого значения, свяжитесь с администратором веб-сайта. + Это значение скрыто. Этот документ был изменен после публикации Этот документ не опубликован Документ опубликован @@ -236,19 +253,24 @@ Тип участника Вы уверены, что хотите удалить этот элемент? Свойство '%0%' использует редактор '%1%', который не поддерживается для вложенного содержимого. + Не было сделано никаких изменений Дата не указана Заголовок страницы + Этот медиа-элемент не содержит ссылки Доступные группы Свойства Этот документ опубликован, но скрыт, потому что его родительский документ '%0%' не опубликован ВНИМАНИЕ: этот документ опубликован, но его нет в глобальном кэше (внутренняя ошибка - подробности в системном журнале) Опубликовать + Опубликовано + Опубликовано (есть измененения) Состояние публикации Опубликовать Очистить дату ВНИМАНИЕ: этот документ опубликован, но его URL вступает в противоречие с документом %0% Это время будет соответствовать следующему времени на сервере: - Что это означает?]]> + Что это означает?]]> + Задать дату Порядок сортировки обновлен Для сортировки узлов просто перетаскивайте узлы или нажмите на заголовке столбца. Вы можете выбрать несколько узлов, удерживая клавиши "shift" или "ctrl" при пометке Статистика @@ -256,6 +278,7 @@ Заголовок (необязательно) Тип Скрыть + Распубликовано Распубликовать Последняя правка Дата/время редактирования документа @@ -289,6 +312,8 @@ Выбрать дочерний узел Унаследовать вкладки и свойства из уже существующего типа документов. Вкладки будут либо добавлены в создаваемый тип, либо в случае совпадения названий вкладок будут добавлены наследуемые свойства. Этот тип документов уже участвует в композиции другого типа, поэтому сам не может быть композицией. + Где используется эта композиция? + Эта композиция сейчас используется при создании следующих типов документов: В настоящее время нет типов документов, допустимых для построения композиции. Доступные редакторы @@ -320,7 +345,11 @@ , использующие этот редактор, будут обновлены с применением этих установок Участник может изменить + Разрешает редактирование значение данного свойства участником в своем профиле + Конфеденциальные данные + Скрывает значение это свойства от редакторов содержимого, не имеющих доступа к конфеденциальной информации Показать в профиле участника + Разрешает показ данного свойства в профиле участника для вкладки не указан порядок сортировки @@ -447,6 +476,7 @@ Ключ '%0%' уже существует в словаре. ]]> + Обзор словаря Допустим как корневой @@ -569,13 +599,16 @@ Ошибка Найти Начало + Общее Группы Папка Высота Справка Скрыть + История Иконка Импорт + Инфо Внутренний отступ Вставить Установить @@ -585,6 +618,7 @@ Язык Конец Макет + Ссылки Загрузка БЛОКИРОВКА Войти @@ -605,6 +639,7 @@ Ok Открыть Вкл + Варианты или Сортировка по Пароль @@ -624,6 +659,7 @@ Получить Повторить Разрешения + Публикация по расписанию Поиск К сожалению, ничего подходящего не нашлось Результаты поиска @@ -657,7 +693,8 @@ Сохранение... текущий выбрано - Внедрить + Встроить + Получить Цвет фона @@ -667,12 +704,12 @@ Текст - Rich Text Editor - Image - Macro - Embed - Headline - Quote + Редактор текста + Изображение + Макрос + Встраивание + Заголовок + Цитата Добавить содержимое Сбросить содержимое Добавить шаблон сетки @@ -754,9 +791,10 @@ Медиа - всего в XML: %0%, всего: %1%Б с ошибками: %2% Содержимое - всего в XML: %0%, всего опубликовано: %1%, с ошибками: %2% + Ошибка проверки адреса URL %0% - '%1%' + Сертификат Вашего веб-сайта отмечен как проверенный. Ошибка проверки сертификата: '%0%' - Ошибка проверки адреса URL %0% - '%1%' Сейчас Вы %0% просматриваете сайт, используя протокол HTTPS. Параметр 'umbracoUseSSL' в секции 'appSetting' установлен в 'false' в файле web.config. Если Вам необходим доступ к сайту по протоколу HTTPS, нужно установить данный параметр в 'true'. Параметр 'umbracoUseSSL' в секции 'appSetting' в файле установлен в '%0%', значения cookies %1% маркированы как безопасные. @@ -796,11 +834,27 @@ X-Frame-Options, использующийся для управления возможностью помещать сайт в IFRAME на другом сайте.]]> X-Frame-Options, использующийся для управления возможностью помещать сайт в IFRAME на другом сайте, не обнаружен.]]> - Установить заголовок в файле конфигурации Добавляет значение в секцию 'httpProtocol/customHeaders' файла web.config, препятствующее возможному использованию этого сайта внутри IFRAME на другом сайте. Значение, добавляющее заголовок, препятствующий использованию этого сайта внутри IFRAME другого сайта, успешно добавлено в файл web.config. + + Установить заголовок в файле конфигурации Невозможно обновить файл web.config. Ошибка: %0% + X-Content-Type-Options, использующиеся для защиты от MIME-уязвимостей, обнаружены.]]> + X-Content-Type-Options, использующиеся для защиты от MIME-уязвимостей, не найдены.]]> + Добавляет значение в секцию httpProtocol/customHeaders файла web.config, препятствующее использованию MIME-уязвимостей. + Значение, добавляющее заголовок, препятствующий использованию MIME-уязвимостей, успешно добавлено в файл web.config. + + Strict-Transport-Security, известный также как HSTS-header, обнаружен.]]> + Strict-Transport-Security не найден.]]> + Добавляет заголовок 'Strict-Transport-Security' и его значение 'max-age=10886400; preload' в секцию httpProtocol/customHeaders файла web.config. Применяйте этот способ только в случае, если доступ к Вашим сайтам будет осуществляться по протоколу https как минимум ближайшие 18 недель. + Заголовок HSTS-header успешно добавлен в файл web.config. + + X-XSS-Protection обнаружен.]]> + X-XSS-Protection не найден.]]> + Добавляет заголовок 'X-XSS-Protection' и его значение '1; mode=block' в секцию httpProtocol/customHeaders файла web.config. + Заголовок X-XSS-Protection успешно добавлен в файл web.config. + @@ -843,7 +897,7 @@

      Для настройки откройте файл "web.config" с помощью любого текстового редактора и добавьте нужную информацию в строку подключения (параметр "UmbracoDbDSN"), затем сохраните файл.

      Нажмите кнопку "Повторить" когда все будет готово
      - Более подробно о внесении изменений в файл "web.config" рассказано здесь.

      ]]>
      @@ -970,7 +1024,87 @@ Ссылка, по которой Вы попали сюда, неверна или устарела Umbraco: сброс пароля -

      Ваше имя пользователя для входа в панель администрирования Umbraco: %0%

      Перейдите по этой ссылке для того, чтобы сбросить Ваш пароль, или скопируйте текст ссылки и вставьте в адресную строку своего браузера:

      %1%

      ]]> + + + + + + + + + + + +
      + + + + + +
      + +
      + +
      +
      + + + + + + +
      +
      +
      + + + + +
      + + + + +
      +

      + Запрошен сброс пароля +

      +

      + Ваше имя пользователя для входа в административную панель Umbraco: %0% +

      +

      + + + + + + +
      + + Нажмите на эту ссылку для того, чтобы сбросить пароль + +
      +

      +

      Если Вы не имеете возможности нажать на сслыку, скопируйте следующий адрес (URL) и вставьте в адресную строку Вашего браузера:

      + + + + +
      + + %1% + +
      +

      +
      +
      +


      +
      +
      + + + ]]>
      @@ -1027,34 +1161,88 @@ Удачи! Генератор уведомлений Umbraco. - ]]>
      - Здравствуйте, %0%

      - -

      Это автоматически сгенерированное уведомление. Операция '%1%' - была произведена на странице '%2%' - пользователем '%3%'.

      - - - -

      -

      Сводка обновлений:

      - - %6% -
      -

      - - - -

      Удачи!

      Генератор уведомлений Umbraco -

      ]]>
      + ]]> +
      + + + + + + + + + + + + +
      + + + + + +
      + +
      + +
      +
      + + + + + + +
      +
      +
      + + + + +
      + + + + +
      +

      + Здравствуйте, %0%, +

      +

      + Это автоматически сгенерированное сообщение, отправленное, чтобы уведомить Вас о том, что операция '%1%' была выполнена на странице '%2%' пользователем '%3%' +

      + + + + + + +
      + +
      + ВНЕСТИ ИЗМЕНЕНИЯ
      +
      +

      +

      Обзор обновления:

      + + %6% +
      +

      +

      + Удачного дня!

      + К Вашим услугам, почтовый робот Umbraco +

      +
      +
      +


      +
      +
      + + + ]]> +
      [%0%] Уведомление об операции %1% над документом %2% Уведомления @@ -1409,6 +1597,8 @@ При разблокировке пользователей произошла ошибка '%0%' сейчас разблокирован При разблокировке пользователя произошла ошибка + Данные участника успешно экспортированы в файл + Во время экспортирования данных участника произошла ошибка Используется синтаксис селекторов CSS, например: h1, .redHeader, .blueTex @@ -1682,9 +1872,103 @@ Неудачных попыток входа К профилю пользователя Добавьте пользователя в группу(ы) для задания прав доступа + Пригласить Приглашение в панель администрирования Umbraco

      Здравствуйте, %0%,

      Вы были приглашены пользователем %1%, и Вам предоставлен доступ в панель администрирования Umbraco.

      Сообщение от %1%: %2%

      Перейдите по этой ссылке, чтобы принять приглашение.

      Если Вы не имеете возможности перейти по ссылке, скопируйте нижеследующий текст ссылки и вставьте в адресную строку Вашего браузера.

      %3%

      ]]> + + + + + + + + + + + + +
      + + + + + +
      + +
      + +
      +
      + + + + + + +
      +
      +
      + + + + +
      + + + + +
      +

      + Здравствуйте, %0%, +

      +

      + Вы были приглашены пользователем %1% в панель администрирования веб-сайта. +

      +

      + Сообщение от пользователя %1%: +
      + %2% +

      + + + + + + +
      + + + + + + +
      + + Нажмите на эту ссылку, чтобы принять приглашение + +
      +
      +

      Если Вы не имеете возможности нажать на ссылку, скопируйте следующий адрес (URL) и вставьте в адресную строку Вашего браузера:

      + + + + +
      + + %3% + +
      +

      +
      +
      +


      +
      +
      + + + ]]>
      Пригласить еще одного пользователя Пригласить пользователя @@ -1735,7 +2019,7 @@ Имя (Я-А) Сначала новые Сначала старые - Недавно зашедшие + Недавно заходившие Активные Все Отключенные diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/sv.xml b/src/Umbraco.Web.UI/umbraco/config/lang/sv.xml index fa59b36a26..0795752fad 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/sv.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/sv.xml @@ -2,7 +2,7 @@ The Umbraco community - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files Hantera domännamn @@ -456,7 +456,7 @@ Databaskonfiguration installera]]> Nästa för att fortsätta.]]> - Databasen kunde inte hittas! Kontrollera att informationen i databasanslutnings-inställningarna i filen "web.config" är rätt.

      För att fortsätta måste du redigera filen "web.config" (du kan använda Visual Studio eller din favorit text-redigerare), bläddra till slutet, lägg till databasanslutnings-inställningarna för din databas i fältet som heter "umbracoDbDSN" och spara filen.

      Klicka på Försök igen knappen när du är klar.
      > Mer information om att redigera web.config hittar du här.

      ]]>
      + Databasen kunde inte hittas! Kontrollera att informationen i databasanslutnings-inställningarna i filen "web.config" är rätt.

      För att fortsätta måste du redigera filen "web.config" (du kan använda Visual Studio eller din favorit text-redigerare), bläddra till slutet, lägg till databasanslutnings-inställningarna för din databas i fältet som heter "umbracoDbDSN" och spara filen.

      Klicka på Försök igen knappen när du är klar.
      > Mer information om att redigera web.config hittar du här.

      ]]>
      Eventuellt kan du behöva kontakta ditt webb-hotell. Om du installerar på en lokal maskin eller server kan du få informationen från din systemadministratör.]]> Tryck Uppgradera knappen för att uppgradera din databas till Umbraco %0%

      Du behöver inte vara orolig. Inget innehåll kommer att raderas och efteråt kommer allt att fungera som vanligt!

      ]]>
      Tryck Nästa för att fortsätta.]]> diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/tr.xml b/src/Umbraco.Web.UI/umbraco/config/lang/tr.xml index fe40a16d41..d2431e8802 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/tr.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/tr.xml @@ -2,7 +2,7 @@ The Umbraco community - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files Kültür ve Hostnames @@ -456,7 +456,7 @@

      Tekrar dene.
      - + Burada düzenleme web.config Hakkında Daha Fazla Bilgi.

      ]]> diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/zh.xml b/src/Umbraco.Web.UI/umbraco/config/lang/zh.xml index da2c1e3159..c2189ca928 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/zh.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/zh.xml @@ -2,7 +2,7 @@ 黄仁祥(wanddy@163.com) - http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files 管理主机名 @@ -176,7 +176,7 @@ 子项 目标 这将转换到服务器上的以下时间: - 这是什么意思?]]> + 这是什么意思?]]> 添加其他文本框 删除此文本框 @@ -613,7 +613,7 @@ 数据库未找到!请检查数据库连接串设置。

      您可以自行编辑“web.config”文件,键名为 “UmbracoDbDSN”

      - 当自行编辑后,单击重试按钮
      。 + 当自行编辑后,单击重试按钮
      。 如何编辑web.config

      ]]>
      diff --git a/src/Umbraco.Web.UI/umbraco/developer/Packages/DirectoryBrowser.aspx.cs b/src/Umbraco.Web.UI/umbraco/developer/Packages/DirectoryBrowser.aspx.cs index c2995b6793..cd71ece0db 100644 --- a/src/Umbraco.Web.UI/umbraco/developer/Packages/DirectoryBrowser.aspx.cs +++ b/src/Umbraco.Web.UI/umbraco/developer/Packages/DirectoryBrowser.aspx.cs @@ -95,7 +95,7 @@ namespace Umbraco.Web.UI.Umbraco.Developer.Packages { _sb.Append("" + oDir.Name + " (Include entire folder)"); } - catch (Exception ex) + catch (Exception) { _sb.Append("" + oDir.Name + " (Access Denied)"); } @@ -139,4 +139,4 @@ namespace Umbraco.Web.UI.Umbraco.Developer.Packages } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Web.UI/umbraco/developer/Packages/editPackage.aspx b/src/Umbraco.Web.UI/umbraco/developer/Packages/editPackage.aspx index 3ada3db523..aaaf149110 100644 --- a/src/Umbraco.Web.UI/umbraco/developer/Packages/editPackage.aspx +++ b/src/Umbraco.Web.UI/umbraco/developer/Packages/editPackage.aspx @@ -189,7 +189,7 @@ - + @@ -204,7 +204,7 @@ during installation and uninstallation.
      All actions are formed as a xml node, containing data for the action to be performed. - Package actions documentation

      -<%@ Register TagPrefix="cc1" Namespace="umbraco.uicontrols" Assembly="controls" %> - - - -
      - - - - - -
      - -
      \ No newline at end of file diff --git a/src/Umbraco.Web.UI/umbraco_client/Tree/jquery.tree.contextmenu.js b/src/Umbraco.Web.UI/umbraco_client/Tree/jquery.tree.contextmenu.js index b1b476aa59..5a0affbf2b 100644 --- a/src/Umbraco.Web.UI/umbraco_client/Tree/jquery.tree.contextmenu.js +++ b/src/Umbraco.Web.UI/umbraco_client/Tree/jquery.tree.contextmenu.js @@ -48,7 +48,7 @@ if (opts.items[i].separator_before === true) str += "
    •  
    • "; str += '
    • '; - // updated from patch by Matt Brailsford (http://our.umbraco.org/forum/using/ui-questions/6225-Custom-icon-in-Context-menu#comment39514) + // updated from patch by Matt Brailsford (https://our.umbraco.com/forum/using/ui-questions/6225-Custom-icon-in-Context-menu#comment39514) str += " "; str += ""; if (opts.items[i].icon && opts.items[i].icon.indexOf("/") >= 0) { str += "
      "; diff --git a/src/Umbraco.Web.UI/web.Template.Debug.config b/src/Umbraco.Web.UI/web.Template.Debug.config index e5a1d3f4f9..014fe14329 100644 --- a/src/Umbraco.Web.UI/web.Template.Debug.config +++ b/src/Umbraco.Web.UI/web.Template.Debug.config @@ -54,7 +54,7 @@ - + @@ -445,4 +445,4 @@ - \ No newline at end of file + diff --git a/src/Umbraco.Web.UI/web.Template.config b/src/Umbraco.Web.UI/web.Template.config index ee8d98cae3..b4f046b277 100644 --- a/src/Umbraco.Web.UI/web.Template.config +++ b/src/Umbraco.Web.UI/web.Template.config @@ -39,10 +39,10 @@ - + @@ -339,7 +339,7 @@ @@ -1987,10 +1981,10 @@ - + Dynamic Web References\org.umbraco.our\ - http://our.umbraco.org/umbraco/webservices/api/repository.asmx + https://our.umbraco.com/umbraco/webservices/api/repository.asmx diff --git a/src/Umbraco.Web/UmbracoHelper.cs b/src/Umbraco.Web/UmbracoHelper.cs index 75fba514cc..b06b786104 100644 --- a/src/Umbraco.Web/UmbracoHelper.cs +++ b/src/Umbraco.Web/UmbracoHelper.cs @@ -1,33 +1,30 @@ using System; +using System.Collections.Generic; using System.ComponentModel; +using System.IO; +using System.Linq; using System.Web; -using System.Web.Security; +using System.Web.Mvc; using System.Xml.Linq; using System.Xml.XPath; using Umbraco.Core; using Umbraco.Core.Dictionary; using Umbraco.Core.Dynamics; using Umbraco.Core.Models; -using Umbraco.Core.Security; using Umbraco.Core.Services; using Umbraco.Core.Xml; using Umbraco.Web.Routing; using Umbraco.Web.Security; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Web.Mvc; -using Umbraco.Core.Cache; namespace Umbraco.Web { /// - /// A helper class that provides many useful methods and functionality for using Umbraco in templates - /// - public class UmbracoHelper : IUmbracoComponentRenderer + /// A helper class that provides many useful methods and functionality for using Umbraco in templates + ///
+ public class UmbracoHelper : IUmbracoComponentRenderer { - private readonly UmbracoContext _umbracoContext; - private readonly IPublishedContent _currentPage; + private readonly UmbracoContext _umbracoContext; + private readonly IPublishedContent _currentPage; private readonly ITypedPublishedContentQuery _typedQuery; private readonly IDynamicPublishedContentQuery _dynamicQuery; private readonly HtmlStringUtilities _stringUtilities = new HtmlStringUtilities(); @@ -236,154 +233,169 @@ namespace Umbraco.Web #endregion /// - /// Returns the current IPublishedContent item assigned to the UmbracoHelper + /// Returns the current item + /// assigned to the UmbracoHelper. /// /// - /// Note that this is the assigned IPublishedContent item to the UmbracoHelper, this is not necessarily the Current IPublishedContent item - /// being rendered. This IPublishedContent object is contextual to the current UmbracoHelper instance. - /// - /// In some cases accessing this property will throw an exception if there is not IPublishedContent assigned to the Helper - /// this will only ever happen if the Helper is constructed with an UmbracoContext and it is not a front-end request + /// + /// Note that this is the assigned IPublishedContent item to the + /// UmbracoHelper, this is not necessarily the Current IPublishedContent + /// item being rendered. This IPublishedContent object is contextual to + /// the current UmbracoHelper instance. + /// + /// + /// In some cases accessing this property will throw an exception if + /// there is not IPublishedContent assigned to the Helper this will + /// only ever happen if the Helper is constructed with an UmbracoContext + /// and it is not a front-end request. + /// /// - /// Thrown if the UmbracoHelper is constructed with an UmbracoContext and it is not a front-end request - public IPublishedContent AssignedContentItem - { - get - { - if (_currentPage == null) - throw new InvalidOperationException("Cannot return the " + typeof(IPublishedContent).Name + " because the " + typeof(UmbracoHelper).Name + " was constructed with an " + typeof(UmbracoContext).Name + " and the current request is not a front-end request."); + /// Thrown if the + /// UmbracoHelper is constructed with an UmbracoContext and it is not a + /// front-end request. + public IPublishedContent AssignedContentItem + { + get + { + if (_currentPage != null) + { + return _currentPage; + } - return _currentPage; - } - } + throw new InvalidOperationException( + $"Cannot return the {nameof(IPublishedContent)} because the {nameof(UmbracoHelper)} was constructed with an {nameof(UmbracoContext)} and the current request is not a front-end request." + ); - /// - /// Renders the template for the specified pageId and an optional altTemplateId - /// - /// - /// If not specified, will use the template assigned to the node - /// - public IHtmlString RenderTemplate(int pageId, int? altTemplateId = null) - { + } + } + + /// + /// Renders the template for the specified pageId and an optional altTemplateId + /// + /// + /// If not specified, will use the template assigned to the node + /// + public IHtmlString RenderTemplate(int pageId, int? altTemplateId = null) + { return UmbracoComponentRenderer.RenderTemplate(pageId, altTemplateId); - } + } - #region RenderMacro + #region RenderMacro - /// - /// Renders the macro with the specified alias. - /// - /// The alias. - /// - public IHtmlString RenderMacro(string alias) - { + /// + /// Renders the macro with the specified alias. + /// + /// The alias. + /// + public IHtmlString RenderMacro(string alias) + { return UmbracoComponentRenderer.RenderMacro(alias, new { }); - } + } - /// - /// Renders the macro with the specified alias, passing in the specified parameters. - /// - /// The alias. - /// The parameters. - /// - public IHtmlString RenderMacro(string alias, object parameters) - { + /// + /// Renders the macro with the specified alias, passing in the specified parameters. + /// + /// The alias. + /// The parameters. + /// + public IHtmlString RenderMacro(string alias, object parameters) + { return UmbracoComponentRenderer.RenderMacro(alias, parameters.ToDictionary()); - } + } - /// - /// Renders the macro with the specified alias, passing in the specified parameters. - /// - /// The alias. - /// The parameters. - /// - public IHtmlString RenderMacro(string alias, IDictionary parameters) - { + /// + /// Renders the macro with the specified alias, passing in the specified parameters. + /// + /// The alias. + /// The parameters. + /// + public IHtmlString RenderMacro(string alias, IDictionary parameters) + { return UmbracoComponentRenderer.RenderMacro(alias, parameters); - } + } - #endregion + #endregion - #region Field + #region Field - /// - /// Renders an field to the template - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - //// - /// - public IHtmlString Field(string fieldAlias, - string altFieldAlias = "", string altText = "", string insertBefore = "", string insertAfter = "", - bool recursive = false, bool convertLineBreaks = false, bool removeParagraphTags = false, - RenderFieldCaseType casing = RenderFieldCaseType.Unchanged, - RenderFieldEncodingType encoding = RenderFieldEncodingType.Unchanged, - bool formatAsDate = false, - bool formatAsDateWithTime = false, - string formatAsDateWithTimeSeparator = "") - { - return UmbracoComponentRenderer.Field(AssignedContentItem, fieldAlias, altFieldAlias, - altText, insertBefore, insertAfter, recursive, convertLineBreaks, removeParagraphTags, - casing, encoding, formatAsDate, formatAsDateWithTime, formatAsDateWithTimeSeparator); - } - - /// - /// Renders an field to the template - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// + /// + /// Renders an field to the template + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// /// /// /// /// - //// - /// - public IHtmlString Field(IPublishedContent currentPage, string fieldAlias, - string altFieldAlias = "", string altText = "", string insertBefore = "", string insertAfter = "", - bool recursive = false, bool convertLineBreaks = false, bool removeParagraphTags = false, - RenderFieldCaseType casing = RenderFieldCaseType.Unchanged, - RenderFieldEncodingType encoding = RenderFieldEncodingType.Unchanged, - bool formatAsDate = false, + //// + /// + public IHtmlString Field(string fieldAlias, + string altFieldAlias = "", string altText = "", string insertBefore = "", string insertAfter = "", + bool recursive = false, bool convertLineBreaks = false, bool removeParagraphTags = false, + RenderFieldCaseType casing = RenderFieldCaseType.Unchanged, + RenderFieldEncodingType encoding = RenderFieldEncodingType.Unchanged, + bool formatAsDate = false, bool formatAsDateWithTime = false, string formatAsDateWithTimeSeparator = "") - { + { + return UmbracoComponentRenderer.Field(AssignedContentItem, fieldAlias, altFieldAlias, + altText, insertBefore, insertAfter, recursive, convertLineBreaks, removeParagraphTags, + casing, encoding, formatAsDate, formatAsDateWithTime, formatAsDateWithTimeSeparator); + } + + /// + /// Renders an field to the template + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + //// + /// + public IHtmlString Field(IPublishedContent currentPage, string fieldAlias, + string altFieldAlias = "", string altText = "", string insertBefore = "", string insertAfter = "", + bool recursive = false, bool convertLineBreaks = false, bool removeParagraphTags = false, + RenderFieldCaseType casing = RenderFieldCaseType.Unchanged, + RenderFieldEncodingType encoding = RenderFieldEncodingType.Unchanged, + bool formatAsDate = false, + bool formatAsDateWithTime = false, + string formatAsDateWithTimeSeparator = "") + { return UmbracoComponentRenderer.Field(currentPage, fieldAlias, altFieldAlias, altText, insertBefore, insertAfter, recursive, convertLineBreaks, removeParagraphTags, casing, encoding, formatAsDate, formatAsDateWithTime, formatAsDateWithTimeSeparator); - } + } - #endregion + #endregion - #region Dictionary + #region Dictionary - /// - /// Returns the dictionary value for the key specified - /// - /// - /// - public string GetDictionaryValue(string key) - { + /// + /// Returns the dictionary value for the key specified + /// + /// + /// + public string GetDictionaryValue(string key) + { return CultureDictionary[key]; - } + } /// /// Returns the dictionary value for the key specified, and if empty returns the specified default fall back value /// @@ -415,16 +427,16 @@ namespace Umbraco.Web } } - #endregion + #endregion - #region Membership + #region Membership - [EditorBrowsable(EditorBrowsableState.Never)] - [Obsolete("Use the IsProtected method that only specifies path")] + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("Use the IsProtected method that only specifies path")] public bool IsProtected(int documentId, string path) - { + { return IsProtected(path.EnsureEndsWith("," + documentId)); - } + } /// /// Check if a document object is protected by the "Protect Pages" functionality in umbraco @@ -453,30 +465,30 @@ namespace Umbraco.Web return MembershipHelper.MemberHasAccess(path); } - /// - /// Whether or not the current member is logged in (based on the membership provider) - /// - /// True is the current user is logged in - public bool MemberIsLoggedOn() - { + /// + /// Whether or not the current member is logged in (based on the membership provider) + /// + /// True is the current user is logged in + public bool MemberIsLoggedOn() + { return MembershipHelper.IsLoggedIn(); - } + } - #endregion + #endregion - #region NiceUrls + #region NiceUrls - /// - /// Returns a string with a friendly url from a node. - /// IE.: Instead of having /482 (id) as an url, you can have - /// /screenshots/developer/macros (spoken url) - /// - /// Identifier for the node that should be returned - /// String with a friendly url from a node - public string NiceUrl(int nodeId) - { - return Url(nodeId); - } + /// + /// Returns a string with a friendly url from a node. + /// IE.: Instead of having /482 (id) as an url, you can have + /// /screenshots/developer/macros (spoken url) + /// + /// Identifier for the node that should be returned + /// String with a friendly url from a node + public string NiceUrl(int nodeId) + { + return Url(nodeId); + } /// /// Gets the url of a content identified by its identifier. @@ -494,20 +506,20 @@ namespace Umbraco.Web /// The content identifier. /// The mode. /// The url for the content. - public string Url(int contentId, UrlProviderMode mode) - { + public string Url(int contentId, UrlProviderMode mode) + { return UrlProvider.GetUrl(contentId, mode); - } + } - /// - /// This method will always add the domain to the path if the hostnames are set up correctly. - /// - /// Identifier for the node that should be returned - /// String with a friendly url with full domain from a node - public string NiceUrlWithDomain(int nodeId) - { - return UrlAbsolute(nodeId); - } + /// + /// This method will always add the domain to the path if the hostnames are set up correctly. + /// + /// Identifier for the node that should be returned + /// String with a friendly url with full domain from a node + public string NiceUrlWithDomain(int nodeId) + { + return UrlAbsolute(nodeId); + } /// /// Gets the absolute url of a content identified by its identifier. @@ -593,7 +605,7 @@ namespace Umbraco.Web public IPublishedContent TypedContent(object id) { return TypedContentForObject(id); - } + } private IPublishedContent TypedContentForObject(object id) { @@ -615,9 +627,9 @@ namespace Umbraco.Web /// The unique identifier of the content item. /// The content, or null of the content item is not in the cache. public IPublishedContent TypedContent(int id) - { + { return ContentQuery.TypedContent(id); - } + } /// /// Gets a content item from the cache. @@ -644,8 +656,8 @@ namespace Umbraco.Web /// /// The unique identifier, or the key, of the content item. /// The content, or null of the content item is not in the cache. - public IPublishedContent TypedContent(string id) - { + public IPublishedContent TypedContent(string id) + { return TypedContentForObject(id); } @@ -660,10 +672,10 @@ namespace Umbraco.Web /// The unique identifiers, or the keys, of the content items. /// The content items that were found in the cache. /// Does not support mixing identifiers and keys. - public IEnumerable TypedContent(params object[] ids) - { - return TypedContentForObjects(ids); - } + public IEnumerable TypedContent(params object[] ids) + { + return TypedContentForObjects(ids); + } private IEnumerable TypedContentForObjects(IEnumerable ids) { @@ -682,10 +694,10 @@ namespace Umbraco.Web /// /// The unique identifiers of the content items. /// The content items that were found in the cache. - public IEnumerable TypedContent(params int[] ids) - { + public IEnumerable TypedContent(params int[] ids) + { return ContentQuery.TypedContent(ids); - } + } /// /// Gets content items from the cache. @@ -706,7 +718,7 @@ namespace Umbraco.Web public IEnumerable TypedContent(params string[] ids) { return TypedContentForObjects(ids); - } + } /// /// Gets the contents corresponding to the identifiers. @@ -717,7 +729,7 @@ namespace Umbraco.Web public IEnumerable TypedContent(IEnumerable ids) { return TypedContentForObjects(ids); - } + } /// /// Gets the contents corresponding to the identifiers. @@ -726,9 +738,9 @@ namespace Umbraco.Web /// The existing contents corresponding to the identifiers. /// If an identifier does not match an existing content, it will be missing in the returned value. public IEnumerable TypedContent(IEnumerable ids) - { + { return TypedContentForObjects(ids); - } + } /// /// Gets the contents corresponding to the identifiers. @@ -737,9 +749,9 @@ namespace Umbraco.Web /// The existing contents corresponding to the identifiers. /// If an identifier does not match an existing content, it will be missing in the returned value. public IEnumerable TypedContent(IEnumerable ids) - { + { return ContentQuery.TypedContent(ids); - } + } public IEnumerable TypedContentAtXPath(string xpath, params XPathVariable[] vars) { @@ -761,10 +773,10 @@ namespace Umbraco.Web /// /// The unique identifier, or the key, of the content item. /// The content, or DynamicNull of the content item is not in the cache. - public dynamic Content(object id) - { - return ContentForObject(id); - } + public dynamic Content(object id) + { + return ContentForObject(id); + } private dynamic ContentForObject(object id) { @@ -783,17 +795,17 @@ namespace Umbraco.Web /// The unique identifier of the content item. /// The content, or DynamicNull of the content item is not in the cache. public dynamic Content(int id) - { + { return ContentQuery.Content(id); - } + } /// /// Gets a content item from the cache. /// /// The unique identifier, or the key, of the content item. /// The content, or DynamicNull of the content item is not in the cache. - public dynamic Content(string id) - { + public dynamic Content(string id) + { return ContentForObject(id); } @@ -836,9 +848,9 @@ namespace Umbraco.Web /// The unique identifiers of the content items. /// The content items that were found in the cache. public dynamic Content(params int[] ids) - { + { return ContentQuery.Content(ids); - } + } /// /// Gets content items from the cache. @@ -847,7 +859,7 @@ namespace Umbraco.Web /// The content items that were found in the cache. /// Does not support mixing identifiers and keys. public dynamic Content(params string[] ids) - { + { return ContentForObjects(ids); } @@ -858,7 +870,7 @@ namespace Umbraco.Web /// The content items that were found in the cache. /// Does not support mixing identifiers and keys. public dynamic Content(IEnumerable ids) - { + { return ContentForObjects(ids); } @@ -868,9 +880,9 @@ namespace Umbraco.Web /// The unique identifiers of the content items. /// The content items that were found in the cache. public dynamic Content(IEnumerable ids) - { + { return ContentQuery.Content(ids); - } + } /// /// Gets content items from the cache. @@ -879,7 +891,7 @@ namespace Umbraco.Web /// The content items that were found in the cache. /// Does not support mixing identifiers and keys. public dynamic Content(IEnumerable ids) - { + { return ContentForObjects(ids); } @@ -898,52 +910,55 @@ namespace Umbraco.Web return ContentQuery.ContentAtRoot(); } - private static bool ConvertIdObjectToInt(object id, out int intId) + internal static bool ConvertIdObjectToInt(object id, out int intId) { - var s = id as string; - if (s != null) + switch (id) { - return int.TryParse(s, out intId); + case string s: + return int.TryParse(s, out intId); + + case int i: + intId = i; + return true; + + default: + intId = default; + return false; } - if (id is int) - { - intId = (int) id; - return true; - } - intId = default(int); - return false; } - private static bool ConvertIdObjectToGuid(object id, out Guid guidId) + internal static bool ConvertIdObjectToGuid(object id, out Guid guidId) { - var s = id as string; - if (s != null) + switch (id) { - return Guid.TryParse(s, out guidId); + case string s: + return Guid.TryParse(s, out guidId); + + case Guid g: + guidId = g; + return true; + + default: + guidId = default; + return false; } - if (id is Guid) - { - guidId = (Guid) id; - return true; - } - guidId = default(Guid); - return false; } - private static bool ConvertIdObjectToUdi(object id, out Udi guidId) + internal static bool ConvertIdObjectToUdi(object id, out Udi guidId) { - var s = id as string; - if (s != null) + switch (id) { - return Udi.TryParse(s, out guidId); + case string s: + return Udi.TryParse(s, out guidId); + + case Udi u: + guidId = u; + return true; + + default: + guidId = default; + return false; } - if (id is Udi) - { - guidId = (Udi)id; - return true; - } - guidId = null; - return false; } private static bool ConvertIdsObjectToInts(IEnumerable ids, out IEnumerable intIds) @@ -1029,19 +1044,19 @@ namespace Umbraco.Web } public IPublishedContent TypedMedia(int id) - { + { return ContentQuery.TypedMedia(id); - } + } /// /// Returns typed Media content based on an Identifier /// /// The id - this can be the numeric Id such as '1234' or a UDI string such as 'umb://media/a1276990a50e4784b25458fc8d0c487c' /// PublishedContent if a corresponding media Id exists; otherwise null - public IPublishedContent TypedMedia(string id) - { + public IPublishedContent TypedMedia(string id) + { return TypedMediaForObject(id); - } + } /// /// Gets the medias corresponding to the identifiers. @@ -1073,9 +1088,9 @@ namespace Umbraco.Web /// The existing medias corresponding to the identifiers. /// If an identifier does not match an existing media, it will be missing in the returned value. public IEnumerable TypedMedia(params int[] ids) - { + { return ContentQuery.TypedMedia(ids); - } + } /// /// Gets the medias corresponding to the identifiers. @@ -1084,7 +1099,7 @@ namespace Umbraco.Web /// The existing medias corresponding to the identifiers. /// If an identifier does not match an existing media, it will be missing in the returned value. public IEnumerable TypedMedia(params string[] ids) - { + { return TypedMediaForObjects(ids); } @@ -1095,7 +1110,7 @@ namespace Umbraco.Web /// The existing medias corresponding to the identifiers. /// If an identifier does not match an existing media, it will be missing in the returned value. public IEnumerable TypedMedia(IEnumerable ids) - { + { return TypedMediaForObjects(ids); } @@ -1106,9 +1121,9 @@ namespace Umbraco.Web /// The existing medias corresponding to the identifiers. /// If an identifier does not match an existing media, it will be missing in the returned value. public IEnumerable TypedMedia(IEnumerable ids) - { + { return ContentQuery.TypedMedia(ids); - } + } /// /// Gets the medias corresponding to the identifiers. @@ -1117,7 +1132,7 @@ namespace Umbraco.Web /// The existing medias corresponding to the identifiers. /// If an identifier does not match an existing media, it will be missing in the returned value. public IEnumerable TypedMedia(IEnumerable ids) - { + { return TypedMediaForObjects(ids); } @@ -1126,22 +1141,22 @@ namespace Umbraco.Web return ContentQuery.TypedMediaAtRoot(); } - public dynamic Media(object id) - { + public dynamic Media(object id) + { int intId; return ConvertIdObjectToInt(id, out intId) ? ContentQuery.Media(intId) : DynamicNull.Null; - } + } - public dynamic Media(int id) - { + public dynamic Media(int id) + { return ContentQuery.Media(id); - } + } - public dynamic Media(string id) - { + public dynamic Media(string id) + { int intId; return ConvertIdObjectToInt(id, out intId) ? ContentQuery.Media(intId) : DynamicNull.Null; - } + } /// /// Gets the medias corresponding to the identifiers. @@ -1173,9 +1188,9 @@ namespace Umbraco.Web /// The existing medias corresponding to the identifiers. /// If an identifier does not match an existing media, it will be missing in the returned value. public dynamic Media(params int[] ids) - { + { return ContentQuery.Media(ids); - } + } /// /// Gets the medias corresponding to the identifiers. @@ -1186,7 +1201,7 @@ namespace Umbraco.Web public dynamic Media(params string[] ids) { return MediaForObjects(ids); - } + } /// /// Gets the medias corresponding to the identifiers. @@ -1195,7 +1210,7 @@ namespace Umbraco.Web /// The existing medias corresponding to the identifiers. /// If an identifier does not match an existing media, it will be missing in the returned value. public dynamic Media(IEnumerable ids) - { + { return MediaForObjects(ids); } @@ -1206,9 +1221,9 @@ namespace Umbraco.Web /// The existing medias corresponding to the identifiers. /// If an identifier does not match an existing media, it will be missing in the returned value. public dynamic Media(IEnumerable ids) - { + { return ContentQuery.Media(ids); - } + } /// /// Gets the medias corresponding to the identifiers. @@ -1217,7 +1232,7 @@ namespace Umbraco.Web /// The existing medias corresponding to the identifiers. /// If an identifier does not match an existing media, it will be missing in the returned value. public dynamic Media(IEnumerable ids) - { + { return MediaForObjects(ids); } @@ -1226,56 +1241,56 @@ namespace Umbraco.Web return ContentQuery.MediaAtRoot(); } - #endregion + #endregion - #region Search + #region Search - /// - /// Searches content - /// - /// - /// - /// - /// - public dynamic Search(string term, bool useWildCards = true, string searchProvider = null) - { - return ContentQuery.Search(term, useWildCards, searchProvider); - } + /// + /// Searches content + /// + /// + /// + /// + /// + public dynamic Search(string term, bool useWildCards = true, string searchProvider = null) + { + return ContentQuery.Search(term, useWildCards, searchProvider); + } - /// - /// Searhes content - /// - /// - /// - /// - public dynamic Search(Examine.SearchCriteria.ISearchCriteria criteria, Examine.Providers.BaseSearchProvider searchProvider = null) - { + /// + /// Searhes content + /// + /// + /// + /// + public dynamic Search(Examine.SearchCriteria.ISearchCriteria criteria, Examine.Providers.BaseSearchProvider searchProvider = null) + { return ContentQuery.Search(criteria, searchProvider); - } + } - /// - /// Searches content - /// - /// - /// - /// - /// - public IEnumerable TypedSearch(string term, bool useWildCards = true, string searchProvider = null) - { + /// + /// Searches content + /// + /// + /// + /// + /// + public IEnumerable TypedSearch(string term, bool useWildCards = true, string searchProvider = null) + { return ContentQuery.TypedSearch(term, useWildCards, searchProvider); - } + } /// - /// Searches content - /// + /// Searches content + /// /// /// /// - /// - /// - /// - /// - public IEnumerable TypedSearch(int skip, int take, out int totalRecords, string term, bool useWildCards = true, string searchProvider = null) + /// + /// + /// + /// + public IEnumerable TypedSearch(int skip, int take, out int totalRecords, string term, bool useWildCards = true, string searchProvider = null) { return ContentQuery.TypedSearch(skip, take, out totalRecords, term, useWildCards, searchProvider); } @@ -1290,9 +1305,9 @@ namespace Umbraco.Web /// /// public IEnumerable TypedSearch(int skip, int take, out int totalRecords, Examine.SearchCriteria.ISearchCriteria criteria, Examine.Providers.BaseSearchProvider searchProvider = null) - { + { return ContentQuery.TypedSearch(skip, take, out totalRecords, criteria, searchProvider); - } + } /// /// Searhes content @@ -1310,35 +1325,35 @@ namespace Umbraco.Web #region Xml public dynamic ToDynamicXml(string xml) - { - if (string.IsNullOrWhiteSpace(xml)) return null; - var xElement = XElement.Parse(xml); - return new DynamicXml(xElement); - } + { + if (string.IsNullOrWhiteSpace(xml)) return null; + var xElement = XElement.Parse(xml); + return new DynamicXml(xElement); + } - public dynamic ToDynamicXml(XElement xElement) - { - return new DynamicXml(xElement); - } + public dynamic ToDynamicXml(XElement xElement) + { + return new DynamicXml(xElement); + } - public dynamic ToDynamicXml(XPathNodeIterator xpni) - { - return new DynamicXml(xpni); - } + public dynamic ToDynamicXml(XPathNodeIterator xpni) + { + return new DynamicXml(xpni); + } - #endregion + #endregion - #region Strings + #region Strings - /// - /// Replaces text line breaks with html line breaks - /// - /// The text. - /// The text with text line breaks replaced with html linebreaks (
)
- public string ReplaceLineBreaksForHtml(string text) - { + /// + /// Replaces text line breaks with html line breaks + /// + /// The text. + /// The text with text line breaks replaced with html linebreaks (
)
+ public string ReplaceLineBreaksForHtml(string text) + { return _stringUtilities.ReplaceLineBreaksForHtml(text); - } + } /// /// Returns an MD5 hash of the string specified @@ -1367,119 +1382,119 @@ namespace Umbraco.Web /// Strips all html tags from a given string, all contents of the tags will remain. /// public HtmlString StripHtml(IHtmlString html, params string[] tags) - { - return StripHtml(html.ToHtmlString(), tags); - } + { + return StripHtml(html.ToHtmlString(), tags); + } - /// - /// Strips all html tags from a given string, all contents of the tags will remain. - /// - public HtmlString StripHtml(DynamicNull html, params string[] tags) - { - return new HtmlString(string.Empty); - } + /// + /// Strips all html tags from a given string, all contents of the tags will remain. + /// + public HtmlString StripHtml(DynamicNull html, params string[] tags) + { + return new HtmlString(string.Empty); + } - /// - /// Strips all html tags from a given string, all contents of the tags will remain. - /// - public HtmlString StripHtml(string html, params string[] tags) - { + /// + /// Strips all html tags from a given string, all contents of the tags will remain. + /// + public HtmlString StripHtml(string html, params string[] tags) + { return _stringUtilities.StripHtmlTags(html, tags); - } + } - /// - /// Will take the first non-null value in the collection and return the value of it. - /// - public string Coalesce(params object[] args) - { + /// + /// Will take the first non-null value in the collection and return the value of it. + /// + public string Coalesce(params object[] args) + { return _stringUtilities.Coalesce(args); - } + } - /// - /// Will take the first non-null value in the collection and return the value of it. - /// - public string Concatenate(params object[] args) - { + /// + /// Will take the first non-null value in the collection and return the value of it. + /// + public string Concatenate(params object[] args) + { return _stringUtilities.Concatenate(args); - } + } - /// - /// Joins any number of int/string/objects into one string and seperates them with the string seperator parameter. - /// - public string Join(string seperator, params object[] args) - { + /// + /// Joins any number of int/string/objects into one string and seperates them with the string seperator parameter. + /// + public string Join(string seperator, params object[] args) + { return _stringUtilities.Join(seperator, args); - } + } - /// - /// Truncates a string to a given length, can add a elipsis at the end (...). Method checks for open html tags, and makes sure to close them - /// - public IHtmlString Truncate(IHtmlString html, int length) - { - return Truncate(html.ToHtmlString(), length, true, false); - } + /// + /// Truncates a string to a given length, can add a elipsis at the end (...). Method checks for open html tags, and makes sure to close them + /// + public IHtmlString Truncate(IHtmlString html, int length) + { + return Truncate(html.ToHtmlString(), length, true, false); + } - /// - /// Truncates a string to a given length, can add a elipsis at the end (...). Method checks for open html tags, and makes sure to close them - /// - public IHtmlString Truncate(IHtmlString html, int length, bool addElipsis) - { - return Truncate(html.ToHtmlString(), length, addElipsis, false); - } + /// + /// Truncates a string to a given length, can add a elipsis at the end (...). Method checks for open html tags, and makes sure to close them + /// + public IHtmlString Truncate(IHtmlString html, int length, bool addElipsis) + { + return Truncate(html.ToHtmlString(), length, addElipsis, false); + } - /// - /// Truncates a string to a given length, can add a elipsis at the end (...). Method checks for open html tags, and makes sure to close them - /// - public IHtmlString Truncate(IHtmlString html, int length, bool addElipsis, bool treatTagsAsContent) - { - return Truncate(html.ToHtmlString(), length, addElipsis, treatTagsAsContent); - } + /// + /// Truncates a string to a given length, can add a elipsis at the end (...). Method checks for open html tags, and makes sure to close them + /// + public IHtmlString Truncate(IHtmlString html, int length, bool addElipsis, bool treatTagsAsContent) + { + return Truncate(html.ToHtmlString(), length, addElipsis, treatTagsAsContent); + } - /// - /// Truncates a string to a given length, can add a elipsis at the end (...). Method checks for open html tags, and makes sure to close them - /// - public IHtmlString Truncate(DynamicNull html, int length) - { - return new HtmlString(string.Empty); - } + /// + /// Truncates a string to a given length, can add a elipsis at the end (...). Method checks for open html tags, and makes sure to close them + /// + public IHtmlString Truncate(DynamicNull html, int length) + { + return new HtmlString(string.Empty); + } - /// - /// Truncates a string to a given length, can add a elipsis at the end (...). Method checks for open html tags, and makes sure to close them - /// - public IHtmlString Truncate(DynamicNull html, int length, bool addElipsis) - { - return new HtmlString(string.Empty); - } + /// + /// Truncates a string to a given length, can add a elipsis at the end (...). Method checks for open html tags, and makes sure to close them + /// + public IHtmlString Truncate(DynamicNull html, int length, bool addElipsis) + { + return new HtmlString(string.Empty); + } - /// - /// Truncates a string to a given length, can add a elipsis at the end (...). Method checks for open html tags, and makes sure to close them - /// - public IHtmlString Truncate(DynamicNull html, int length, bool addElipsis, bool treatTagsAsContent) - { - return new HtmlString(string.Empty); - } + /// + /// Truncates a string to a given length, can add a elipsis at the end (...). Method checks for open html tags, and makes sure to close them + /// + public IHtmlString Truncate(DynamicNull html, int length, bool addElipsis, bool treatTagsAsContent) + { + return new HtmlString(string.Empty); + } - /// - /// Truncates a string to a given length, can add a elipsis at the end (...). Method checks for open html tags, and makes sure to close them - /// - public IHtmlString Truncate(string html, int length) - { - return Truncate(html, length, true, false); - } + /// + /// Truncates a string to a given length, can add a elipsis at the end (...). Method checks for open html tags, and makes sure to close them + /// + public IHtmlString Truncate(string html, int length) + { + return Truncate(html, length, true, false); + } - /// - /// Truncates a string to a given length, can add a elipsis at the end (...). Method checks for open html tags, and makes sure to close them - /// - public IHtmlString Truncate(string html, int length, bool addElipsis) - { - return Truncate(html, length, addElipsis, false); - } + /// + /// Truncates a string to a given length, can add a elipsis at the end (...). Method checks for open html tags, and makes sure to close them + /// + public IHtmlString Truncate(string html, int length, bool addElipsis) + { + return Truncate(html, length, addElipsis, false); + } - /// - /// Truncates a string to a given length, can add a elipsis at the end (...). Method checks for open html tags, and makes sure to close them - /// - public IHtmlString Truncate(string html, int length, bool addElipsis, bool treatTagsAsContent) - { + /// + /// Truncates a string to a given length, can add a elipsis at the end (...). Method checks for open html tags, and makes sure to close them + /// + public IHtmlString Truncate(string html, int length, bool addElipsis, bool treatTagsAsContent) + { return _stringUtilities.Truncate(html, length, addElipsis, treatTagsAsContent); } #region Truncate by Words @@ -1532,17 +1547,17 @@ namespace Umbraco.Web /// If the test is true, the string valueIfTrue will be returned, otherwise the valueIfFalse will be returned. ///
public HtmlString If(bool test, string valueIfTrue, string valueIfFalse) - { - return test ? new HtmlString(valueIfTrue) : new HtmlString(valueIfFalse); - } + { + return test ? new HtmlString(valueIfTrue) : new HtmlString(valueIfFalse); + } - /// - /// If the test is true, the string valueIfTrue will be returned, otherwise the valueIfFalse will be returned. - /// - public HtmlString If(bool test, string valueIfTrue) - { - return test ? new HtmlString(valueIfTrue) : new HtmlString(string.Empty); - } + /// + /// If the test is true, the string valueIfTrue will be returned, otherwise the valueIfFalse will be returned. + /// + public HtmlString If(bool test, string valueIfTrue) + { + return test ? new HtmlString(valueIfTrue) : new HtmlString(string.Empty); + } #endregion @@ -1649,5 +1664,5 @@ namespace Umbraco.Web var udiToIdAttempt = EntityService.GetIdForUdi(udi); return udiToIdAttempt.Success ? udiToIdAttempt.Result : -1; } - } + } } diff --git a/src/Umbraco.Web/UmbracoModule.cs b/src/Umbraco.Web/UmbracoModule.cs index f2503b88c6..99043143a7 100644 --- a/src/Umbraco.Web/UmbracoModule.cs +++ b/src/Umbraco.Web/UmbracoModule.cs @@ -491,7 +491,7 @@ namespace Umbraco.Web //disable asp.net headers (security) // This is the correct place to modify headers according to MS: - // https://our.umbraco.org/forum/umbraco-7/using-umbraco-7/65241-Heap-error-from-header-manipulation?p=0#comment220889 + // https://our.umbraco.com/forum/umbraco-7/using-umbraco-7/65241-Heap-error-from-header-manipulation?p=0#comment220889 app.PostReleaseRequestState += (sender, args) => { var httpContext = ((HttpApplication)sender).Context; @@ -503,7 +503,7 @@ namespace Umbraco.Web httpContext.Response.Headers.Remove("X-AspNet-Version"); httpContext.Response.Headers.Remove("X-AspNetMvc-Version"); } - catch (PlatformNotSupportedException ex) + catch (PlatformNotSupportedException) { // can't remove headers this way on IIS6 or cassini. } diff --git a/src/Umbraco.Web/Web References/org.umbraco.our/Reference.map b/src/Umbraco.Web/Web References/org.umbraco.our/Reference.map index 29e3094fbf..cd819c5591 100644 --- a/src/Umbraco.Web/Web References/org.umbraco.our/Reference.map +++ b/src/Umbraco.Web/Web References/org.umbraco.our/Reference.map @@ -1,7 +1,7 @@ - - + + \ No newline at end of file diff --git a/src/Umbraco.Web/Web References/org.umbraco.our/repository.disco b/src/Umbraco.Web/Web References/org.umbraco.our/repository.disco index b481db0d68..fcc65dea0c 100644 --- a/src/Umbraco.Web/Web References/org.umbraco.our/repository.disco +++ b/src/Umbraco.Web/Web References/org.umbraco.our/repository.disco @@ -1,6 +1,6 @@ - - - + + + \ No newline at end of file diff --git a/src/Umbraco.Web/Web References/org.umbraco.our/repository.wsdl b/src/Umbraco.Web/Web References/org.umbraco.our/repository.wsdl index 159ae2ab07..17d24e9c54 100644 --- a/src/Umbraco.Web/Web References/org.umbraco.our/repository.wsdl +++ b/src/Umbraco.Web/Web References/org.umbraco.our/repository.wsdl @@ -980,16 +980,16 @@ - + - + - + - + \ No newline at end of file diff --git a/src/Umbraco.Web/WebApi/CustomDateTimeConvertor.cs b/src/Umbraco.Web/WebApi/CustomDateTimeConvertor.cs index 00216e2ece..c0793dc945 100644 --- a/src/Umbraco.Web/WebApi/CustomDateTimeConvertor.cs +++ b/src/Umbraco.Web/WebApi/CustomDateTimeConvertor.cs @@ -1,4 +1,5 @@ using System; +using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Umbraco.Core; @@ -20,7 +21,7 @@ namespace Umbraco.Web.WebApi public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { - writer.WriteValue(((DateTime)value).ToString(_dateTimeFormat)); + writer.WriteValue(((DateTime)value).ToString(_dateTimeFormat, CultureInfo.InvariantCulture)); } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Web/WebApi/Filters/EnsureUserPermissionForContentAttribute.cs b/src/Umbraco.Web/WebApi/Filters/EnsureUserPermissionForContentAttribute.cs index 129bac1c4d..1a5fc4d07c 100644 --- a/src/Umbraco.Web/WebApi/Filters/EnsureUserPermissionForContentAttribute.cs +++ b/src/Umbraco.Web/WebApi/Filters/EnsureUserPermissionForContentAttribute.cs @@ -79,7 +79,23 @@ namespace Umbraco.Web.WebApi.Filters if (parts.Length == 1) { - nodeId = (int)actionContext.ActionArguments[parts[0]]; + var argument = actionContext.ActionArguments[parts[0]].ToString(); + // if the argument is an int, it will parse and can be assigned to nodeId + // if might be a udi, so check that next + // otherwise treat it as a guid - unlikely we ever get here + if (int.TryParse(argument, out int parsedId)) + { + nodeId = parsedId; + } + else if (Udi.TryParse(argument, true, out Udi udi)) + { + nodeId = ApplicationContext.Current.Services.EntityService.GetIdForUdi(udi).Result; + } + else + { + Guid.TryParse(argument, out Guid key); + nodeId = ApplicationContext.Current.Services.EntityService.GetIdForKey(key, UmbracoObjectTypes.Document).Result; + } } else { @@ -118,4 +134,4 @@ namespace Umbraco.Web.WebApi.Filters } -} \ No newline at end of file +} diff --git a/src/Umbraco.Web/app.config b/src/Umbraco.Web/app.config index 13d7964935..61b015a7e8 100644 --- a/src/Umbraco.Web/app.config +++ b/src/Umbraco.Web/app.config @@ -21,7 +21,7 @@ Somthing - http://our.umbraco.org/umbraco/webservices/api/repository.asmx + https://our.umbraco.com/umbraco/webservices/api/repository.asmx diff --git a/src/Umbraco.Web/umbraco.presentation/content.cs b/src/Umbraco.Web/umbraco.presentation/content.cs index c8daf43715..ccd2e009a7 100644 --- a/src/Umbraco.Web/umbraco.presentation/content.cs +++ b/src/Umbraco.Web/umbraco.presentation/content.cs @@ -428,8 +428,6 @@ namespace umbraco if (!e.Cancel) { - XmlNode x; - //Hack: this is here purely for backwards compat if someone for some reason is using the // ClearDocumentCache(int documentId) method and expecting it to remove the xml if (removeDbXmlEntry) diff --git a/src/Umbraco.Web/umbraco.presentation/item.cs b/src/Umbraco.Web/umbraco.presentation/item.cs index 1edc6cca17..33150d6187 100644 --- a/src/Umbraco.Web/umbraco.presentation/item.cs +++ b/src/Umbraco.Web/umbraco.presentation/item.cs @@ -66,8 +66,12 @@ namespace umbraco if (publishedContent == null) { - var recursiveVal = GetRecursiveValueLegacy(elements); - _fieldContent = recursiveVal.IsNullOrWhiteSpace() ? _fieldContent : recursiveVal; + if (recursive) + { + var recursiveVal = GetRecursiveValueLegacy(elements); + _fieldContent = recursiveVal.IsNullOrWhiteSpace() ? _fieldContent : recursiveVal; + } + } //check for published content and get its value using that @@ -222,4 +226,4 @@ namespace umbraco } } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Web/umbraco.presentation/requestModule.cs b/src/Umbraco.Web/umbraco.presentation/requestModule.cs index 9e2eeff4e6..7c49802d2e 100644 --- a/src/Umbraco.Web/umbraco.presentation/requestModule.cs +++ b/src/Umbraco.Web/umbraco.presentation/requestModule.cs @@ -253,7 +253,6 @@ namespace umbraco.presentation + ex; // Hide error if getting the user throws an error (e.g. corrupt / blank db) - User staticUser = null; try { User.GetCurrent(); @@ -473,4 +472,4 @@ namespace umbraco.presentation } -} \ No newline at end of file +} diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadDictionary.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadDictionary.cs deleted file mode 100644 index 8530f6b074..0000000000 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadDictionary.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.IO; -using System.Text; -using System.Web; -using System.Xml; -using System.Configuration; -using umbraco.BasePages; -using umbraco.BusinessLogic; -using umbraco.businesslogic; -using umbraco.cms.businesslogic; -using umbraco.cms.businesslogic.cache; -using umbraco.cms.businesslogic.contentitem; -using umbraco.cms.businesslogic.datatype; -using umbraco.cms.businesslogic.language; -using umbraco.cms.businesslogic.media; -using umbraco.cms.businesslogic.member; -using umbraco.cms.businesslogic.property; -using umbraco.cms.businesslogic.web; -using umbraco.interfaces; -using umbraco.DataLayer; -using umbraco.BusinessLogic.Utils; -using umbraco.cms.presentation.Trees; -using umbraco.BusinessLogic.Actions; -using Umbraco.Core; - - -namespace umbraco -{ - [Tree(Constants.Applications.Settings, Constants.Trees.Dictionary, "Dictionary", action: "openDictionary()", sortOrder: 3)] - public class loadDictionary : BaseTree - { - public loadDictionary(string application) : base(application) { } - - protected override void CreateRootNode(ref XmlTreeNode rootNode) - { - rootNode.NodeType = "init" + TreeAlias; - rootNode.NodeID = "init"; - rootNode.Action = "javascript:openDictionary()"; - } - - protected override void CreateAllowedActions(ref List actions) - { - actions.Clear(); - actions.Add(ActionNew.Instance); - actions.Add(ActionDelete.Instance); - actions.Add(ContextMenuSeperator.Instance); - actions.Add(ActionRefresh.Instance); - } - - public override void RenderJS(ref StringBuilder Javascript) - { - Javascript.Append( - @" - function openDictionary() { - UmbClientMgr.contentFrame('settings/DictionaryItemList.aspx'); - } - function openDictionaryItem(id) { - UmbClientMgr.contentFrame('settings/editDictionaryItem.aspx?id=' + id); - }"); - } - - public override void Render(ref XmlTree tree) - { - - Dictionary.DictionaryItem[] tmp; - if (this.id == this.StartNodeID) - tmp = Dictionary.getTopMostItems; - else - tmp = new Dictionary.DictionaryItem(this.id).Children; - - foreach (Dictionary.DictionaryItem di in tmp.OrderBy(a => a.key)) - { - XmlTreeNode xNode = XmlTreeNode.Create(this); - xNode.NodeID = di.id.ToString(); //dictionary_ + id.. - xNode.Text = di.key; - xNode.Action = string.Format("javascript:openDictionaryItem({0});", di.id); - xNode.Icon = "icon-book-alt"; - xNode.NodeType = "DictionaryItem"; //this shouldn't be like this, it should be this.TreeAlias but the ui.config file points to this name. - xNode.Source = this.GetTreeServiceUrl(di.id); - xNode.HasChildren = di.hasChildren; - - OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty); - if (xNode != null) - { - tree.Add(xNode); - OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); - } - - } - } - - - } - -} diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadScripts.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadScripts.cs index 7379c89963..c944d231d3 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadScripts.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadScripts.cs @@ -1,34 +1,12 @@ using System; -using System.Collections; using System.Collections.Generic; using System.ComponentModel; -using System.Data; -using System.IO; -using System.Linq; using System.Text; -using System.Web; -using System.Xml; -using System.Configuration; -using Umbraco.Core; -using umbraco.BasePages; -using umbraco.BusinessLogic; -using umbraco.businesslogic; -using umbraco.cms.businesslogic; -using umbraco.cms.businesslogic.cache; -using umbraco.cms.businesslogic.contentitem; -using umbraco.cms.businesslogic.datatype; -using umbraco.cms.businesslogic.language; -using umbraco.cms.businesslogic.media; -using umbraco.cms.businesslogic.member; -using umbraco.cms.businesslogic.property; -using umbraco.cms.businesslogic.web; -using umbraco.interfaces; -using umbraco.DataLayer; -using umbraco.BusinessLogic.Utils; -using umbraco.cms.presentation.Trees; using umbraco.BusinessLogic.Actions; -using Umbraco.Core.IO; +using umbraco.cms.presentation.Trees; +using umbraco.interfaces; using Umbraco.Core; +using Umbraco.Core.IO; namespace umbraco diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/create/simple.ascx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/create/simple.ascx.cs index 06606d7b19..91722ab82e 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/create/simple.ascx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/create/simple.ascx.cs @@ -1,17 +1,14 @@ -using System.Web; +using System; +using System.Linq; +using System.Web; using System.Web.UI; -using ClientDependency.Core; -using Umbraco.Core; -using Umbraco.Core.Logging; -using Umbraco.Web.UI; -using Umbraco.Web; -using System; -using Umbraco.Web.UI.Controls; using System.Web.UI.WebControls; +using ClientDependency.Core; using umbraco.BasePages; using umbraco.BusinessLogic; +using Umbraco.Core; using Umbraco.Web; -using System.Linq; +using Umbraco.Web.UI; using UmbracoUserControl = Umbraco.Web.UI.Controls.UmbracoUserControl; namespace umbraco.cms.presentation.create.controls diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/Packages/editPackage.aspx b/src/Umbraco.Web/umbraco.presentation/umbraco/developer/Packages/editPackage.aspx index b66388d3a0..0c5ed90681 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/Packages/editPackage.aspx +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/developer/Packages/editPackage.aspx @@ -186,7 +186,7 @@ during installation and uninstallation.
All actions are formed as a xml node, containing data for the action to be performed. - Package actions documentation

+ /// Summary description for packager. + /// + [Obsolete("This should not be used and will be removed in v8, this is kept here only for backwards compat reasons, this page should never be rendered/used")] + public class Installer : UmbracoEnsuredPage + { + + private Control _configControl; + private readonly cms.businesslogic.packager.Installer _installer; + protected uicontrols.Pane pane_installing; + protected uicontrols.Pane pane_optional; + + public Installer() + { + CurrentApp = DefaultApps.developer.ToString(); + _installer = new cms.businesslogic.packager.Installer(UmbracoUser.Id); + } + + protected void Page_Load(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(Request.GetItemAsString("installing"))) + return; + + pane_optional.Visible = false; + pane_installing.Visible = true; + ProcessInstall(Request.GetItemAsString("installing")); + } + + private void ProcessInstall(string currentStep) + { + var dir = Request.GetItemAsString("dir"); + + int.TryParse(Request.GetItemAsString("pId"), out var packageId); + + switch (currentStep.ToLowerInvariant()) + { + case "custominstaller": + var customControl = Request.GetItemAsString("customControl"); + + if (customControl.IsNullOrWhiteSpace() == false) + { + pane_optional.Visible = false; + + _configControl = LoadControl(SystemDirectories.Root + customControl); + _configControl.ID = "packagerConfigControl"; + + pane_optional.Controls.Add(_configControl); + pane_optional.Visible = true; + + if (IsPostBack == false) + { + //We still need to clean everything up which is normally done in the Finished Action + PerformPostInstallCleanup(packageId, dir); + } + + } + else + { + //if the custom installer control is empty here (though it should never be because we've already checked for it previously) + //then we should run the normal FinishedAction + PerformFinishedAction(packageId, dir); + } + break; + default: + break; + } + } + + private void PerformPostInstallCleanup(int packageId, string dir) + { + _installer.InstallCleanUp(packageId, dir); + + // Update ClientDependency version + var clientDependencyConfig = new Umbraco.Core.Configuration.ClientDependencyConfiguration(LoggerResolver.Current.Logger); + clientDependencyConfig.IncreaseVersionNumber(); + + //clear the tree cache - we'll do this here even though the browser will reload, but just in case it doesn't can't hurt. + ClientTools.ClearClientTreeCache().RefreshTree("packager"); + TreeDefinitionCollection.Instance.ReRegisterTrees(); + BusinessLogic.Actions.Action.ReRegisterActionsAndHandlers(); + } + + private void PerformFinishedAction(int packageId, string dir) + { + pane_optional.Visible = false; + PerformPostInstallCleanup(packageId, dir); + } + } +} diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/notifications.aspx b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/notifications.aspx deleted file mode 100644 index cd97ec267f..0000000000 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/notifications.aspx +++ /dev/null @@ -1,18 +0,0 @@ -<%@ Page Language="c#" MasterPageFile="../masterpages/umbracoDialog.Master" Codebehind="notifications.aspx.cs" AutoEventWireup="True" - Inherits="umbraco.dialogs.notifications" %> -<%@ Register TagPrefix="cc1" Namespace="umbraco.uicontrols" Assembly="controls" %> - - - -
- - - - - -
- -
\ No newline at end of file diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/notifications.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/notifications.aspx.cs deleted file mode 100644 index 195ac15ec8..0000000000 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/notifications.aspx.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System; -using System.Collections; -using System.Globalization; -using System.Web.UI; -using System.Web.UI.HtmlControls; -using System.Web.UI.WebControls; -using umbraco.BasePages; -using umbraco.cms.businesslogic; -using umbraco.cms.businesslogic.workflow; - -namespace umbraco.dialogs -{ - /// - /// Summary description for cruds. - /// - public partial class notifications : UmbracoEnsuredPage - { - private ArrayList actions = new ArrayList(); - private CMSNode node; - - public notifications() - { - CurrentApp = BusinessLogic.DefaultApps.content.ToString(); - - } - - protected void Page_Load(object sender, EventArgs e) - { - Button1.Text = ui.Text("update"); - pane_form.Text = ui.Text("notifications", "editNotifications", Server.HtmlEncode(node.Text), base.getUser()); - } - - #region Web Form Designer generated code - - protected override void OnInit(EventArgs e) - { - // - // CODEGEN: This call is required by the ASP.NET Web Form Designer. - // - InitializeComponent(); - base.OnInit(e); - - node = new cms.businesslogic.CMSNode(int.Parse(helper.Request("id"))); - - ArrayList actionList = BusinessLogic.Actions.Action.GetAll(); - - foreach (interfaces.IAction a in actionList) - { - if (a.ShowInNotifier) - { - - CheckBox c = new CheckBox(); - c.ID = a.Letter.ToString(CultureInfo.InvariantCulture); - - if (base.getUser().GetNotifications(node.Path).IndexOf(a.Letter) > -1) - c.Checked = true; - - uicontrols.PropertyPanel pp = new umbraco.uicontrols.PropertyPanel(); - pp.CssClass = "inline"; - pp.Text = ui.Text("actions", a.Alias); - pp.Controls.Add(c); - - pane_form.Controls.Add(pp); - - actions.Add(c); - - } - } - - } - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - } - - #endregion - - protected void Button1_Click(object sender, EventArgs e) - { - string notifications = ""; - - // First off - load all users - foreach (CheckBox c in actions) - { - // Update the user with the new permission - if (c.Checked) - notifications += c.ID; - } - Notification.UpdateNotifications(base.getUser(), node, notifications); - getUser().resetNotificationCache(); - base.getUser().initNotifications(); - - var feedback = new umbraco.uicontrols.Feedback(); - feedback.Text = ui.Text("notifications") + " " + ui.Text("ok") + "

" + ui.Text("closeThisWindow") + ""; - feedback.type = umbraco.uicontrols.Feedback.feedbacktype.success; - - pane_form.Controls.Clear(); - pane_form.Controls.Add(feedback); - - //pane_form.Visible = false; - pl_buttons.Visible = false; - } - } -} \ No newline at end of file diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/notifications.aspx.designer.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/notifications.aspx.designer.cs deleted file mode 100644 index 7ab5c11751..0000000000 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/notifications.aspx.designer.cs +++ /dev/null @@ -1,42 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace umbraco.dialogs { - - - public partial class notifications { - - ///

- /// pane_form control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::umbraco.uicontrols.Pane pane_form; - - /// - /// pl_buttons control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlGenericControl pl_buttons; - - /// - /// Button1 control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Button Button1; - } -} diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/search.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/search.aspx.cs index a46d37216d..edd6382468 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/search.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/search.aspx.cs @@ -1,16 +1,14 @@ using System; using System.Collections.Generic; using System.Globalization; -using System.Web; +using System.Linq; using System.Web.UI; using System.Web.UI.WebControls; -using Umbraco.Core; -using UmbracoExamine; using System.Xml; using Examine; using Examine.LuceneEngine.SearchCriteria; -using System.Linq; using Umbraco.Core; +using UmbracoExamine; namespace umbraco.presentation.dialogs diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/preview/PreviewContent.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/preview/PreviewContent.cs index 9ba5f91bd3..3346fa608c 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/preview/PreviewContent.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/preview/PreviewContent.cs @@ -1,25 +1,13 @@ using System; using System.Collections.Generic; -using System.Data; -using System.Configuration; using System.Globalization; -using System.Linq; -using System.Web; -using System.Web.Security; -using System.Web.UI; -using System.Web.UI.HtmlControls; -using System.Web.UI.WebControls; -using System.Web.UI.WebControls.WebParts; -using System.Xml.Linq; -using System.Xml; using System.IO; +using System.Xml; +using umbraco.BusinessLogic; +using umbraco.cms.businesslogic.web; using Umbraco.Core; using Umbraco.Core.IO; using Umbraco.Core.Logging; -using umbraco.cms.businesslogic.web; -using umbraco.BusinessLogic; -using umbraco.cms.businesslogic; -using Umbraco.Core.IO; namespace umbraco.presentation.preview { diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/settings/EditDictionaryItem.aspx b/src/Umbraco.Web/umbraco.presentation/umbraco/settings/EditDictionaryItem.aspx deleted file mode 100644 index 09af30fd00..0000000000 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/settings/EditDictionaryItem.aspx +++ /dev/null @@ -1,15 +0,0 @@ -<%@ Register Namespace="umbraco" TagPrefix="umb" Assembly="umbraco" %> -<%@ Register TagPrefix="cc1" Namespace="umbraco.uicontrols" Assembly="controls" %> - -<%@ Page Language="c#" MasterPageFile="../masterpages/umbracoPage.Master" ValidateRequest="false" - CodeBehind="EditDictionaryItem.aspx.cs" AutoEventWireup="True" Inherits="umbraco.settings.EditDictionaryItem" %> - - - - - - diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/settings/EditDictionaryItem.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/settings/EditDictionaryItem.aspx.cs deleted file mode 100644 index c5fa46832b..0000000000 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/settings/EditDictionaryItem.aspx.cs +++ /dev/null @@ -1,184 +0,0 @@ -using System; -using System.Web.UI; -using System.Web.UI.WebControls; -using umbraco.BusinessLogic; -using umbraco.cms.businesslogic; -using umbraco.cms.presentation.Trees; -using Umbraco.Core; - -namespace umbraco.settings -{ - /// - /// Summary description for EditDictionaryItem. - /// - [WebformsPageTreeAuthorize(Constants.Trees.Dictionary)] - public partial class EditDictionaryItem : BasePages.UmbracoEnsuredPage - { - - protected LiteralControl keyTxt = new LiteralControl(); - protected uicontrols.TabView tbv = new uicontrols.TabView(); - private System.Collections.ArrayList languageFields = new System.Collections.ArrayList(); - private cms.businesslogic.Dictionary.DictionaryItem currentItem; - protected TextBox boxChangeKey; - protected Label labelChangeKey; - protected Literal txt; - protected User currentUser; - - protected void Page_Load(object sender, System.EventArgs e) - { - currentItem = new cms.businesslogic.Dictionary.DictionaryItem(int.Parse(Request.QueryString["id"])); - currentUser = getUser(); - - // Put user code to initialize the page here - Panel1.hasMenu = true; - Panel1.Text = ui.Text("editdictionary") + ": " + currentItem.key; - - var save = Panel1.Menu.NewButton(); - save.Text = ui.Text("save"); - save.Click += save_Click; - save.ToolTip = ui.Text("save"); - save.ID = "save"; - save.ButtonType = uicontrols.MenuButtonType.Primary; - - uicontrols.Pane p = new uicontrols.Pane(); - - boxChangeKey = new TextBox - { - ID = "changeKey-" + currentItem.id, - CssClass = "umbEditorTextField", - Text = currentItem.key - }; - - labelChangeKey = new Label - { - ID = "changeKeyLabel", - CssClass = "text-error" - }; - - p.addProperty(new Literal - { - Text = "

" + ui.Text("dictionaryItem", "changeKey", currentUser) + "

" - }); - p.addProperty(boxChangeKey); - p.addProperty(labelChangeKey); - - - txt = new Literal(); - txt.Text = "

" + ui.Text("dictionaryItem", "description", currentItem.key, currentUser) + "


"; - p.addProperty(txt); - - foreach (cms.businesslogic.language.Language l in cms.businesslogic.language.Language.getAll) - { - - TextBox languageBox = new TextBox(); - languageBox.TextMode = TextBoxMode.MultiLine; - languageBox.ID = l.id.ToString(); - languageBox.CssClass = "umbEditorTextFieldMultiple"; - - if (!IsPostBack) - languageBox.Text = currentItem.Value(l.id); - - languageFields.Add(languageBox); - p.addProperty(l.FriendlyName, languageBox); - - } - - - if (!IsPostBack) - { - var path = BuildPath(currentItem); - ClientTools - .SetActiveTreeType(TreeDefinitionCollection.Instance.FindTree().Tree.Alias) - .SyncTree(path, false); - } - - Panel1.Controls.Add(p); - } - - private string BuildPath(cms.businesslogic.Dictionary.DictionaryItem current) - { - var parentPath = current.IsTopMostItem() ? "" : BuildPath(current.Parent) + ","; - return parentPath + current.id; - } - - void save_Click(object sender, EventArgs e) - { - foreach (TextBox t in languageFields) - { - //check for null but allow empty string! - // http://issues.umbraco.org/issue/U4-1931 - if (t.Text != null) - { - currentItem.setValue(int.Parse(t.ID), t.Text); - } - } - - labelChangeKey.Text = ""; // reset error text - var newKey = boxChangeKey.Text; - if (string.IsNullOrWhiteSpace(newKey) == false && newKey != currentItem.key) - { - // key already exists, save but inform - if (Dictionary.DictionaryItem.hasKey(newKey) == true) - { - labelChangeKey.Text = ui.Text("dictionaryItem", "changeKeyError", newKey, currentUser); - boxChangeKey.Text = currentItem.key; // reset key - } - else - { - // set the new key - currentItem.setKey(newKey); - - // update the title with the new key - Panel1.title.InnerHtml = ui.Text("editdictionary") + ": " + newKey; - - // sync the content tree - var path = BuildPath(currentItem); - ClientTools.SyncTree(path, true); - } - } - txt.Text = "

" + ui.Text("dictionaryItem", "description", currentItem.key, currentUser) + "


"; - ClientTools.ShowSpeechBubble(speechBubbleIcon.save, ui.Text("speechBubbles", "dictionaryItemSaved"), ""); - } - - #region Web Form Designer generated code - - override protected void OnInit(EventArgs e) - { - InitializeComponent(); - base.OnInit(e); - } - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - } - - #endregion - - - private class languageTextbox : TextBox - { - - private int _languageid; - - public int languageid - { - set { _languageid = value; } - get { return _languageid; } - } - - public languageTextbox(int languageId) : base() - { - this.TextMode = TextBoxMode.MultiLine; - this.Rows = 10; - this.Columns = 40; - this.Attributes.Add("style", "margin: 3px; width: 98%;"); - - this.languageid = languageId; - } - } - } -} diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/settings/EditDictionaryItem.aspx.designer.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/settings/EditDictionaryItem.aspx.designer.cs deleted file mode 100644 index 15921e7445..0000000000 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/settings/EditDictionaryItem.aspx.designer.cs +++ /dev/null @@ -1,24 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace umbraco.settings { - - - public partial class EditDictionaryItem { - - /// - /// Panel1 control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::umbraco.uicontrols.UmbracoPanel Panel1; - } -} diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/DocumentExtensions.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/DocumentExtensions.cs index 7a59d874bd..ebcab9d472 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/DocumentExtensions.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/DocumentExtensions.cs @@ -124,7 +124,7 @@ namespace umbraco /// /// Functionally similar to the XPath axis 'descendant' /// Make the All Descendants LINQ queryable - /// taken from: http://our.umbraco.org/wiki/how-tos/useful-helper-extension-methods-%28linq-null-safe-access%29 + /// taken from: https://our.umbraco.com/wiki/how-tos/useful-helper-extension-methods-%28linq-null-safe-access%29 /// /// The document. /// Documents as IEnumerable @@ -179,7 +179,7 @@ namespace umbraco /// Functionally similar to the XPath axis 'child' /// Make the imediate Children LINQ queryable /// Performance optimised for just imediate children. - /// taken from: http://our.umbraco.org/wiki/how-tos/useful-helper-extension-methods-%28linq-null-safe-access%29 + /// taken from: https://our.umbraco.com/wiki/how-tos/useful-helper-extension-methods-%28linq-null-safe-access%29 /// /// The document. /// Documents as IEnumerable diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/NodeExtensions.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/NodeExtensions.cs index a3b7b93a06..7da141d9b1 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/NodeExtensions.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/NodeExtensions.cs @@ -200,7 +200,7 @@ namespace umbraco /// /// Functionally similar to the XPath axis 'descendant' /// Make the All Descendants LINQ queryable - /// taken from: http://our.umbraco.org/wiki/how-tos/useful-helper-extension-methods-%28linq-null-safe-access%29 + /// taken from: https://our.umbraco.com/wiki/how-tos/useful-helper-extension-methods-%28linq-null-safe-access%29 /// /// an umbraco.presentation.nodeFactory.Node object /// Node as IEnumerable @@ -212,7 +212,7 @@ namespace umbraco /// /// Functionally similar to the XPath axis 'descendant' /// Make the All Descendants LINQ queryable - /// taken from: http://our.umbraco.org/wiki/how-tos/useful-helper-extension-methods-%28linq-null-safe-access%29 + /// taken from: https://our.umbraco.com/wiki/how-tos/useful-helper-extension-methods-%28linq-null-safe-access%29 /// /// an umbraco.interfaces.INode object /// INode as IEnumerable @@ -293,7 +293,7 @@ namespace umbraco /// Functionally similar to the XPath axis 'child' /// Make the imediate Children LINQ queryable /// Performance optimised for just imediate children. - /// taken from: http://our.umbraco.org/wiki/how-tos/useful-helper-extension-methods-%28linq-null-safe-access%29 + /// taken from: https://our.umbraco.com/wiki/how-tos/useful-helper-extension-methods-%28linq-null-safe-access%29 /// /// an umbraco.presentation.nodeFactory.Node object /// Node as IEnumerable @@ -306,7 +306,7 @@ namespace umbraco /// Functionally similar to the XPath axis 'child' /// Make the imediate Children LINQ queryable /// Performance optimised for just imediate children. - /// taken from: http://our.umbraco.org/wiki/how-tos/useful-helper-extension-methods-%28linq-null-safe-access%29 + /// taken from: https://our.umbraco.com/wiki/how-tos/useful-helper-extension-methods-%28linq-null-safe-access%29 /// /// an umbraco.interfaces.INode object /// INode as IEnumerable diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/uQuery-Nodes.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/uQuery-Nodes.cs index 5fbb56a5a9..18ee111335 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/uQuery-Nodes.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/uQuery-Nodes.cs @@ -197,7 +197,7 @@ namespace umbraco /// The URL to get the XML node from. /// Returns the node Id. /// - /// Thanks to Jonas Eriksson http://our.umbraco.org/member/4853 + /// Thanks to Jonas Eriksson https://our.umbraco.com/member/4853 /// Just runs lookups to find the document, does not follow internal redirects, 404 handlers, /// page access verification, wildcard domains -- nothing. /// diff --git a/src/umbraco.MacroEngines/RazorDataTypeModels/IntegerDataTypeModel.cs b/src/umbraco.MacroEngines/RazorDataTypeModels/IntegerDataTypeModel.cs index d998a7c3ab..c0cb55289f 100644 --- a/src/umbraco.MacroEngines/RazorDataTypeModels/IntegerDataTypeModel.cs +++ b/src/umbraco.MacroEngines/RazorDataTypeModels/IntegerDataTypeModel.cs @@ -10,7 +10,7 @@ namespace umbraco.MacroEngines.RazorDataTypeModels [RazorDataTypeModel("f231cd8a-e447-424a-94a4-bc73b11736bb", 90)] [RazorDataTypeModel(Constants.PropertyEditors.RadioButtonList, 90)] [RazorDataTypeModel(Constants.PropertyEditors.MemberPicker, 90)] - [RazorDataTypeModel("f6524852-2fb0-11e0-a9fa-6f1cdfd72085", 90)] //Extended Content Picker http://our.umbraco.org/projects/backoffice-extensions/extended-content-picker + [RazorDataTypeModel("f6524852-2fb0-11e0-a9fa-6f1cdfd72085", 90)] //Extended Content Picker https://our.umbraco.com/projects/backoffice-extensions/extended-content-picker public class IntegerDataTypeModel : IRazorDataTypeModel { public bool Init(int CurrentNodeId, string PropertyData, out object instance) diff --git a/src/umbraco.MacroEngines/RazorDynamicNode/DynamicNodeList.cs b/src/umbraco.MacroEngines/RazorDynamicNode/DynamicNodeList.cs index e7137e0977..7ddc33815a 100644 --- a/src/umbraco.MacroEngines/RazorDynamicNode/DynamicNodeList.cs +++ b/src/umbraco.MacroEngines/RazorDynamicNode/DynamicNodeList.cs @@ -1,16 +1,11 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Dynamic; -using Umbraco.Core; -using umbraco.interfaces; using System.Collections; -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Web.Compilation; -using System.Linq.Expressions; +using System.Collections.Generic; +using System.Dynamic; +using System.Linq; using System.Linq.Dynamic; +using System.Reflection; +using umbraco.interfaces; using Umbraco.Core; namespace umbraco.MacroEngines { diff --git a/src/umbraco.MacroEngines/Resources/Web.config b/src/umbraco.MacroEngines/Resources/Web.config index d96172c0e4..c98c89349d 100644 --- a/src/umbraco.MacroEngines/Resources/Web.config +++ b/src/umbraco.MacroEngines/Resources/Web.config @@ -1,56 +1,56 @@ - - -
-
- - + + +
+
+ + - - - - - - - - - + + + + + + + + + - - - + + + - - - - + + + + - - - - - - - + + + + + + + - - + + - - - - - + + + + + diff --git a/src/umbraco.businesslogic/ApplicationTree.cs b/src/umbraco.businesslogic/ApplicationTree.cs index 2c015c9b05..e91490f796 100644 --- a/src/umbraco.businesslogic/ApplicationTree.cs +++ b/src/umbraco.businesslogic/ApplicationTree.cs @@ -1,17 +1,7 @@ using System; -using System.Collections.Generic; -using System.IO; using System.Linq; -using System.Web; -using System.Xml.Linq; using AutoMapper; using Umbraco.Core; -using Umbraco.Core.Cache; -using Umbraco.Core.IO; -using Umbraco.Core.Events; -using Umbraco.Core.IO; -using Umbraco.Core.Services; -using umbraco.DataLayer; namespace umbraco.BusinessLogic { diff --git a/src/umbraco.businesslogic/BasePages/BasePage.cs b/src/umbraco.businesslogic/BasePages/BasePage.cs index bbd3a41fee..32629091cb 100644 --- a/src/umbraco.businesslogic/BasePages/BasePage.cs +++ b/src/umbraco.businesslogic/BasePages/BasePage.cs @@ -1,24 +1,17 @@ using System; -using System.Collections.Generic; using System.ComponentModel; -using System.Data; -using System.Web; using System.Linq; +using System.Web; using System.Web.Mvc; -using System.Web.Routing; -using System.Web.Security; using System.Web.UI; -using Umbraco.Core; -using Umbraco.Core.Configuration; -using Umbraco.Core.IO; -using Umbraco.Core.Cache; -using Umbraco.Core.Logging; -using Umbraco.Core.Services; using umbraco.BusinessLogic; using umbraco.DataLayer; using Umbraco.Core; +using Umbraco.Core.IO; +using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Security; +using Umbraco.Core.Services; namespace umbraco.BasePages { diff --git a/src/umbraco.businesslogic/BasePages/UmbracoEnsuredPage.cs b/src/umbraco.businesslogic/BasePages/UmbracoEnsuredPage.cs index 36a0f63f36..aefd999c9d 100644 --- a/src/umbraco.businesslogic/BasePages/UmbracoEnsuredPage.cs +++ b/src/umbraco.businesslogic/BasePages/UmbracoEnsuredPage.cs @@ -1,13 +1,12 @@ using System; -using Umbraco.Core.Logging; using System.Linq; using System.Web; +using umbraco.businesslogic.Exceptions; +using umbraco.BusinessLogic; +using umbraco.interfaces; using Umbraco.Core; using Umbraco.Core.IO; using Umbraco.Core.Logging; -using umbraco.BusinessLogic; -using umbraco.businesslogic.Exceptions; -using umbraco.interfaces; using Umbraco.Core.Models; using Umbraco.Core.Security; @@ -166,7 +165,7 @@ namespace umbraco.BasePages throw new UserAuthorizationException(String.Format("The current user doesn't have access to the section/app '{0}'", CurrentApp)); } } - catch (UserAuthorizationException ex) + catch (UserAuthorizationException) { LogHelper.Warn(string.Format("{0} tried to access '{1}'", CurrentUser.Id, CurrentApp)); throw; @@ -199,4 +198,4 @@ namespace umbraco.BasePages } } } -} \ No newline at end of file +} diff --git a/src/umbraco.businesslogic/IO/SystemFiles.cs b/src/umbraco.businesslogic/IO/SystemFiles.cs index a97dc74ba1..c480fd0424 100644 --- a/src/umbraco.businesslogic/IO/SystemFiles.cs +++ b/src/umbraco.businesslogic/IO/SystemFiles.cs @@ -29,6 +29,7 @@ namespace umbraco.IO get { return Umbraco.Core.IO.SystemFiles.TinyMceConfig; } } + [Obsolete("This file is no longer used and should not be accessed!")] public static string MetablogConfig { get { return Umbraco.Core.IO.SystemFiles.MetablogConfig; } diff --git a/src/umbraco.cms/Actions/ActionRestore.cs b/src/umbraco.cms/Actions/ActionRestore.cs index 9b38918fd4..89fb858d6a 100644 --- a/src/umbraco.cms/Actions/ActionRestore.cs +++ b/src/umbraco.cms/Actions/ActionRestore.cs @@ -5,7 +5,7 @@ using umbraco.BasePages; namespace umbraco.BusinessLogic.Actions { /// - /// This action is invoked when the content item is to be restored from the recycle bin + /// This action is invoked when the content/media item is to be restored from the recycle bin /// public class ActionRestore : IAction { diff --git a/src/umbraco.cms/businesslogic/Content.cs b/src/umbraco.cms/businesslogic/Content.cs index b0ad710f2c..519fc2e006 100644 --- a/src/umbraco.cms/businesslogic/Content.cs +++ b/src/umbraco.cms/businesslogic/Content.cs @@ -149,7 +149,7 @@ namespace umbraco.cms.businesslogic { _contentType = new ContentType(contentTypeId); } - catch (Exception e) + catch (Exception) { return null; } @@ -809,4 +809,4 @@ namespace umbraco.cms.businesslogic } #endregion } -} \ No newline at end of file +} diff --git a/src/umbraco.cms/businesslogic/Packager/PackageActions/publishRootDocument.cs b/src/umbraco.cms/businesslogic/Packager/PackageActions/publishRootDocument.cs index 7bc48d3e05..760a3a4cf1 100644 --- a/src/umbraco.cms/businesslogic/Packager/PackageActions/publishRootDocument.cs +++ b/src/umbraco.cms/businesslogic/Packager/PackageActions/publishRootDocument.cs @@ -25,8 +25,6 @@ namespace umbraco.cms.businesslogic.packager.standardPackageActions string documentName = xmlData.Attributes["documentName"].Value; - int parentDocid = 0; - web.Document[] rootDocs = web.Document.GetRootDocuments(); foreach (web.Document rootDoc in rootDocs) @@ -71,4 +69,4 @@ namespace umbraco.cms.businesslogic.packager.standardPackageActions } } -} \ No newline at end of file +} diff --git a/src/umbraco.controls/UmbracoClientDependencyLoader.cs b/src/umbraco.controls/UmbracoClientDependencyLoader.cs index 06c369a5a1..e2320cedce 100644 --- a/src/umbraco.controls/UmbracoClientDependencyLoader.cs +++ b/src/umbraco.controls/UmbracoClientDependencyLoader.cs @@ -1,15 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Web.UI; +using System.Web.UI; using ClientDependency.Core.Controls; using ClientDependency.Core.FileRegistration.Providers; using Umbraco.Core.IO; namespace umbraco.uicontrols { - /// /// Used to load in all client dependencies for Umbraco. /// Ensures that both UmbracoClient and UmbracoRoot paths are added to the loader. @@ -28,7 +23,7 @@ namespace umbraco.uicontrols } - public static new ClientDependencyLoader TryCreate(Control parent, out bool isNew) + public static ClientDependencyLoader TryCreate(Control parent, out bool isNew) { if (ClientDependencyLoader.Instance == null) { diff --git a/src/umbraco.editorControls/uploadfield/uploadField.cs b/src/umbraco.editorControls/uploadfield/uploadField.cs index 8a62fb3073..590fd25d9f 100644 --- a/src/umbraco.editorControls/uploadfield/uploadField.cs +++ b/src/umbraco.editorControls/uploadfield/uploadField.cs @@ -1,18 +1,16 @@ using System; using System.IO; -using System.Linq; using System.Text.RegularExpressions; using System.Web; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; -using Umbraco.Core.Configuration; -using Umbraco.Core.IO; using umbraco.interfaces; using Umbraco.Core; +using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.IO; using Content = umbraco.cms.businesslogic.Content; -using Umbraco.Core; namespace umbraco.editorControls { @@ -329,4 +327,4 @@ namespace umbraco.editorControls base.Render(output); } } -} \ No newline at end of file +} diff --git a/src/umbraco.editorControls/yesno/YesNoDataType.cs b/src/umbraco.editorControls/yesno/YesNoDataType.cs index 699af1a364..ee9d9d84bf 100644 --- a/src/umbraco.editorControls/yesno/YesNoDataType.cs +++ b/src/umbraco.editorControls/yesno/YesNoDataType.cs @@ -35,7 +35,7 @@ namespace umbraco.editorControls.yesno public override string DataTypeName { - get {return "True/False (Ja/Nej)";} + get {return "Checkbox";} } public override Guid Id { diff --git a/src/umbraco.sln b/src/umbraco.sln index 6deb764252..21e653f140 100644 --- a/src/umbraco.sln +++ b/src/umbraco.sln @@ -12,7 +12,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{FD962632-1 ..\apidocs\docfx.json = ..\apidocs\docfx.json ..\apidocs\index.md = ..\apidocs\index.md ..\LICENSE.md = ..\LICENSE.md - ..\README.md = ..\README.md ..\apidocs\toc.yml = ..\apidocs\toc.yml EndProjectSection EndProject @@ -21,9 +20,6 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuSpecs", "NuSpecs", "{227C3B55-80E5-4E7E-A802-BE16C5128B9D}" ProjectSection(SolutionItems) = preProject ..\build\build.ps1 = ..\build\build.ps1 - ..\build\InstallGit.cmd = ..\build\InstallGit.cmd - ..\build\RevertToCleanInstall.bat = ..\build\RevertToCleanInstall.bat - ..\build\RevertToEmptyInstall.bat = ..\build\RevertToEmptyInstall.bat ..\build\setversion.ps1 = ..\build\setversion.ps1 ..\build\NuSpecs\UmbracoCms.Core.nuspec = ..\build\NuSpecs\UmbracoCms.Core.nuspec ..\build\NuSpecs\UmbracoCms.nuspec = ..\build\NuSpecs\UmbracoCms.nuspec diff --git a/tools/ConfigTransformTool/ctt.exe b/tools/ConfigTransformTool/ctt.exe deleted file mode 100644 index e6089d27ac..0000000000 Binary files a/tools/ConfigTransformTool/ctt.exe and /dev/null differ diff --git a/tools/ConfigTransformTool/readme.txt b/tools/ConfigTransformTool/readme.txt deleted file mode 100644 index e2a721689b..0000000000 --- a/tools/ConfigTransformTool/readme.txt +++ /dev/null @@ -1,2 +0,0 @@ -More information at: -https://ctt.codeplex.com/documentation \ No newline at end of file diff --git a/tools/MSBuildCommunityTasks/ICSharpCode.SharpZipLib.dll b/tools/MSBuildCommunityTasks/ICSharpCode.SharpZipLib.dll deleted file mode 100644 index 77bafe8ba8..0000000000 Binary files a/tools/MSBuildCommunityTasks/ICSharpCode.SharpZipLib.dll and /dev/null differ diff --git a/tools/MSBuildCommunityTasks/MSBuild.Community.Tasks.Targets b/tools/MSBuildCommunityTasks/MSBuild.Community.Tasks.Targets deleted file mode 100644 index 1eff90d89c..0000000000 --- a/tools/MSBuildCommunityTasks/MSBuild.Community.Tasks.Targets +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - $(MSBuildExtensionsPath)\MSBuildCommunityTasks - $(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/MSBuildCommunityTasks/MSBuild.Community.Tasks.chm b/tools/MSBuildCommunityTasks/MSBuild.Community.Tasks.chm deleted file mode 100644 index e9cfb77efd..0000000000 Binary files a/tools/MSBuildCommunityTasks/MSBuild.Community.Tasks.chm and /dev/null differ diff --git a/tools/MSBuildCommunityTasks/MSBuild.Community.Tasks.dll b/tools/MSBuildCommunityTasks/MSBuild.Community.Tasks.dll deleted file mode 100644 index 3d1dbd357f..0000000000 Binary files a/tools/MSBuildCommunityTasks/MSBuild.Community.Tasks.dll and /dev/null differ diff --git a/tools/MSBuildCommunityTasks/MSBuild.Community.Tasks.xml b/tools/MSBuildCommunityTasks/MSBuild.Community.Tasks.xml deleted file mode 100644 index 82d84b7c7e..0000000000 --- a/tools/MSBuildCommunityTasks/MSBuild.Community.Tasks.xml +++ /dev/null @@ -1,10475 +0,0 @@ - - - - MSBuild.Community.Tasks - - - - - Installs and register script mappings for ASP.NET - - Uses the aspnet_regiis.exe tool included with the .NET Framework. - - Install the latest version of ASP.NET on the server: - - ]]> - - - Install the latest version of ASP.NET on the server, but do not update script maps: - - ]]> - - - Install the script maps for ASP.NET 2.0 on a web directory on the default website: - - ]]> - - - Install the script maps for ASP.NET 1.1 on a web directory on a non-default website: - - ]]> - - - Install client side script only for the latest version: - - ]]> - - - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Returns a string value containing the command line arguments - to pass directly to the executable file. - - - A string value containing the command line arguments to pass - directly to the executable file. - - - - - When overridden in a derived class, executes the task. - - - True if the task successfully executed; otherwise, false. - - - - - Determines if the current property values can be used together - - when properties can be used together. - - - - - The version of ASP.NET to install - - - The default behavior is to use the latest version of ASP.NET available on the computer. - - Version - Version11ASP.NET v1.1 - Version20ASP.NET v2.0 - VersionLatestThe latest version of ASP.NET available - - - - - - The method used to determine if ASP.NET script mappings should be applied - - - The default behavior is to register script mappings on all sites except those with a newer version of ASP.NET. - - Value - NeverRegister ASP.NET on the computer without updating any script mappings. - IfNoneExistRegister script mappings only on for sites that do not have any existing ASP.NET script mappings (not available for ASP.NET v1.1) - UnlessNewerExistRegister script mappings on all sites except those with a newer version of ASP.NET. - AlwaysRegister script mappings on all sites, even if they already have a newer version of ASP.NET. - - - - - - When , the aspnet_client scripts will be installed. No script mappings will be updated. - - This cannot be if a value for or has been specified. - - - - The web application that should have its script maps updated. - - - The path must be of the form W3SVC/[instance]/Root/[webdirectory], for example W3SVC/1/Root/SampleApp1. - As a shortcut, you can specify just the web directory name, - if the web directory is installed in the default website instance (W3SVC/1/Root). - You should not specify a value for when specifying a path. - - - - - When , script maps are applied recursively under . - - This property is only valid when specifying a value for . It is by default. - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - Generates an AssemblyInfo files - - - Generates a common version file. - - ]]> - Generates a complete version file. - - ]]> - Generates a complete version file for C++/CLI. - - ]]> - - - - - The default value of . - The value is "AssemblyInfo.cs". - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets or sets the code language. - - The code language. - - - - Gets or sets a value indicating whether [COMVisible]. - - true if [COMVisible]; otherwise, false. - - - - Gets or sets a value indicating whether [CLSCompliant]. - - true if [CLSCompliant]; otherwise, false. - - - - Gets or sets the GUID. - - The GUID. - - - - Gets or sets the assembly title. - - The assembly title. - - - - Gets or sets the assembly description. - - The assembly description. - - - - Gets or sets the assembly configuration. - - The assembly configuration. - - - - Gets or sets the assembly company. - - The assembly company. - - - - Gets or sets the assembly product. - - The assembly product. - - - - Gets or sets the assembly copyright. - - The assembly copyright. - - - - Gets or sets the assembly trademark. - - The assembly trademark. - - - - Gets or sets the assembly culture. - - The assembly culture. - - - - Gets or sets the assembly version. - - The assembly version. - - - - Gets or sets the assembly file version. - - The assembly file version. - - - - Gets or sets the assembly informational version. - - The assembly informational version. - - - - Gets or sets the assembly key file. - - - - - Gets or sets the assembly key name. - - - - - Gets or sets the assembly delay sign value. - - - - - Gets or sets the assembly delay sign value. - - - - - Gets or sets the assembly delay sign value. - - - - - Gets or sets a value indicating whether to generate the ThisAssmebly class. - - - - - Gets or sets the neutral language which is used as a fallback language configuration - if the locale on the computer isn't supported. Example is setting this to "en-US". - - - - - Gets or sets the ultimate resource fallback location. - - The ultimate resource fallback location. - - - - Makes it possible to make certain assemblies able to use constructs marked as internal. - Example might be setting this value to "UnitTests" assembly. The typical use case might - be constructors in classes which shouldn't be available to other assemblies, but the unit - tests should be able to use them. - - - - - Gets or sets whether to allow strong-named assemblies to be called by partially trusted code. - - - - - Gets or sets the output file. - - The output file. - - - - Changes the attributes of files and/or directories - - - Make file Readonly, Hidden and System. - - ]]> - Clear Hidden and System attributes. - - ]]> - Make file Normal. - - ]]> - - - - - Executes the task. - - if the task ran successfully; - otherwise . - - - - Gets or sets the list of files to change attributes on. - - The files to change attributes on. - - - - Gets or sets the list of directories to change attributes on. - - The directories to change attributes on. - - - - Gets or sets file's archive status. - - true if archive; otherwise, false. - - - - Gets or sets a value indicating file is compressed. - - true if compressed; otherwise, false. - - - - Gets or sets a value indicating file is encrypted. - - true if encrypted; otherwise, false. - - - - Gets or sets a value indicating file is hidden, and thus is not included in an ordinary directory listing. - - true if hidden; otherwise, false. - - - - Gets or sets a value indicating file is normal and has no other attributes set. - - true if normal; otherwise, false. - - - - Gets or sets a value indicating file is read-only. - - true if read-only; otherwise, false. - - - - Gets or sets a value indicating file is a system file. - - true if system; otherwise, false. - - - - Describes certain byte measurements as nice strings. - - - - - Provides information about the build computer. - - Get build computer information. - - - - - - - ]]> - - - - - Initializes a new instance of the class. - - - - - Executes the task. - - - if the task ran successfully; otherwise . - - - - - Gets the host name of the build computer. - - - - - Gets the IP address of the build computer. - - - - - Gets the platform identifier of the build computer's operating system . - - - - - Gets the version number of the build computer's operating system. - - - - - A task to play the sound of a beep through the console speaker. - - - By default, the beep plays at a frequency of 800 hertz for a duration of 200 milliseconds. - - To play the sound of a beep at a frequency of 800 hertz and for a duration of 200 milliseconds, use - - ]]> - - - To play the sound of a beep at a frequency of 440 hertz and for a duration of 300 milliseconds, use - - ]]> - - - - - - Plays the sound of a beep - at the given and for the given - through the console speaker. - - - Always returns , even when the sound could not be played. - - - - - Gets or sets the frequency of the beep, ranging from 37 to 32767 hertz. - Defaults to 800 hertz. - - - - - Gets or sets the of the beep measured in milliseconds. - Defaults to 200 milliseconds. - - - - - Delete a directory tree. This task supports wild card directory selection. - - - Delete all bin and obj directories. - - ]]> - Delete all bin and obj directories that start with MSBuild.Community. - - ]]> - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets or sets the directories to be deleted. - - The directories to be deleted. - - Directories can contain wild cards. - - - - - Gets or sets a value indicating whether this is recursive. - - true if recursive; otherwise, false. - - - - Gets the deleted directories. - - The deleted directories. - - - - Uploads a group of files using File Transfer Protocol (FTP). - - - Set either LocalFiles or LocalFile but not both. - - Upload a file. - - ]]> - - Upload all the files in an ItemGroup: - '%(RecursiveDir)%(Filename)%(Extension)')" /> - ]]> - - - - - Describes a factory for IFtpWebRequest. - - - - - Instantiates an FtpWebRequest. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance that will inject the specified dependency. - - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets or sets the single file to upload. Use - this or LocalFiles, but not both. - - - - - Gets or sets the local files to upload. Use this - or LocalFile, but not both. - - The local file. - - - - Gets or sets the remote files to upload. - Each item in this list should have a corresponding item in LocalFiles. - - - - - Gets or sets the remote URI to upload. - - The remote URI. - - - - Gets or sets the username. - - The username. - - - - Gets or sets the password. - - The password. - - - - Gets or sets the behavior of a client application's data transfer process. - - true if [use passive]; otherwise, false. - - - - This class references an interface that looks like FtpWebRequest - in order to support unit testing without an actual FTP Server. - - - - - Sets the ContentLength property of the FtpWebRequest. - - - - - - Calls GetRequestStream on the FtpWebRequest. - - - - - - Gets the StatusDescription property of the response, then closes the response - on the FtpWebRequest. - - - - - - Gets the response from the FTP server and closes it. - - - - - Gets the response stream from the FtpWebRequest. - - - - - - An adapter to make the real FtpWebRequest look like - an IFtpWebRequest. - - - - - Initializes a new instance of the RealFtpWebRequest class. - - - - - Ftp client base class. - - - - - The socket that will connect to the FTP server. - - - - - The size of the data buffer. - - - - - The last recieved FTP response over the client socket. - - - - - The password to use to login. - - - - - The port number of the FTP server. - - - - - The hostname of the FTP server. - - - - - The username to use to login. - - - - - Initializes a new instance of the class. - - - - - Connects this FTP server socket. - - Thrown when unable to connect. - - - - Login to the FTP server with the specified credentials. - - - - - Changes the working directory. - - The remote directory. - Occurs if there where connection problems during the process or the FTP server doesn't support the CWD command. See the Message of the exception for details. - Sends the CWD command. - - - - Gets the working directory. - - The current working directory. - - - - Change to the parent of the current working directory. - - Occurs if there where connection problems during the process or the FTP server doesn't support the CDUP command. See the Message of the exception for details. - Sends the CDUP command. - - - - Determs whether a remote file exists. - - The remote file. - - Occurs if there where connection problems during the operation or if the FTP server doesn't support the SIZE command. See the Message of the exception for details. - - - - Determs whether a remote directory exists. - - The remote directory. - - This method is based on the succeedness of a CWD command, this can give wrong indication at a rare number of FTP server! - - Thrown if the opperation couldn't be executed. - true if the directory exists remotely; otherwise false - - - - Removes a remote directory. - - The remote directory name. - Occurs if there where connection problems during the process or the FTP server doesn't support the RMD command. See the Message of the exception for details. - Sends the RMD command. - - - - Creates a remote directory in the current working folder. - - Name of the directory. - Occurs if there where connection problems during the process or the FTP server doesn't support the MMD command. See the Message of the exception for details. - - - - Closes the connection to the server. - - - - - Stores the specified localFile. - - The localfile. - The remotefile. - - - - Send a command to the FTP server. - - The command, for example PWD. - The value. - - - - Send a command to the FTP server. - - The full command to send. - - - - Send a command to the FTP server and returns the response. - - The command, for example PWD. - The value - The reply of the FTP server for this command. - - - - Send a command to the FTP server and returns the response. - - The raw command to send. - The reply of the FTP server for this command. - - - - Get the full directory details of the current directory. - - A array that contains all the FTP files located in the currenct directory. - - - - Create a data stream and send a raw command. - - The raw command to send. - The data stream that was created. - - - - Parses the data IP end point from datarequest message. - - The message. - - - - - Get the full directory details of the current directory. - - The remove directory, emtpy or null will get the details of the current directory. - A array that contains all the FTP files located in the currenct directory. - - - - Reads the ftp response from the client socket. - - The response of the FTP server. - - - - Reads the response string from the client socket. - - The response of the client socket. - - - - Make sure the connections are closed and trow the specified exception. - - The exception to throw. - - - - Gets or sets the server host. - - The server host. - The lenght of the given value is greater then 126 characters. - - - - Gets or sets the port number. - - The port numer. - - - - Gets or sets the client socket. - - The client socket. - - - - Gets a value indicating whether this is connected. - - true if connected; otherwise, false. - - - - Gets the encoding to use with communication with the server. - - The encoding. - - - - Gets the last recieved FTP response over the client socket. - - The last recieved FTP response over the client socket. - - - - Gets or sets the username to login. - - The username. - - - - Gets or sets the password to login. - - The password. - - - - Gets or sets a value indicating whether the FTP message conversation should be logged. - - - true if the FTP message conversation should be logged; otherwise, false. - - - - - Gets or sets the size of the data buffer. - - - - - Creates a full remote directory on the remote server if not exists using the File Transfer Protocol (FTP). - This can be one directory or a full path to create. - - Create remote directory: - - ]]> - - The full remote directory path will be created. All directories that doesn't exists on the remote server will be created. - - - - The remote directory to create. - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets or sets the remote directory to create. - - The remote directory. - This can be one directory name, like "Directory", or a directory path, like "Directory\Subdirectoy". - - - - - Determ if a remote directory exists on a FTP server or not. - - Determ of Directory\1 exists: - - - - - - ]]> - If the directory exists on the server you should see the following output in the console: - Directory '1\2\3' exists: true - - The full remote directory path will be created. All directories that doesn't exists on the remote server will be created. - - - - The remote directory to create. - - - - - Flag that indicates whether the directory exists on the server. - - - - - Executes the current task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets or sets the remote directory to create. - - The remote directory. - This can be one directory name, like "Directory", or a directory path, like "Directory\Subdirectoy". - - - - - Gets an indication whether the directory exists on the server. - - true when the directory exists on the server; otherwise false. - - - - Exception returned by FTP server. - - - - - Initializes a new instance of the class. - - The message. - - - - Initializes a new instance of the class. - - The message. - The inner exception. - - - - Represents an remote file or directory on a FTP server. - - - - - Indicates whether this instance represents a directory. - - - - - Represents the file or directory name. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - if set to true this instance represents a directory; otherwise, false. - The name. - - - - Parses the dir list. - - The entry lines. - - - - - Gets or sets a value indicating whether this instance represents a directory. - - - true if this instance represents a directory; otherwise, false. - - - - - Gets or sets the name. - - The name. - - - - Represenatation of a FTP reply message. - - - - - The result code of the FTP response. - - - - - The response message. - - - - - Initializes a new instance of the class. - - The result code of the FTP response. - The response message. - - - - Gets or sets the result code. - - The result code. - - - - Gets or sets the message. - - The message. - - - - Uploads a full directory content to a remote directory. - - Uploads directory content, including all subdirectories and subdirectory content: - - - ]]> - To go a little step further. If the local directory looked like this: - - [mywebsite] - [images] - 1.gif - 2.gif - 3.gif - [js] - clientscript.js - nofocus.js - [css] - print.css - main.css - index.htm - contact.htm - downloads.htm - - All directories and there content will be uploaded and a excact copy of the content of mywebsite directory will be created remotely. - - If is set the false; only index.htm, contact.htm and downloads.htm will be uploaded and no subdirectories will be created remotely. - - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Upload a directory and its file contents. - - The local path. - if set to true all subdurectiries will be included. - - - - Upload a directory and its file contents. - - The local path. - Only upload files that compli to the mask. - if set to true all subdurectiries will be included. - - - - Gets or sets the local directory that contains the content to upload. - - The local directory. - - - - Gets or sets the remote directory destination for the local files. - - The remote directory. - - - - Gets or sets a value indicating whether the subdirectories of the local directory should be created remotely and the content of these should also be uploaded. - - true if recursive; otherwise, false. - - - - The status of an uninstall. - - - - - No status. - - - - - Uninstalled successfully. - - - - - Assembly is still in use. - - - - - Assembly already uninstalled or not found. - - - - - Assembly delete is pending. - - - - - Assembly has a reference to an installed application. - - - - - Assembly not found. - - - - - A class wrapping fusion api calls - - - - - Installs the assembly. - - The assembly path. - if set to true force. - - - - Uninstalls the assembly. - - Name of the assembly. - if set to true force. - Returns true if uninstall successful. - - - - Uninstalls the assembly. - - Name of the assembly. - if set to true force. - The UninstallStatus result. - Returns true if uninstall successful. - - - - Gets the assembly path. - - Name of the assembly. - The path to the assembly in the GAC. - - - - Gets the name of the assembly. - - Name of the assembly. - An instance. - - - - A task for Git commands. - - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - Generates the command. - - The builder. - - - - Generates the arguments. - - The builder. - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Logs the starting point of the run to all registered loggers. - - A descriptive message to provide loggers, usually the command line and switches. - - - - Indicates whether all task paratmeters are valid. - - - true if all task parameters are valid; otherwise, false. - - - - - Returns the directory in which to run the executable file. - - - The directory in which to run the executable file, or a null reference (Nothing in Visual Basic) if the executable file should be run in the current directory. - - - - - Gets or sets the command to run. - - - - - Gets or sets the raw arguments to pass to the git command. - - - - - Gets or sets the local or working path for git command. - - - - - Gets the with which to log errors. - - - The with which to log errors. - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - - A task for git to get the current commit hash. - - - - - Initializes a new instance of the class. - - - - - Generates the arguments. - - The builder. - - - - Parses a single line of text to identify any errors or warnings in canonical format. - - A single line of text for the method to parse. - A value of that indicates the importance level with which to log the message. - - - - Gets or sets the revision to get the version from. Default is HEAD. - - - - - Gets or sets the commit hash. - - - - - Gets or sets a value indicating whether to abbreviate to a shorter unique name. - - - true if short; otherwise, false. - - - - - Html Help 1x compiler task. - - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Logs the starting point of the run to all registered loggers. - - A descriptive message to provide loggers, usually the command line and switches. - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - Handles execution errors raised by the executable file. - - - true if the method runs successfully; otherwise, false. - - - - - Gets or sets the project file path. - - The project file path. - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - Gets the with which to log errors. - - - The with which to log errors. - - - - A Html Help 2.0 compiler task. - - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Logs the starting point of the run to all registered loggers. - - A descriptive message to provide loggers, usually the command line and switches. - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - Handles execution errors raised by the executable file. - - - true if the method runs successfully; otherwise, false. - - - - - Gets or sets the project file path. - - The project file path. - - - - Gets or sets the log file. - - The log file. - - - - Gets or sets the project root. - - The project root. - - - - Gets or sets the output file. - - The output file. - - - - Gets or sets a value indicating whether no info messages will be output. - - true if no info messages; otherwise, false. - - - - Gets or sets a value indicating whether no warning messages will be output. - - true if no warning messages; otherwise, false. - - - - Gets or sets a value indicating whether no error messages will be output. - - true if no error messages; otherwise, false. - - - - Gets or sets a value indicating quite mode. - - true if quite mode; otherwise, false. - - - - Gets or sets the uncompile file. - - The uncompile file. - - - - Gets or sets the uncompile directory. - - The uncompile directory. - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - Gets the with which to log errors. - - - The with which to log errors. - - - - MSBuild task to create installer with InnoSetup - - Create installer - - ]]> - - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Logs the starting point of the run to all registered loggers. - - A descriptive message to provide loggers, usually the command line and switches. - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - - - - - - - Filename of Inno Setup script (.iss) - - InnoSetup file, example: C:\Setup.iss - - - - Specify output filename - - Name for setup, examples: MySetup.exe - - - - Specify output path - - Path for output setup, example: C:\Setups - - - - Quiet compile - - True o False - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - Gets the with which to log errors. - - - The with which to log errors. - - - - Defines the modes for merging files. - - - - - Merges files as binary data. - - - - - Merges files as text. - - - - - Merges files as text line by line. - - - - - Merge files into the destination file. - - Merge CSS files together for better browser performance. - - ]]> - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets or sets the mode to use when merging. - - The merge mode. - - - - - Gets or sets the source files to merge. - - The source files to merge. - - - - Gets or sets the destination file where the - are merged to. - - The destination file. - - - - Makes an HTTP request, optionally validating the result and writing it to a file. - - - Execute a http request to hit the database update. - Target attributes to set: - Url (required), - FailOnNon2xxResponse (200 responses generally means successful http request. default=true), - EnsureResponseContains (string to check for), - WriteResponseTo (file name to write to), - - - Example of a update request ensuring "Database upgrade check completed successfully." was returned. - - ]]> - - - - - Constructor to set the default parameters for http request - - - - - Entry Point inherited from Task - - - - - The URL to make an HTTP request against. - - - - - Optional: if set then the task fails if the response text doesn't contain the text specified. - - - - - Default is true. When true, if the web server returns a status code less than 200 or greater than 299 then the task fails. - - - - - Optional; the name of the file to write the response to. - - - - - A base class for NuGet tasks. - - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Returns the directory in which to run the executable file. - - - The directory in which to run the executable file, or a null reference (Nothing in Visual Basic) if the executable file should be run in the current directory. - - - - - Gets or sets the working directory. - - The working directory. - - The directory in which to run the executable file, or a null reference (Nothing in Visual Basic) if the executable file should be run in the current directory. - - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - Creates a NuGet package based on the specified nuspec or project file. - - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - The location of the nuspec or project file to create a package. - - - - - Specifies the directory for the created NuGet package. - - - - - Overrides the version number from the nuspec file. - - - - - The base path of the files defined in the nuspec file. - - - - - Shows verbose output for package building. - - true if verbose; otherwise, false. - - - - Determines if a package containing sources and symbols should be created. When specified with a nuspec, - creates a regular NuGet package file and the corresponding symbols package. - - - true if symbols; otherwise, false. - - - - - Pushes a package to the server and optionally publishes it. - - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - The path to the package to push the package to the server. - - - - - The API key to use for push to the server. - - - - - Specifies the server URL. - - - - - Specifies if the package should be created and uploaded to the server but not published to the server. False by default. - - - true if create only; otherwise, false. - - - - - Creates a relative path from one file - or folder to another. - - - Contains the directory that defines the - start of the relative path. - - - Contains the path that defines the - endpoint of the relative path. - - - The relative path from the start - directory to the end path. - - - Thrown if or are null. - - - - - Compiles regular expressions and saves them to disk in an assembly. - - - - When defining the regular expressions in an MSBuild project file, the ItemGroup - item must have a metadata tag called 'Pattern' that is the actually regular expression. - Other optional metadata tags are the following. - - - Metadata Tags - Description - - - Pattern - The actually regular expression pattern to be compiled. (Required) - - - Options - The RegexOptions for the expression. - - - Namespace - The class namespace for the compile class. - - - IsPublic - A flag if the generated expression should be public. - - - - - Creates an assembly with the compiled regular expressions. - - - - \G[^<]+ - RegexOptions.Singleline | RegexOptions.Multiline - - - \G<%--(([^-]*)-)*?-%> - RegexOptions.Singleline | RegexOptions.Multiline - - - \G<%(?![@%])(?<code>.*?)%> - RegexOptions.Singleline | RegexOptions.Multiline - MSBuild.Community.RegularExpressions - - - - - - -]]> - - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets or sets the name of the assembly to be created by the regex compiler. - - The name of the assembly. - - - - Gets or sets the assembly title. - - The assembly title. - - - - Gets or sets the assembly description. - - The assembly description. - - - - Gets or sets the assembly company. - - The assembly company. - - - - Gets or sets the assembly product. - - The assembly product. - - - - Gets or sets the assembly copyright. - - The assembly copyright. - - - - Gets or sets the assembly culture. - - The assembly culture. - - - - Gets or sets the assembly version. - - The assembly version. - - - - Gets or sets the assembly file version. - - The assembly file version. - - - - Gets or sets the assembly informational version. - - The assembly informational version. - - - - Gets or sets the assembly key file. - - The assembly key file. - - - - Gets or sets the directory where the assembly will be saved. - - The output directory. - - - - Gets or sets the output file. - - The output file. - - - - Gets or sets the regular expressions. - - The regular expressions. - - - - Gets or sets the file defining the regular expressions. - - The regular expressions file. - - - - Gets or sets a value indicating whether the default value is public for regular expression instances. - - true if regular expression instance is public; otherwise, false. - - - - Gets or sets the default namespace for regular expression instances. - - The namespace for regular expression instances. - - - - Gets or sets the default regular expression options. - - The default regular expression options. - - - - BuildAssembler task for Sandcastle. - - - - - A base class for Sandcastle Tools, - - - - - Initializes a new instance of the class. - - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Logs the starting point of the run to all registered loggers. - - A descriptive message to provide loggers, usually the command line and switches. - - - - Logs the events from text output. - - The single line. - The message importance. - - - - Gets or sets the sandcastle enviroment. - - The sandcastle enviroment. - - - - Gets or sets the enviroment variables. - - The enviroment variables. - - - - Gets or sets the sandcastle install root directory. - - The sandcastle root directory. - - - - Gets or sets a value indicating whether no info messages will be output. - - true if no info messages; otherwise, false. - - - - Gets or sets a value indicating whether no warning messages will be output. - - true if no warning messages; otherwise, false. - - - - Gets the with which to log errors. - - - The with which to log errors. - - - - Gets the override value of the PATH environment variable. - - - The override value of the PATH environment variable. - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - Gets or sets the configuration file. - - The configuration file. - - - - Gets or sets the manifest file. - - The manifest file. - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - ChmBuilder task for Sandcastle. - - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - Gets or sets the HTML directory. - - The HTML directory. - - - - Gets or sets the name of the project. - - The name of the project. - - - - Gets or sets the toc file. - - The toc file. - - - - Gets or sets the output file. - - The output file. - - - - Gets or sets a value indicating whether this is metadata. - - true if metadata; otherwise, false. - - - - Gets or sets the language id. - - The language id. - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - DBCSFix task for Sandcastle. - - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - Gets or sets the CHM directory. - - The CHM directory. - - - - Gets or sets the language id. - - The language id. - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - MRefBuilder task for Sandcastle. - - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - Gets or sets the output file. - - The output file. - - - - Gets or sets the config file. - - The config file. - - - - Gets or sets the references. - - The references. - - - - Gets or sets the assemblies. - - The assemblies. - - - - Gets or sets a value indicating whether to include internal members. - - true to include internal; otherwise, false. - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - The Sandcastle task. - - Create the Html Help for MSBuild Community Task project. - - ]]> - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets or sets the sandcastle install root directory. - - The sandcastle root directory. - - - - Gets or sets the working directory. - - The working directory. - - - - Gets or sets the html help topic style. - - The html help topic style. - - The styles supported are hana, prototype and vs2005. - The default style is vs2005. - - - - - Gets or sets a value indicating whether working directory is cleaned. - - true if clean; otherwise, false. - - - - Gets or sets the references. - - The references. - - - - Gets or sets the assemblies. - - The assemblies. - - - - Gets or sets the comments. - - The comments. - - - - Gets or sets the build assembler config file. - - The build assembler config. - - - - Gets or sets the name of the CHM. - - The name of the CHM. - - - - Gets or sets the language id. - - The language id. - - - - Gets or sets a value indicating a Html Help 2x project will be created. - - The name of the Html Help 2x project. - - - - Gets or sets a value indicating whether no info messages will be output. - - true if no info messages; otherwise, false. - - - - Gets or sets a value indicating whether no warning messages will be output. - - true if no warning messages; otherwise, false. - - - - A class representing the sandcastle enviroment. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The sandcastle root. - - - - Gets or sets the sandcastle root. - - The sandcastle root. - - - - Gets or sets the tools directory. - - The tools directory. - - - - Gets or sets the transforms directory. - - The transforms directory. - - - - Gets or sets the presentation directory. - - The presentation directory. - - - - XslTransform task for Sandcastle. - - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - Gets or sets the output file. - - The output file. - - - - Gets or sets the XSLT files. - - The XSLT files. - - - - Gets or sets the XML files. - - The XML files. - - - - Gets or sets the arguments. - - The arguments. - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - The contract for a service that will provide access to the file system. - - - - - - Determines whether the specified file exists. - - The path of the file to check. - True if the file exists on the filesystem. - - - - Returns the contents of a file. - - The path of the file to read. - The text with the specified file. - - - - Writes text to a file. - - The path of the file to write. - The text to write to the file. - - - - Provides access to the file system. - - - - - - Determines whether the specified file exists. - - The path of the file to check. - True if the file exists on the filesystem. - - - - Returns the contents of a file. - - The path of the file to read. - The text with the specified file. - - - - Writes text to a file. - - The path of the file to write. - The text to write to the file. - - - - The list of the commands available to the GacUtil Task - - - - Install the list of assemblies into the GAC. - - - Uninstall the list of assembly names from the GAC. - - - - MSBuild task to install and uninstall assemblies into the GAC - - Install a dll into the GAC. - - ]]> - - Uninstall a dll from the GAC. - - ]]> - - - - - Runs the executable file with the specified task parameters. - - - true if the task runs successfully; otherwise, false. - - - - - Gets or sets the command. - - The command. - - - - - Gets or sets the related file extensions to copy when is true. - - The related file extensions. - - The default extensions are .pdb and .xml. - - - - - Gets or sets a value indicating whether related files are included when installing in GAC. - - true if related files are included when installing in GAC; otherwise, false. - - Setting IncludeRelatedFiles to true will copy the pdb and xml files from the same folder as the - assembly to the location in the GAC that the assembly was installed to. This is useful in some - debugging scenarios were you need to debug assemblies that are GAC'd. - - - - - Gets or sets a value indicating whether warning messages are output. - - true to not log warning messages; otherwise, false. - - - - Gets or sets a value indicating whether to force reinstall of an assembly. - - true if force; otherwise, false. - - - - Gets or sets the assembly name or file. - - The assembly name or file. - - When the command is install, Assemblies should be a file path to the assembly - to install in the GAC. When command is uninstall, Assemblies should be a - the full name of the assembly to uninstall. - - - - - Gets the installed assembly paths. - - The installed paths. - - - - Gets the installed assembly names. - - The installed names. - - - - Gets the number of assemblies successfully installed/uninstalled. - - The number successful assemblies. - - - - Gets the number of assemblies that failed to installed/uninstalled. - - The number failed assemblies. - - - - Gets the number of assemblies that were skipped during installed/uninstalled. - - The number of skipped assemblies. - - - - Compresses JavaScript source by removing comments and unnecessary - whitespace. It typically reduces the size of the script by half, - resulting in faster downloads and code that is harder to read. - - - This task does not change the behavior of the program that it is - compressing. The resulting code will be harder to debug as well as - harder to read. - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets or sets the files to source-compress. - - - - - Encoding to use to read and write files. - - - - - Gets the files that were successfully source-compressed. - - - - - Defines a database host within the Oracle TNSNAMES.ORA file. - - Add an entry to the system default TNSNAMES.ORA file and update any entry that already exists: - ]]> - - - Add an entry to a specific file and fail if the entry already exists: - ]]> - - - - - - Creates a new instance of the AddTnsName task using dependency injection. - - A service that provides access to the Windows registry. - A service that provides access to the file system. - - - - Creates a new instance of the AddTnsName task using the default system services. - - - - - When overridden in a derived class, executes the task. - - - - true if the task successfully executed; otherwise, false. - - - - - Determines which TNSNAMES.ORA file to update based on task input and the current system environment. - - The path of the TNSNAMES.ORA file that will be used by the task. - - - - - The path to a specific TNSNAMES.ORA file to update. - - If not specified, the default is %ORACLE_HOME%\network\admin\tnsnames.ora - - - - The contents of the TNSNAMES.ORA file before any changes are made. - - - - - The path to the TNSNAMES.ORA that was used by task. - - - - - The name of the host entry to add. - - To be properly recognized by Oracle, the value must contain a period, followed by a suffix. For example: mydatabase.world - - - - The contents of the TNSNAMES.ORA file after the task executes. - - - - - The definition of the host entry to add. - - To be properly recognized by Oracle, the value must be surrounded by parentheses. - - - - When true, the task will update an existing entry with . - If false, the task will fail if already exists. - - - - - Contains information about a TNS definition - - - - - - Creates a new instance of a TnsEntry - - The position of the entry within a TNSNAMES.ORA file - The length of the entry definition within the TNSNAMES.ORA file - - - - The position of the entry within a TNSNAMES.ORA file - - - - - The length of the entry definition within the TNSNAMES.ORA file - - - - - Locates host entries within a TNSNAMES.ORA file - - - - - - Initializes a new instance of the parser using the contents of a TNSNAMES.ORA file. - - - - - - Locates a host entry by its name. - - The name of the entry to find. - A which contains information about the location of the entry within the file. - - - - Task wrapping the Window Resource Kit Robocopy.exe command. - - Deploy website to web server. - - ]]> - - - - - Handles execution errors raised by the executable file. - - - true if the method runs successfully; otherwise, false. - - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Logs the starting point of the run to all registered loggers. - - A descriptive message to provide loggers, usually the command line and switches. - - - - Source directory - - - You can use drive:\path or \\server\share\path - - - - - Names of files to act upon. - - - You can use wildcard characters (? and *). If no - files are listed, Robocopy defaults to all files (*.*). - - - - - Destination directory. - - - You can use drive:\path or \\server\share\path - - - - - /S Copies subdirectories (excluding empty ones). - - - - - /E Copies all subdirectories (including empty ones). - - - - - /Z Copies files in restartable mode (that is, restarts the copy process from the point of failure). - - - - - /B Copies files in Backup mode (Backup copies are not restartable, but can copy some files that restartable mode cannot). - - - - - /COPY:copyflags Copies the file information specified by copyflags. - - - D – file Data, S – file Security (NTFS ACLs), A – file Attributes, - O – file Ownership information, T – file Timestamps, U – file Auditing infomation. - - - - - /COPYALL Copies Everything. Equivalent to /COPY:DATSOU. - - - - - /NOCOPY Copies Nothing. Can be useful with /PURGE. - - - - - /SEC Copies NTFS security information. (Source and destination volumes must both be NTFS). Equivalent to /COPY:DATS. - - - - - /MOV Moves files (that is, deletes source files after copying). - - - - - /MOVE Moves files and directories (that is, deletes source files and directories after copying). - - - - - /PURGE Deletes destination files and directories that no longer exist in the source. - - - - - /MIR Mirrors a directory tree (equivalent to running both /E and /PURGE). - - - - - /CREATE Creates a directory tree structure containing zero-length files only (that is, no file data is copied). - - - - - /FAT Creates destination files using only 8.3 FAT file names. - - - - - /FFT Assume FAT File Times (2-second granularity). - - - - - /IA:{R|A|S|H|C|N|E|T|O} Includes files with the specified attributes. - - - The following file attributes can be acted upon: - R – Read only, A – Archive, S – System, H – Hidden, - C – Compressed, N – Not content indexed, E – Encrypted, - T – Temporary, O - Offline - - - - - /XA:{R|A|S|H|C|N|E|T|O} Excludes files with the specified attributes. - - - The following file attributes can be acted upon: - R – Read only, A – Archive, S – System, H – Hidden, - C – Compressed, N – Not content indexed, E – Encrypted, - T – Temporary, O - Offline - - - - - /A Copies only files with the archive attribute set. - - - - - /M Copies only files with the archive attribute set and then resets (turns off) the archive attribute in the source files. - - - - - /XJ Excludes Junction points. - - - - - /XF file [file] Excludes files with the specified names, paths, or wildcard characters. - - - - - /XD dir [dir] Excludes directories with the specified names, paths, or wildcard characters. - - - - - /V Produces verbose output (including skipped files). - - - - - /NFL Turns off logging of file names. File names are still shown, however, if file copy errors occur. - - - - - /NDL Turns off logging of directory names. Full file pathnames (as opposed to simple file names) will be shown if /NDL is used. - - - - - /NJH Turns of logging of the job header. - - - - - /NJS Turns off logging of the job summary. - - - - - /NP Turns off copy progress indicator (% copied). - - - - - /LOG:file Redirects output to the specified file, overwriting the file if it already exists. - - - - - /LOG+:file Redirects output to the specified file, appending it to the file if it already exists. - - - - - Manually entered options. - - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - Gets the with which to log errors. - - - The with which to log errors. - - - - A task to play a sound from a .wav file path or URL. - - - You must specify either - a file or URL (), - a file relative to the (), - or a file within the folder (). - - To play the windows XP startup sound, use - - ]]> - - - To play a wav file from the "MyMusic" folder, use - - ]]> - - - - - - Loads the .wav file given by - and plays the sound using a new thread. - - - Returns if the .wav file can successfully be played; - otherwise, returns . - - - - - Gets or sets the file path or URL of the .wav file to load. - - - - - Sets the file path of the .wav file to load - as a relative path to . - - - For example, on a Windows XP platform, you can call - ]]> - - - - - Sets the file path of the .wav file to load - as a relative path to . - - - - - Gets or sets the time, in milliseconds, in which the .wav file must load. - - The number of milliseconds to wait. The default is 10000 (10 seconds). - - After this time has expired, the loading is canceled and the task execution fails. - - - - - Gets or sets a value indicating whether to play the sound synchronously. - - - if playing the sound using the caller's thread (default); - otherwise, if playing the sound using a new thread. - - - - - A base class that has a file. - - - - - Initializes a new instance of the class. - - Name of the file. - - - - Initializes a new instance of the class. - - The file info. - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Performs an implicit conversion from to . - - The output file. - The result of the conversion. - - - - Gets or sets the file. - - The file. - - - - Commands for the tasks. - - - - - Read stream from pdb symbol file. - - - - - Write stream to pdb symbol file. - - - - - A task for the pdbstr from source server. - - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Gets or sets the PDB file. - - The PDB file. - - - - Gets or sets the stream file. - - The stream file. - - - - Gets or sets the name of the stream. - - The name of the stream. - - - - Gets or sets the command. - - The command. - - - - - Gets the name of the executable file to run. - - - - The name of the executable file to run. - - - - - A class representing a source file. - - - - - Initializes a new instance of the class. - - Name of the file. - - - - Initializes a new instance of the class. - - The file info. - - - - Creates the source string. - - The format. - - - - - Gets or sets the properties. - - The properties. - - - - Gets or sets a value indicating whether this instance is resolved. - - - true if this instance is resolved; otherwise, false. - - - - - A base class for source indexing a pdb symbol file. - - - - - - - - - - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Indexes the symbol file. - - The symbol file task item. - true if index successfully; otherwise false. - - - - Creates an instance of from the symbol file task item and add the source file list to it. - - The symbol file task item. - An instance of or null if there was an error. - - - - Adds the source properties to the symbol file. - - The symbol file to add the source properties to. - true if successful; otherwise false. - - - - Creates the source index file. - - The symbol file to create the index file from. - The source index file. - true if successful; otherwise false. - - - - Writes the source index file to the symbol file. - - The symbol file. - The source index file. - true if successful; otherwise false. - - - - Copies the build engine to the task. - - The task. - - - - Gets or sets the symbol files to have to source index added. - - The symbol files. - - - - Gets or sets the source server SDK path. - - The source server SDK path. - - - - Gets or sets the name of the source server. - - The name of the source server. - - - - Gets or sets the source command format. The SRCSRVCMD environment variable. - - The source command format. - - Describes how to build the command to extract the file from source control. - This includes the name of the executable file and its command-line parameters. - See srcsrv.doc for full documentation on SRCSRVCMD. - - - - - Gets or sets the source target format. The SRCSRVTRG environment variable. - - The source target format. - - Describes how to build the target path for the extracted file. - See srcsrv.doc for full documentation on SRCSRVTRG. - - - - - A task for the srctool from source server. - - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - Parses a single line of text to identify any errors or warnings in canonical format. - - A single line of text for the method to parse. - A value of that indicates the importance level with which to log the message. - - - - Handles execution errors raised by the executable file. - - - true if the method runs successfully; otherwise, false. - - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Logs the starting point of the run to all registered loggers. - - A descriptive message to provide loggers, usually the command line and switches. - - - - Gets or sets the PDB file. - - The PDB file. - - - - Gets or sets a value indicating whether to dumps raw source data from the PDB. The -r switch. - - true if source only; otherwise, false. - - - - Gets or sets the filter to only source files that match this regular expression. The -l switch. - - The filter regular expression. - - - - Gets or sets a value indicating whether to extracts the files, instead of simply listing them. The -x switch. - - true if extract; otherwise, false. - - - - Gets or sets the directory to extract to. The -d switch. - - The extract directory. - - - - Gets or sets a value indicating whether to get the count of indexed files. The -c switch. - - true if count only; otherwise, false. - - - - Gets or sets the number of source files. - - The number of source files. - - - - Gets the source files. Populated when is true. - - The source files. - - - - Gets the extracted files. Populated when is true. - - The extracted files. - - - - Gets the name of the executable file to run. - - - - The name of the executable file to run. - - - - - Gets the with which to log errors. - - - The with which to log errors. - - - - A subversion source index task. - - - - - Initializes a new instance of the class. - - - - - Adds the source properties to the symbol file. - - The symbol file to add the source properties to. - - true if successful; otherwise false. - - - - - Creates the source index file. - - The symbol file to create the index file from. - The source index file. - - true if successful; otherwise false. - - - - - A class representing a symbol file. - - - - - Initializes a new instance of the class. - - Name of the file. - - - - Initializes a new instance of the class. - - The file info. - - - - Adds the source files. - - The files. - - - - Gets the source files. - - The source files. - - - - Gets or sets a value indicating whether this instance is indexed. - - - true if this instance is indexed; otherwise, false. - - - - - The SqlPubWiz commands - - - - - Scripts a local database to one or more files - - - - - Publishes a local database to a web service provided by a hoster. - - - - - The Database Publishing Wizard enables the deployment of - SQL Server databases (both schema and data) into a shared - hosting environment. - - Generate the database script for Northwind on localhost. - - ]]> - - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - Logs the starting point of the run to all registered loggers. - - A descriptive message to provide loggers, usually the command line and switches. - - - - Gets or sets the database publishing command. - - The database publishing command. - - Use either script or publish. Use script to script a local - database to a file on the local computer. Use publish to - transfer database objects directly to a hosted database via - a web service. script and publish enable some of the same - options and switches. Some options and switches are only - enabled only by one of these verbs. - - - - - Gets or sets the full connection string to the local database. - - The connection string. - - Provides a full connection string to connect to the local - database. This connection string encapsulates all connection - options to the server. Incompatible with , - or, . - - - - - Gets or sets the name of the local database to be scripted. - - The name of the database to be scripted. - - - - Gets or sets the SQL Server user name to use for connection - to the source database. - - The SQL Server user name. - - Specifies the SQL Server User name to use for connection - to the source database. Requires . - Incompatible with . - - - - - Gets or sets the password to use for connection - to the source database. - - The password. - - Specifies the password to use for connection to the source - database. Requires . - Incompatible with . - - - - - Gets or sets the name or IP address for the local database connection. - - The name or IP address of server. - - Specifies the name or IP address for the local database connection. - The default is localhost. Incompatible with . - - - - - Gets or sets the full file path for the script file generated. - - The full file path. - - Use only with script. Specifies the full file path for the script - file generated by the sqlpubwiz. - - - - - Gets or sets a value indicating whether the schema, - but not the data, should be scripted. - - - true if only the schema should be scripted; - otherwise, false. - - - Specifies that the schema, but not the data, should be - scripted. Incompatible with . - If neither nor - are specified, both the schema and data are scripted. - - - - - Gets or sets a value indicating whether the data but - not the schema should be scripted. - - - true if only the data is scripted; - otherwise, false. - - - Specifies that the data but not the schema should be - scripted. Incompatible with - or . If neither - nor are specified, both the schema - and data are scripted. - - - - - Gets or sets the target server the script should target. - - The target server the script should target. - - Specifies that the script to be generated should target - a SQL Server 2000 or SQL Server 2005 instance. - The default is SQL Server 2005. - - - - - Gets or sets a value indicating whether objects will - not be qualified with a schema. - - - true if objects will not be schema qualified; - otherwise, false. - - - - - Gets or sets a value indicating whether the produced - script should not drop pre-existing objects. - - - true if pre-existing objects should not be dropped; - otherwise, false. - - - - - Gets or sets a value indicating output message suppression. - - true to suppress messages; otherwise, false. - - - - Gets or sets the friendly name of previously - configured hosting Web service. - - The name of the hoster. - - - - Gets or sets the configuration of the hosting Web service endpoint. - - The web service address. - - - - Gets or sets the username on the hosting Web service endpoint. - - The service username. - - - - Gets or sets the password for the remote Web service endpoint. - - The service password. - - - - Gets or sets the database name to publish to on the remote server. - - The service database server. - - - - Gets or sets the remote database server name. - - The service database. - - - - Gets or sets a value indicating whether the publish operation - should not be executed within a single transaction. - - true to not publish in a single transaction; otherwise, false. - - Specifies that the publish operation should not be executed - within a single transaction. This reduces logging overhead - on the target server, but if the publish is interrupted, the - target database may be left in a partially populated state. - - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - Gets the with which to log errors. - - - The with which to log errors. - - - - Copy a file or folder in Subversion - - - This is most useful for automatically tagging your source code during a build. - You can create a tag by copying a path from one server location to another. - - Create a tag of the trunk with the current Cruise Control build number: - - - - ]]> - - - - - Subversion client base class - - - - - Generates the SVN command. - - - - - - Generates the SVN arguments. - - - - - - Runs the exectuable file with the specified task parameters. - - - true if the task runs successfully; otherwise, false. - - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - Indicates whether all task paratmeters are valid. - - - true if all task parameters are valid; otherwise, false. - - - - - Logs the events from text output. - - The single line. - The message importance. - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Finds the tool path. - - Name of the tool. - - - - - Logs the starting point of the run to all registered loggers. - - A descriptive message to provide loggers, usually the command line and switches. - - - - Gets or sets the command. - - The command. - - - - Gets or sets the arguments. - - The arguments. - - - - Gets or sets the username. - - The username. - - - - Gets or sets the password. - - The password. - - - - Gets or sets the verbose. - - The verbose. - - - - Gets or sets the force. - - The force. - - - - Gets or sets the message. - - The message. - - - - Gets or sets the message file. - - The message file. - - Uses the contents of the named file for the specified - subcommand, though different subcommands do different - things with this content. - - - - Gets or sets the repository path. - - The repository path. - - - - Gets or sets the local path. - - The local path. - - - - Gets or sets the target file. - - The target file. - - Tells Subversion to get the list of files that you wish to operate on from - the filename that you provide instead of listing all the files on the command line. - - - - - Gets or sets the targets. - - The targets. - - - - Gets or sets a value indicating the command is non interactive]. - - true if non interactive; otherwise, false. - - - - Gets or sets a value indicating no auth cache. - - true if no auth cache; otherwise, false. - - - - Gets or sets a value indicating whether to trust the server cert. - - true to trust the server cert; otherwise, false. - - - - Gets or sets a value indicating the output is XML. - - true to output in XML; otherwise, false. - - - - Gets or sets the revision. - - The revision. - - - - Gets the output of SVN command-line client. - - - - - Gets the error output of SVN command-line client. - - - - - Gets the with which to log errors. - - - The with which to log errors. - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - Initializes a new instance of the class. - - - - - Generates the SVN command. - - - - - - Indicates whether all task paratmeters are valid. - - - true if all task parameters are valid; otherwise, false. - - - - - The path of the source file or folder that should be copied - - - - - The path to which the SourcePath should be copied - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Subversion status command. - - - - - Creates an instance of SvnStatus. - - - - - Runs the exectuable file with the specified task parameters. - - - true if the task runs successfully; otherwise, false. - - - - - Gets or sets the entries. - - - - - Commands for the SymStore tasks. - - - - - Add to the symbol server store. - - - - - Query the symbol server store. - - - - - Delete from the symbol serer store. - - - - - Task that wraps the Symbol Server SymStore.exe application. - - - - - Initializes a new instance of the class. - - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Logs the starting point of the run to all registered loggers. - - A descriptive message to provide loggers, usually the command line and switches. - - - - Gets or sets the command. - - The command. - - - - - Gets or sets a value indicating SymStore will append new indexing information to an existing index file. - - true if append; otherwise, false. - - - - Gets or sets the comment for the transaction. - - The comment for the transaction. - - - - Gets or sets a value indicating SymStore will create a compressed version of each file copied to the symbol store instead of using an uncompressed copy of the file. - - true if compress; otherwise, false. - - - - Gets or sets a log file to be used for command output. If this is not included, transaction information and other output is sent to stdout. - - The log file to be used for command output. - - - - Gets or sets the network path of files or directories to add. - - The network path of files or directories to add. - - - - Gets or sets the server and share where the symbol files were originally stored. - - The server and share where the symbol files were originally stored. - - - - Gets or sets the transaction ID string. - - The transaction ID string. - - - - Gets or sets a value indicating whether the file will be in a local directory rather than a network path. - - true if local; otherwise, false. - - - - Gets or sets a value indicating whether SymStore will display verbose output. - - true if verbose; otherwise, false. - - - - Gets or sets a value indicating whether SymStore will store a pointer to the file, rather than the file itself. - - true if pointer; otherwise, false. - - - - Gets or sets a value indicating whether SymStore will add files or directories recursively. - - true if recursive; otherwise, false. - - - - Gets or sets the root directory for the symbol store. - - The root directory for the symbol store. - - - - Gets or sets the name of the product. - - The name of the product. - - - - Gets or sets the version of the product. - - The version of the product. - - - - Gets or sets the message to be added to each file. - - The message to be added to each file. - - - - Gets or sets a value indicating whether the paths in the file pointers will be relative. - - true if relative; otherwise, false. - - - - Gets or sets a value indicating whether to omit the creation of reference pointer files for the files and pointers being stored. - - true to omit the creation of reference pointer; otherwise, false. - - - - Gets or sets the index file. Causes SymStore not to store the actual symbol files. Instead, SymStore records information in the IndexFile that will enable SymStore to access the symbol files at a later time. - - The write index file. - - - - Gets or sets the index file. Causes SymStore to read the data from a file created with WriteIndexFile. - - The read index file. - - - - Gets the name of the executable file to run. - - - - The name of the executable file to run. - - - - - Gets the with which to log errors. - - - The with which to log errors. - - - - A task for Team Foundation Server version control. - - - - - Generates the command. - - The . - - - - Generates the arguments. - - The . - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Logs the starting point of the run to all registered loggers. - - A descriptive message to provide loggers, usually the command line and switches. - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - Parses a single line of text to identify any errors or warnings in canonical format. - - A single line of text for the method to parse. - A value of that indicates the importance level with which to log the message. - - - - Indicates whether all task paratmeters are valid. - - - true if all task parameters are valid; otherwise, false. - - - - - Gets or sets the Team Foundation Server command. - - - - - Gets or sets the files. - - - - - Gets or sets a value indicating whether this is recursive. - - - true if recursive; otherwise, false. - - - - - Gets or sets a value indicating whether this is all. - - - true if all; otherwise, false. - - - - - Gets or sets a value indicating whether this is overwrite. - - - true if overwrite; otherwise, false. - - - - - Gets or sets a value indicating whether this is override. - - - true if override; otherwise, false. - - - - - Gets or sets a value indicating whether this is force. - - - true if force; otherwise, false. - - - - - Gets or sets a value indicating whether this is preview. - - - true if preview; otherwise, false. - - - - - Gets or sets a value indicating whether this is remap. - - - true if remap; otherwise, false. - - - - - Gets or sets a value indicating whether this is silent. - - - true if silent; otherwise, false. - - - - - Gets or sets a value indicating whether this is saved. - - - true if saved; otherwise, false. - - - - - Gets or sets a value indicating whether this is validate. - - - true if validate; otherwise, false. - - - - - Gets or sets a value indicating whether this is bypass. - - - true if bypass; otherwise, false. - - - - - Gets or sets the comment. - - - - - Gets or sets the version. - - - - - Gets or sets the lock. - - - - - Gets or sets the type. - - - - - Gets or sets the author. - - - - - Gets or sets the notes. - - - - - Gets or sets the format. - - - - - Gets or sets the collection. - - - - - Gets or sets the name of the user. - - - - - Gets or sets the password. - - - - - Gets or sets the name of the workspace. - - - - - Gets or sets the workspace owner. - - - - - Gets or sets the name of the shelve set. - - - - - Gets or sets the shelve set owner. - - - - - Gets or sets the changeset. - - - - - Gets or sets the server path. - - - - - Gets the with which to log errors. - - - The with which to log errors. - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - - The contract for a service that will provide access to the registry. - - - - - - Returns the names of the subkeys under the provided key. - - The hive where is located. - The key to search. - A list of subkeys. - - - - Returns the value of an entry in the registry. - - The key of the registry entry that contains - The name of the value to return. - The value of the registry entry. - - - - Provides access to the Windows registry. - - - - - - Returns the names of the subkeys under the provided key. - - The hive where is located. - The key to search. - A list of subkeys. - - - - Returns the value of an entry in the registry. - - The key of the registry entry that contains - The name of the value to return. - The value of the registry entry. - - - - Provides information about the build user. - - Get build user information. - - - - - - - ]]> - - - The following output parameters are set only if information about the build user can be retrieved - from the Active Directory if one exists: - - FirstName - LastName - MiddleInitial - FullName - Email - Phone - - - - - - Initializes a new instance of the class. - - - - - Executes the task. - - - if the task ran successfully; otherwise . - - - - - Gets the user name of the build user. - - - - - Gets the domain name of the build user. - - - - - Gets the first name of the build user. - - - - - Gets the last name of the build user. - - - - - Gets the middle initial of the build user. - - - - - Gets the email address of the build user. - - - - - Gets the phone number of the build user. - - - - - Gets the username and domain name of the build user in "[Domain name]\[User name]" format. - - - - - Gets the full name of the build user in "[First name] [Middle initial]. [Last name]" format . - - - - - Performs multiple updates on an XML file - - - XmlMassUpdate allows to to specify multiple changes to make to an XML file (the . By default, the changes are applied to the , but you can create a new file by providing the attribute. The change instructions are specified using XML in the . If the does not mirror the structure of the exactly, you can specify the and XPath expressions which determine how the files should be mapped to each other. - - Any element within the will find the corresponding element in the . If it does not exist, it will be created with all of its attributes. If it does exist, the attributes will be added or updated as specified. - - - Any attribute declared within the will not be copied to the modified file. Valid attributes are key and action. The key attribute allows you to define an attribute to use as the identifying attribute when you only want to update a single element, and multiple elements with the same name exist. You can also use the action="remove" attribute to specify that an element should be deleted instead of updated. - - - - These examples will demonstrate how to make multiple updates to a XML file named web.config. It looks like: - - - - - - - - - - - - - - - ]]> - - - - You can update the file using instructions from an external file (specified as the ): - - ]]> - - The is named changes.xml and contains: - - - - - - - - ]]> - - - You can also provide the update instructions within the MSBuild project file itself. It takes advantage of the MSBuild ProjectExtensions element which allows you to add XML to a project file that will be ignored by the MSBuild engine. This example also demonstrates how to use : - - - - - - - - - - ]]> - - - The following example demonstrates how to deal with "keyed" elements. When you need to update an element, and multiple elements exist with the same name, it must be be differentied by one of its attributes. You designate the differentiating attribute using the "key" attribute declared in the . - If an element matching the keyed attribute is not found, a new element will be created (DefaultSort in the example). This example also demonstrates creating a new file with the merged changes instead of modifying the original file. - - ]]> - - Using a changes.xml file with the following contents: - - - - - - - ]]> - - - Use a changes.xml file with the following contents to demonstrate how to remove an element from the updated file: - - - - - - - ]]> - - - You can also specify the changes to apply from within the target document. By making use of the property, you can store multiple sets of changes to apply based on runtime conditions. - Consider the following source web.config file: - - - - - - - - - - - - - - - - - - - - - - - - ]]> - - You could use the following task definition, which relies on a property "TargetEnvironment" to determine which set of changes to apply: - - ]]> - - You will need to provide a value of "test" or "prod" to the TargetEnvironment property. The property can be defined in a PropertyGroup section of the MSBuild file, or passed as a command-line parameter. - - - - - - - - - When overridden in a derived class, executes the task. - - - True if the task successfully executed; otherwise, false. - - - - - Returns as an . - - This method is not intended for use by consumers. It is exposed for testing purposes. - - - - - - Returns as an . - - This method is not intended for use by consumers. It is exposed for testing purposes. - - - - - - Creates from the specified - - The XML to save to a file - This method is not intended for use by consumers. It is exposed for testing purposes. - - - - - - The original file whose content is to be updated - - This task is currently under construction and not necessarily feature complete. - - - - The file containing the list of updates to perform - - - - - The file created after performing the updates - - - - - The XPath expression used to locate the list of substitutions to perform - - When not specified, the default is the document root: / - When there is a set of elements with the same name, and you want to update - a single element which can be identified by one of its attributes, you need to include an attribute - named 'key' in the namespace urn:msbuildcommunitytasks-xmlmassupdate. The value of the - attribute is the name of the attribute that should be used as the unique identifier. - - - - The XPath expression identifying root node that substitions are relative to - - When not specified, the default is the document root: / - - - - A collection of prefix=namespace definitions used to query the XML documents - - - Defining multiple namespaces: - - -/>]]> - - - - - - The full path of the file containing content updated by the task - - - - - The full path of the file containing substitutions used by the task - - - - - The full path of the file containing the results of the task - - - - - The namespace used for XmlMassUpdate pre-defined attributes - - Evaluates to: urn:msbuildcommunitytasks-xmlmassupdate - Attributes decorated with this namespace are used to control how a substitutions element - or attribute is handled during the update. For example, the key attribute is used to identify the - attribute on an element that uniquely identifies the element in a set. - - - - Sets an application mapping for a filename extension on an existing web directory. - - Map the .axd extension to the lastest version of ASP.NET: - - ]]> - - Map GET requests to the .rss extension to a specific executable: - - ]]> - - - - - Base task for any IIS-related task. - - Stores the base logic for gathering the IIS version and server and port checking. This - base task also stores common properties for other related tasks. - - - - IIS version. - - - - - Gets the IIS version. - - The for IIS. - - - - - Gets the remote machine OS version. - - Returns a of the operating system. - - - - - Verifies that the IIS root exists based on the and . - - - - - - Verify that the IIS Website exists if it has been specified. - - DirectoryEntry that meets the IISWebServer schema - True if a site is found when specified. True if no site has been specified. - - - - Helper method for that verifies the server port exists. - - The site to verify the port. - Boolean value indicating the status of the port check. - - - - - Sets some of the protected properties for the Virtual Directory Creation Wizard. - - DirectoryEntry.Name where the Entry is an IISWebServer schema - - - - Gets or sets the name of the server. The default value is 'localhost'. - - The name of the server. - - - - Gets or sets host header. Used when you have more than one website in IIS that have the same port but different host headers. - - The name of the host header. - - - - Gets or sets the server port. - - The server port. - - - - Gets or sets the IIS server path. - - Is in the form 'IIS://localhost/W3SVC/1/Root'. - The IIS server path. - - - - Gets or sets the application path. - - Is in the form '/LM/W3SVC/1/Root'. - The application path. - - - - Gets or sets the IIS application pool path. - - Is in the form 'IIS://localhost/W3SVC/AppPools'. - The IIS application pool path. - - - - Gets or sets the username for the account the task will run under. This property - is needed if you specified a for a remote machine. - - The username of the account. - - - - Gets or sets the password for the account the task will run under. This property - is needed if you specified a for a remote machine. - - The password of the account. - - - - Defines the possible IIS versions supported by the task. - - - - - IIS version 4.x - - - - - IIS version 5.x - - - - - IIS version 6.x - - - - - Defines the possible application pool actions to be performed. - - - - - Recycles an application pool. - - - - - Stops and restarts the application pool. - - - - - Starts the application pool. - - - - - Stops the application pool. - - - - - Defines the current application pool state. - - - - - The application pool is starting. - - - - - The application pool has started. - - - - - The application pool is stopping. - - - - - The application pool has stopped. - - - - - When overridden in a derived class, executes the task. - - - True if the task successfully executed; otherwise, false. - - - - - Gets or sets the name of the virtual directory. - - The name of the virtual directory. - - - - The filename extension that will be mapped to an executable. - - - - - The full path to the executable used to respond to requests for a Uri ending with - - This property is required when is false (the default). - - - - Indicates whether should be mapped to the ASP.NET runtime. - - When true, is set to aspnet_isapi.dll - in the installation folder of the latest version of the .NET Framework. - - - - A comma-separated list of the HTTP verbs to include in the application mapping. - - The default behavior (when this property is empty or unspecified) is to map all verbs. - A semi-colon-separated list will also be recognized, allowing you to use an MSBuild Item. - - - - Set to true when you want the application to run in a directory without Execute permissions. - - - - - Set to true to instruct the Web server to verify the existence of the requested script file and to ensure that the requesting user has access permission for that script file. - - - - - Reads and modifies a web directory configuration setting. - - Display the file system path of the MyWeb web directory: - - - - - ]]> - - Set the default document for the MyWeb directory to Default.aspx: - - - ]]> - - - - - When overridden in a derived class, executes the task. - - - True if the task successfully executed; otherwise, false. - - - - - Gets or sets the name of the virtual directory. - - The name of the virtual directory. - - - - Gets or sets the configuration setting to read or modify. - - - - - Gets or sets the value of on the web directory - - - - - A wrapper for the ILMerge tool. - - - - The ILMerge tool itself must be installed separately. - It is available here. - - - The command line options "/wildcards" and "/lib" of ILMerge are not supported, - because MSBuild is in charge of expanding wildcards for item groups. - - - - This example merges two assemblies A.dll and B.dll into one: - - $(testDir)\ilmergetest.dll - $(testDir)\keypair.snk - $(testDir)\ExcludeTypes.txt - $(testDir)\ilmergetest.log - - - - - - - - - ]]> - - - - - Initializes a new instance of the class. - - - - - Gets the standard installation path of ILMerge.exe. - - - If ILMerge is not installed at its standard installation path, - provide its location to . - - Returns [ProgramFiles]\Microsoft\ILMerge.exe. - - - - Generates a string value containing the command line arguments - to pass directly to the executable file. - - - Returns a string value containing the command line arguments - to pass directly to the executable file. - - - - - Gets or sets the names of public types - to be renamed when they are duplicates. - - - Set to an empty item group to allow all public types to be renamed. - Don't provide this parameter if no duplicates of public types are allowed. - Corresponds to command line option "/allowDup". - The default value is null. - - - - - Gets or sets a value indicating whether to treat an assembly - with a zero PeKind flag - (this is the value of the field listed as .corflags in the Manifest) - as if it was ILonly. - - - Corresponds to command line option "/zeroPeKind". - The default value is false. - - - - - Gets or sets the attribute assembly - from whre to get all of the assembly-level attributes - such as Culture, Version, etc. - It will also be used to get the Win32 Resources from. - - - This property is mutually exclusive with . - - When not specified, then the Win32 Resources from the primary assembly - are copied over into the target assembly. - - Corresponds to command line option "/attr". - The default value is null. - - - - - Gets or sets a value indicating whether - to augment the list of input assemblies - to its "transitive closure". - - - - An assembly is considered part of the transitive closure if it is referenced, - either directly or indirectly, - from one of the originally specified input assemblies - and it has an external reference to one of the input assemblies, - or one of the assemblies that has such a reference. - - Corresponds to command line option "/closed". - The default value is false. - - - - - Gets or sets a value indicating whether - to copy the assembly level attributes - of each input assembly over into the target assembly. - - - - Any duplicate attribute overwrites a previously copied attribute. - The input assemblies are processed in the order they are specified. - - This parameter is mutually exclusive with . - Corresponds to command line option "/copyattrs". - The default value is false. - - - - - Gets or sets a value indicating whether - to preserve any .pdb files - that are found for the input assemblies - into a .pdb file for the target assembly. - - - Corresponds to command line option "/ndebug". - The default value is true. - - - - - Gets or sets a value indicating whether - the target assembly will be delay signed. - - - This property can be set only in conjunction with . - Corresponds to command line option "/delaysign". - The default value is false. - - - - - Gets or sets the file - that will be used to identify types - that are not to have their visibility modified. - - - - If an empty item group is provided, - then all types in any assembly other than the primary assembly are made non-public. - - Omit this parameter to prevent ILMerge from modifying the visibility of any types. - - The contents of the file should be one per line. - The regular expressions are matched against each type's full name, - e.g., System.Collections.IList. - If the match fails, it is tried again with the assembly name (surrounded by square brackets) - prepended to the type name. - Thus, the pattern \[A\].* excludes all types in assembly A from being made non-public. - The pattern N.T will match all types named T in the namespace named N - no matter what assembly they are defined in. - - Corresponds to command line option "/internalize". - The default value is null. - - - - - Gets or sets the input assemblies to merge. - - - - - Gets or sets a value indicating whether whether types in assemblies other than the primary assembly have their visibility modified. - - true if internalize; otherwise, false. - - This controls whether types in assemblies other than the primary assembly have - their visibility modified. When it is true, then all non-exempt types that are visible - outside of their assembly have their visibility modified so that they are not visible - from outside of the merged assembly. A type is exempt if its full name matches a line - from the ExcludeFile (Section 2.9) using the .NET regular expression engine. - Corresponds to command line option "/internalize". - The default value is false. - - - - - Gets or sets the .snk file - to sign the target assembly. - - - Can be used with . - Corresponds to command line option "/keyfile". - The default value is null. - - - - - Gets or sets a log file - to write log messages to. - - - - If an empty item group is provided, - then log messages are writte to . - - Corresponds to command line option "/log". - The default value is null. - - - - - Gets or sets the target assembly. - - - Corresponds to command line option "/out". - - - - - Gets or sets a value indicating whether - external assembly references in the manifest - of the target assembly will use public keys (false) - or public key tokens (true). - - - Corresponds to command line option "/publickeytokens". - The default value is false. - - - - - Gets or sets the directories to be used to search for input assemblies. - - The search directories. - - - - Gets or sets the .NET framework version for the target assembly. - - - Valid values are "v1", "v1.1", "v2". - Corresponds to the first part of command line option "/targetplatform". - The default value is null. - - - - - Gets or sets the directory in which mscorlib.dll is to be found. - - - Can only be used in conjunction with . - Corresponds to the second part of command line option "/targetplatform". - The default value is null. - - - - - Gets or sets the indicator - whether the target assembly is created as a library (Dll), - a console application (Exe) or as a Windows application (WinExe). - - - Corresponds to command line option "/target". - The default value is the same kind as that of the primary assembly. - - - - - Gets or sets the version number of the target assembly. - - - The parameter should look like 6.2.1.3. - Corresponds to command line option "/ver". - The default value is null. - - - - - Gets or sets a value indicating whether - to merge XML documentation files - into one for the target assembly. - - - Corresponds to command line option "/xmldocs". - The default value is false. - - - - - Gets the name of the executable file to run. - - - - - Gets the with which to log errors. - - - The with which to log errors. - - - - Gets the with which to log errors. - - - - The with which to log errors. - - - - - Installs assemblies. - - - Uses InstallUtil.exe to execute the - Install - method of - Installer - classes contained within specified assemblies. - - - Install multiple assemblies by specifying the file names: - - -]]> - - - Install an assembly using the assembly name. Also disable the log file by setting it to a single space: - - -]]> - - - You can easily chain an install to the result of a build: - - - - - -]]> - - - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Returns a string value containing the command line arguments - to pass directly to the executable file. - - - A string value containing the command line arguments to pass - directly to the executable file. - - - - - The assemblies to process, identified by their assembly name. - - - - - The assemblies to process, identified by their filename. - - - - - The file to write installation progress to. - - Set to a single space to disable logging to a file. - - If not specified, the default is to log to [assemblyname].installLog - - - - - - If an exception occurs at any point during installation, the call - stack will be printed to the log. - - - - - Determines whether assemblies are installed or uninstalled. - - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - Uninstalls assemblies. - - Uses InstallUtil.exe to execute the - Uninstall - method of - Installer - classes contained within specified assemblies. - - Uninstall multiple assemblies by specifying the file names: - - ]]> - - Unnstall an assembly using the assembly name. Also disable the log file by setting it to a single space: - - ]]> - - - - - Determines whether assemblies are installed or uninstalled. - - - - - Performs the modulo operation on numbers. - - - The modulo operation finds the remainder of the division of one number by another. - When the second number (modulus) is a fractional value, the result can be a fractional value. - - Equivalent to the % operator in C# or the Mod operator in Visual Basic. - - - Numbers evenly divide: - - - - - -]]> - - Above example will display: - 12 modulo 4 = 0 - - Division on the numbers produces a remainder: - - - - - -]]> - - Above example will display: - 14 modulo 4 = 2 - - Modulus is a fractional value: - - - - - -]]> - - Above example will display: - 12 modulo 3.5 = 1.5 - - - - - Math task base class - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Strings array to decimal array. - - The numbers. - - - - - Gets or sets the numbers to work with. - - The numbers. - - - - Gets or sets the result. - - The result. - - - - Gets or sets the numeric format. - - The numeric format. - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Displays a message on the console and waits for user input. - - It is important to note that the message is not written to the MSBuild logger, - it is always written to the console, no matter which logger is configured. - This task requires user input from the console. Do not use this task for projects - that will be executed unattended. It is recommended that you always add a Condtion so that - this task is only enabled when a custom property is set through the command line. - This will ensure that the other users do not attempt to execute the task in unattended mode. - - Pause the build if the interactive property is set: - - - - ]]> - - Obtain user input during the build: - (Note: in most cases, it is recommended that users instead provide custom values to your build through the /property argument of msbuild.exe) - - - - - ]]> - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - The message to display in the console. - - - - - The text entered at the console. - - - - - Base class for Regex tasks - Handles public properties for Input, Expression, Options and Output - - - - - Regex expression - - - - - Input, list of items to perform the regex on - - - - - Regex options as strings corresponding to the RegexOptions enum: - Compiled - CultureInvariant - ECMAScript - ExplicitCapture - IgnoreCase - IgnorePatternWhitespace - Multiline - None - RightToLeft - Singleline - - - - - - Results of the Regex transformation. - - - - - Options converted to RegexOptions enum - - - - - Task to filter an Input list with a Regex expression. - Output list contains items from Input list that matched given expression - - Matches from TestGroup those names ending in a, b or c - - - - - - - - - - - - - - - - - ]]> - - - - - Performs the Match task - - if the task ran successfully; - otherwise . - - - - Task to replace portions of strings within the Input list - Output list contains all the elements of the Input list after - performing the Regex Replace. - - - 1st example replaces first occurance of "foo." with empty string - 2nd example replaces occurance of "foo." after character 6 with "oop." string - - - - - - - - - - - - - - - - - - - - - - - ]]> - - - - - Performs the Replace task - - if the task ran successfully; - otherwise . - - - - String replacing matching expression strings in input list. - If left empty matches in the input list are removed (replaced with empty string) - - - - - Number of matches to allow on each input item. - -1 indicates to perform matches on all matches within input item - - - - - Position within the input item to start matching - - - - - Different ways to specify the assembly in a UsingTask element. - - - - - Assembly file name (Default): <UsingTask AssemblyFile="foo.dll" /> - - - - - Assembly location: <UsingTask AssemblyName="foo" /> - - - - - Assembly Name: <UsingTask AssemblyFile="bin\debug\foo.dll" /> - - - - - Assembly fully qualified name: <UsingTask AssemblyName="foo.dll,version ...." /> - - - - - A Task that generates a XSD schema of the tasks in an assembly. - - - Creates schema for MSBuild Community Task project - - ]]> - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets or sets the list of path to analyse. - - - - - Gets or sets the output path for the generated files. - - - - - Gets the list of path to the generated XSD schema. - - - - - Gets or sets a value indicating if the task list (using UsingTask) - has to be genereted. - - - - - Gets or sets a value indicating how the assembly is specified in the - UsingTask element. - - - - - - Gets or sets a value indicating wheter documentation should be ignored - even if available (Default is false). - - - - - Gets the path to the task list if it was generated. - - - - - Gets or sets a value indicating if the - MsBuild schema inclusing should be ignored - - - - - Gets or sets a list of included schemas - - - - - Retrieves the list of Projects contained within a Visual Studio Solution (.sln) file - - - Returns project name, GUID, and path information from test solution - - - - - - - - - - - - - - - ]]> - - - - - Perform task - - true on success - - - - A list of the project files found in - - - The name of the project can be retrieved by reading metadata tag ProjectName. - - The path to the project as it is is stored in the solution file retrieved by reading metadata tag ProjectPath. - - - The project's GUID can be retrieved by reading metadata tag ProjectGUID. - - - - - - Name of Solution to get Projects from - - - - - MSBuild task to execute DDL and SQL statements. - - Requires the the SQL Server libraries and dynamically loads the - required Microsoft.SqlServer.ConnectionInfo assembly. - - - Server=localhost;Integrated Security=True - - - - - - ]]> - - - - - Executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - The connection string - - - - - Gets or sets the DDL/SQL files. - - The assemblies. - - - - Output the return count/values - - - - - Timeout to execute a DDL statement. - - Defaults to 30 seconds. Set to 0 for an infinite timeout period. - - - - Gets or sets the batch delimter string. - - Default is "GO" for T-SQL. - - - - The kind of Subversion node. The names match the text output - by "svn info". - - - - - Node is a file - - - - - Node is a directory - - - - - Unknown node type - - - - - The Subversion schedule type. - - - - - Normal schedule - - - - - Unknown schedule. - - - - - Run the "svn info" command and parse the output - - - This example will determine the Subversion repository root for - a working directory and print it out. - - - - - - - ]]> - - You can retrieve Subversion information for a or . - If you do not provide a value for or , the current directory is assumed. - - - - Initializes a new instance of the class. - - - - - Reset all instance variables to their default (unset) state. - - - - - Execute the task. - - true if execution is successful, false if not. - - - - Return the repository root or null if not set by Subversion. - - - - - Return the repository UUID value from Subversion. - - - - - The Subversion node kind. - - - - - - The author who last changed this node. - - - - - The last changed revision number. - - - - - The date this node was last changed. - - - - - The Subversion schedule type. - - - - - - MSBuild task that replaces tokens in a template file and writes out a new file. - - - - - MSBuild Community Tasks - - - - - ]]> - - Tokens in the template file are formatted using ${var} syntax and names are not - case-sensitive, so ${Token} and ${TOKEN} are equivalent. - - - - Meta data tag used for token replacement - - - - - Default constructor. Creates a new TemplateFile task. - - - - - Executes the task. - - Success or failure of the task. - - - - The token replaced template file. - - - - - The full path to the output file name. If no filename is specified (the default) the - output file will be the Template filename with a .out extension. - - - - - The template file used. Tokens with values of ${Name} are replaced by name. - - - - - List of tokens to replace in the template. Token name is taken from the TaskItem.ItemSpec and the - replacement value comes from the ReplacementValue metadata of the item. - - - - - Gets the current date and time. - - - See - - DateTimeFormatInfo - for the syntax of the format string. - - Using the Time task to get the Month, Day, - Year, Hour, Minute, and Second: - - - - - - - - - ]]> - Set property "BuildDate" to the current date and time: - - - ]]> - - - - - When overridden in a derived class, executes the task. - - - True if the task successfully executed; otherwise, false. - - - - - Gets or sets the format string - for output parameter . - - - See - - DateTimeFormatInfo - for the syntax of the format string. - - - - - Gets the month component of the date represented by this instance. - - - - - Gets the day of the month represented by this instance. - - - - - Gets the year component of the date represented by this instance. - - - - - Gets the hour component of the date represented by this instance. - - - - - Gets the minute component of the date represented by this instance. - - - - - Gets the seconds component of the date represented by this instance. - - - - - Gets the milliseconds component of the date represented by this instance. - - - - - Gets the number of ticks that represent the date and time of this instance. - - - - - Gets or sets a value that indicates whether the time represented by this instance is based - on local time, Coordinated Universal Time (UTC), or neither. - - - Possible values are: - - Local (default), - Utc, - Unspecified - - - - - - - Gets the time of day for this instance. - - - - - Gets the day of the year represented by this instance. - - - - - Gets the day of the week represented by this instance. - - - - - Gets the value of this instance to its equivalent string representation. - If input parameter is provided, - the value is formatted according to it. - - - - - Gets the value of this instance to its equivalent short date string representation. - - - - - Gets the value of this instance to its equivalent long date string representation. - - - - - Gets the value of this instance to its equivalent short time string representation. - - - - - Gets the value of this instance to its equivalent long time string representation. - - - - - Gets the internal time value. - - - - - Represents a single XmlNode selected using an XML task. - - - - - - Initializes a new instance of an XmlNodeTaskItem - - The selected XmlNode - The prefix to attach to the reserved metadata properties. - - - - Returns a string representation of the XmlNodeTaskItem. - - - - - - Returns the ItemSpec when the XmlNodeTaskItem is explicitly cast as a - - The XmlNodeTaskItem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Reads a value or values from lines of XML - - - Use the Lines property (possibly populated from the the ReadLinesFromFile task) if you want to perform multiple - queries against some XML in memory. Use the XmlFileName property to query a large XML file. - - An XPath expression can return multiple nodes in the collection. - The number of nodes returned is availabe in the output TaskParameter. - - - When the XPath expression resolves to an element node, all of the - attributes of the element are added as metadata to the returned . - In addition, some reserved metadata properties are available on all element nodes. - They are all prefixed with the , - which is a single underscore (_) by default. - - - Reserved Property - - - _value - The value of the node (non-xml text between the opening and closing tags). - - - _innerXml - The markup representing the children of this node. - - - _outerXml - The markup representing this node and all its child nodes. - - - - - Read an attribute value by selecting it with an XPath expression: - - - - - - - - - - -]]> - - - Read attribute values (from an XML file) using item metadata on a selected element node: - - - - - - - -]]> - - - Read an element value (requires use of the reserved metadata property "_value"): - - - - - - - - - - -]]> - - - - - - When overridden in a derived class, executes the task. - - - True if the task successfully executed; otherwise, false. - - - - - The lines of a valid XML document - - - - - Gets or sets the name of an XML file to query - - The full path of the XML file. - - - - A collection of prefix=namespace definitions used to query the XML document - - - Defining multiple namespaces: - - -/>]]> - - - - - - The query used to identify the values in the XML document - - - - - The values selected by - - - - - The number of values returned in - - - - - The string that is prepended to all reserved metadata properties. - - The default value is a single underscore: '_' - All attributes of an element node are added as metadata to the returned ITaskItem, - so this property can be used to avoid clashes with the reserved properties. - For example, if you selected the following node: - ]]> - the _value attribute would clash with the value reserved property, when using - the default prefix. If you set the ReservedMetaDataPrefix to another value (two underscores '__') - there would be no clash. You would be able to select the attribute using %(item._value) - and the value of the node using %(item.__value). - - - - Provides methods used by all of the XML tasks - - - - - - Concatenates the string value of a list of ITaskItems into a single string - - The items to concatenate - A single string containing the values from all of the items - - - - Uses the prefix=namespace definitions in to populate - - The to populate. - The prefix=namespace definitions. - - - - A task to merge and transform a set of xml files. - - -

- The xml files of parameter - are merged into one xml document, - wrapped with a root tag -

-

- If only one input file is provided, - merging and wrapping can be omitted - by setting to an empty string. -

-

- The root tag can be given any number of attributes - by providing a list of semicolon-delimited name/value pairs - to parameter . - For example: RootAttributes="foo=bar;date=$(buildDate)" -

-

- Parameter defaults to - one attribute with a name specified by , - and a local time stamp as value. - To suppress the default value, an empty parameter - RootAttributes="" - must be specified explicitely. -

-

- The xsl transformation file - specified by parameter - is applied on the input. -

-

- The - can be given any number of metadata, - which will be handed to the xsl transformation - as parameters. -

-

- If only one input file is given with , - metadata will also be handed to the xsl transformation. - However, the metadata is preferred in case of equal names. - To overcome this limitation, for each input item metadatum, an additional parameter - prefixed with is created. -

-

- The output is written to the file - specified by parameter . -

-
- This example for generating a report - from a set of NUnit xml results: - - - - $(project) - $(configuration) - $(MSBuildProjectFullPath) - $(MSBuildBinPath) - $(MSBuildCommunityTasksPath)\$(nunitReportXsl) - - - - - -]]> - - - This examples shows all available task attributes: - - - - - -]]> - - -
- - - The name of the default attribute - of the . - The value is "created", - and the attribute will contain a local time stamp. - - - - - The prefix of XSLT parameters created from single XML input metadata. - The value is "input_". - - - - - When overridden in a derived class, executes the task. - - - Returns true if the task successfully executed; otherwise, false. - - - - - Adds a new xsl parameter with to the specified argument list. - - The name of the parameter. - The value of the parameter. - The parameter list. - Whether the parameter was added. - Does not add the parameter - when a parameter with the same name is already part of the . - - - - Gets or sets the xml input files. - - - - - Gets or sets the xml tag name - of the root tag wrapped - around the merged xml input files. - - - - - Gets or sets the list of - semicolon-delimited name/value pairs - of the . - For example: RootAttributes="foo=bar;date=$(buildDate)" - - - - - Gets or sets the path of the - xsl transformation file to apply. - - - The property can be given any number of metadata, - which will be handed to the xsl transformation - as parameters. - - - - - Gets or sets the path of the output file. - - - - - Replace text in file(s) using a Regular Expression. - - Search for a version number and update the revision. - - ]]> - - - - - Initializes a new instance of the class. - - - - Maintain the behaviour of the original implementation for compatibility - (i.e. initialize _useDefaultEncoding with false) and use utf-8-without-bom, - which is Microsoft's default encoding, only when Encoding property is set - to "utf-8-without-bom". - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets or sets the files to update. - - The files. - - - - Gets or sets the regex. - - The regex. - - - - Gets or sets a value specifies case-insensitive matching. . - - true if [ignore case]; otherwise, false. - - - - Gets or sets a value changing the meaning of ^ and $ so they match at the beginning and end, - respectively, of any line, and not just the beginning and end of the entire string. - - true if multiline; otherwise, false. - - - - Gets or sets a value changing the meaning of the dot (.) so it matches - every character (instead of every character except \n). - - true if singleline; otherwise, false. - - - - Gets or sets the maximum number of times the replacement can occur. - - The replacement count. - - - - Gets or sets the replacement text. - - The replacement text. - - - - The character encoding used to read and write the file. - - Any value returned by is valid input. - The default is utf-8 - Additionally, utf-8-without-bomcan be used. - - - - When TRUE, a warning will be generated to show which file was not updated. - - N/A - - - - Uses FxCop to analyse managed code assemblies and reports on - their design best-practice compliance. - - - Shows how to analyse an assembly and use an XSLT stylesheet - to present the report as an HTML file. If the static anlysis fails, - the build does not stop - this is controlled with the FailOnError - parameter. - - ]]> - - If you include the MSBuild.Community.Tasks.Targets file - in you build project, the ItemGroup @(FxCopRuleAssemblies) is defined - with the standard FxCop Rules Assemblies. - - - - Executes the task. - - if the task ran successfully; - otherwise . - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Returns a string value containing the command line arguments - to pass directly to the executable file. - - - A string value containing the command line arguments to pass - directly to the executable file. - - - - - Indicates whether all task paratmeters are valid. - - true if all task parameters are valid; otherwise, false - - - - Returns the directory in which to run the executable file. - - - The directory in which to run the executable file, - or a null reference (Nothing in Visual Basic) if the executable file - should be run in the current directory. - - - - - Tells FxCop to search the GAC for assembly references. This parameter was added in FxCop 1.35 - - - - - Applies the XSL transformation specified in /outXsl to the - analysis report before saving the file. - - - - - Directs analysis output to the console or to the - Output window in Visual Studio .NET. By default, - the XSL file FxCopConsoleOutput.xsl is applied to the - output before it is displayed. - - - - - Specifies additional directories to search for assembly dependencies. - FxCopCmd always searches the target assembly directory and the current - working directory. - - - - - Specifies the target assembly to analyze. - - - - - Specifies the XSL or XSLT file that contains a transformation to - be applied to the analysis output before it is displayed in the console. - - - - - Specifies the name of an analysis report or project file to import. - Any messages in the imported file that are marked as excluded are not - included in the analysis results. - - - - - Specifies the custom dictionary. - - - - - Specifies the filename(s) of FxCop rule assemblies - - - - - The list of rules to run - - Rule names should be provided using the format Library#RuleNumber. For example Microsoft.Design#CA1012 - Place a single hyphen (-) in front of the rule name to exclude it. For example -Microsoft.Performance#CA1805 - - - - - Specifies the file name for the analysis report. - - - - - Specifies the XSL or XSLT file that is referenced by the - xml-stylesheet processing instruction in the analysis report. - - - - - Specifies the location of the version of Mscorlib.dll - that was used when building the target assemblies if this - version is not installed on the computer running FxCopCmd. - - - - - Specifies the filename of FxCop project file. - - - - - Includes a summary report with the informational - messages returned by FxCopCmd. - - - - - Comma-separated list of type names to analyze. This option disables - analysis of assemblies, namespaces, and resources; only the specified - types and their members are included in the analysis. - Use the wildcard character '*' at the end of the name to select multiple types. - - - - - Saves the results of the analysis in the project file. - - - - - Gets or sets the working directory. - - The working directory. - - The directory in which to run the executable file, or a null reference (Nothing in Visual Basic) if the executable file should be run in the current directory. - - - - - Gets or sets a value indicating whether the output is verbose. - - true if verbose; otherwise, false. - - - - Gets or sets a value indicating whether the build should - fail if static code analysis reports errors. Defaults to - true. - - true if verbose; otherwise, false. - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - Defines the actions that can be performed on a service. - - - - - Starts a service. - - - - - Stops a service. - - - - - Restarts a service. - - - - - Pauses a running service. - - - - - Continues a paused service. - - - - - Task that can control a Windows service. - - - Restart Web Server - - ]]> - - - - - Task that can determine the status of a specified service - on a target server. - - - Check status of SQL Server - - - - - ]]> - - - - - The unknown - returned when the service does not exist. - The value is "Unknown". - - - - - Initializes a new instance of the class. - - - - - Executes the task. - - if the task ran successfully; - otherwise . - - - - Gets the service controller. - - - - - - Gets or sets the name of the service. - - The name of the service. - - - - Gets or sets the name of the machine. - - The name of the machine. - - - - Gets or sets the status. - - The status of the service. - - - - Gets a value indicating whether the service can be paused and resumed. - - - true if this instance can pause and continue; otherwise, false. - - - - - Gets a value indicating whether the service should be notified when the system is shutting down. - - - true if this instance can shutdown; otherwise, false. - - - - - Gets a value indicating whether the service can be stopped after it has started. - - true if this instance can stop; otherwise, false. - - - - Gets a friendly name for the service. - - The name of the display. - - - - Gets a value indicating whether the service exists. - - true if the service exists; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Executes the task. - - if the task ran successfully; - otherwise . - - - - Gets or sets the to perform on the service. - - The action to perform on the service. - - - - - Gets or sets the timeout for the command. The default is - one minute. - - The timeout for the command. - - - - Creates a new application pool on a local or remote machine with IIS installed. The default is - to create the new application pool on the local machine. If connecting to a remote machine, you can - specify the and for the task - to run under. - - Create a new application pool on the local machine. - - ]]> - - - - - When overridden in a derived class, executes the task. - - - True if the task successfully executed; otherwise, false. - - - - - Gets or sets the name of the application pool. - - The name of the application pool. - - - - The AppPoolAutoStart property indicates to the World Wide Web Publishing Service (WWW service) - to automatically start an application pool when the application pool is created or when IIS - is started, if the value of this property is set to true. - - Value indicating if AppPoolAutoStart is enabled or disabled. - - - - The AppPoolIdentityType property allows application pools to run as a specific user account: - - 0 - The application pool runs as NT AUTHORITY\SYSTEM. - 1 - The application pool runs as NT AUTHORITY\LOCAL SERVICE. - 2 - The application pool runs as NT AUTHORITY\NETWORK SERVICE. - 3 - The application pool runs as a specific user account, defined by the property. - - Value indicating the application pool identity type. - - - - The AppPoolQueueLength property indicates to the Universal Listener how many requests - to queue up for an application pool before rejecting future requests. When the limit - for this property is exceeded, IIS rejects the additional requests with a 503 error. - - Value indicating the application pool queue length. - - - - The AutoShutdownAppPoolExe property specifies an executable to run when the World Wide Web - Publishing Service (WWW service) shuts down an application pool for rapid fail protection. You - can use the property to send parameters to the executable. - - Value indicating the application pool auto shutdown executable. - - - - The AutoShutdownAppPoolParams property specifies any command-line parameters for the executable that - is specified in the AutoShutdownAppPoolExe property. You can use these two properties in the following - way to send e-mail, for example, when the World Wide Web Publishing Service (WWW service) shuts down - an application pool for rapid fail protection: - - AutoShutdownAppPoolExe = "C:\LogAndSendMail.bat" - AutoShutdownAppPoolParams = "-AppPoolName %1%" - - where %1% represents the application pool name. - - Value indicating the parameters for the application pool auto shutdown executable. - - - - The CPUAction property configures the action(s) that IIS takes when Microsoft Windows NT ® job objects - run. Only one Windows NT job object exists per application pool, therefore the CPUAction property - is configured on a per application pool basis. - - Possible values: - 0 - No action is taken except that a warning is written to the event log when the CPU limit is exceeded. - 1 - Application pool worker processes that exceed their CPU limit will be forced to shut down. - - Value indicating the CPU action. - - - - The CPULimit property configures the maximum percentage of CPU resources that worker processes - in an application pool are allowed to consume over a period of time, as indicated by the - property. Set this property by specifying a percentage of CPU - usage, multiplied by 1000. For example, if you want the CPU usage limit to be 50%, set CPULimit to 50,000. - - Value indicating the CPU limit. - - - - The CPUResetInterval property specifies the reset period (in minutes) for CPU monitoring and - throttling limits on the application pool. When the number of minutes elapsed since the last - process accounting reset equals the number specified by this property, IIS will reset the CPU - timers for both the logging and limit intervals. Setting the value of this property to 0 - disables CPU monitoring. - - Value indicating the CPU reset interval. - - - - The DisallowOverlappingRotation property specifies whether or not the World Wide Web Publishing - Service (WWW Service) should start up another worker process to replace the existing worker - process while it is shutting down. - - Value indicating the DisallowOverlappingRotation. - - - - The DisallowRotationOnConfigChange property specifies whether or not the World Wide Web Publishing - Service (WWW Service) should rotate worker processes in an application pool when the configuration - has changed. This means that the worker processes will not pick up application pool changes to - values passed to the worker process, such as and . - - Value indicating the DisallowRotationOnConfigChange. - - - - The IdleTimeout property specifies how long (in minutes) a worker process should run idle if no new - requests are received and the worker process is not processing requests. After the allotted time - passes, the worker process should request to be shut down by the World Wide Web Publishing Service (WWW Service). - - Value indicating the idle timeout. - - - - The LoadBalancerCapabilities property specifies behavior when a service is unavailable. A setting of 1 - terminates the connection. A setting of 2 sends error code 503. - - Value indicating the load balancer capabilities. - - - - The LogEventOnRecycle property specifies that IIS should log an event when an application pool is - recycled. Application pools recycle for a variety of reasons. In order for IIS to log the event, the - LogEventOnRecycle property must have a bit set corresponding to the reason for the recycle. - - Value indicating which recycle events to log. - - - - The LogonMethod property contains an integer that specifies the logon method for cleartext - logons. Valid settings are: - - 0 for interactive logon. - 1 for batch logon. - 2 for network logon. - 3 for cleartext logon. - - Value indicating the logon method. - - - - The MaxProcesses property determines the maximum number of worker processes an application pool - allows to service requests for an application pool. This property cannot be set to 0 because there - are no unmanaged pools. - - Value indicating the maximum number of worker processes allowed by the application pool. - - - - The OrphanActionExe property specifies an executable to run when the World Wide Web Publishing - Service (WWW service) orphans a worker process. You can use the property - to send parameters to the executable. - - The value for the orphan action executable. - - - - The OrphanActionParams property specifies command-line parameters for the executable - specified by the property. - - Value indicating the orphan action parameters. - - - - The OrphanWorkerProcess property, when set to true, notifies the World Wide Web Publishing - Service (WWW Service) not to terminate a worker process that fails to respond to pings, but - to instead orphan the worker process in the application pool if the worker process suffers - fatal errors. - - Value indicating the orphan worker process. - - - - The PeriodicRestartMemory property specifies the amount of virtual memory (in KB) that a - worker process can use before the worker process recycles. The maximum value supported - for this property is 4,294,967 KB. - - Value indicating the amount of memory. - - - - The PeriodicRestartPrivateMemory property specifies the amount of private memory (in KB) that a - worker process can use before the worker process recycles. The maximum value supported - for this property is 4,294,967 KB. - - Value indicating the amount of memory. - - - - The PeriodicRestartRequests property indicates the number of requests the OOP application - should process, after which it is recycled. - - Value indicating the number of requests. - - - - The PeriodicRestartSchedule property specifies the time (in 24 hour format) that the application - will be rotated. Each time is in local time and is specified in the following format: - - PeriodicRestartSchedule="hh:mm,hh:mm,hh:mm" - - Value indicating the restart schedule. - - - - The PeriodicRestartTime property specifies the period of time, in minutes, after which IIS - rotates an isolated OOP application. Setting the value of this property to 0 disables the - property. The maximum supported value for this property is 71,582. - - Value indicating the restart time period. - - - - The PingingEnabled property specifies whether the World Wide Web Publishing Service - (WWW Service) should periodically monitor the health of a worker process. Setting the - value of this property to true indicates to the WWW service to monitor the worker - processes to ensure that the they are running and healthy. - - Value indicating if pinging is enabled or disabled. - - - - The PingInterval property specifies the period of time (in seconds) between health-monitoring - pings that the World Wide Web Publishing Service (WWW Service) sends to a worker process. - - Value indicating the ping interval. - - - - The PingResponseTime property specifies the amount of time (in seconds) that a worker process - is given to respond to a health monitoring ping. After the time limit is exceeded, the World - Wide Web Publishing Service (WWW Service) terminates the worker process. - - Value indicating the ping response time. - - - - Setting the RapidFailProtection property to true instructs the World Wide Web Publishing - Service (WWW service) to put all applications in an application pool out of service if the - number of worker process crashes has reached the maximum specified by the - property, within the number of minutes specified - by the property. - - Value indicating if rapid fail protection is enabled or disabled. - - - - The RapidFailProtectionInterval property specifies the number of minutes before the failure - count for a process is reset. See . - - Value indicating the rapid fail protection interval. - - - - The RapidFailProtectionMaxCrashes property specifies the maximum number of failures - allowed within the number of minutes specified by the - property. See . - - Value indicating the maximum number of crashes. - - - - The ShutdownTimeLimit property specifies the amount of time (in seconds) after a recycle - threshold has been reached that IIS waits for all old requests to finish running in a worker - process before terminating the worker process. - - Value indicating the shutdown time limit. - - - - Setting the SMPAffinitized property to true indicates that a particular worker process - assigned to an application pool should be assigned to a given CPU. This property is used - in conjunction with the property to configure a - particular processor a worker process will be assigned to. - - Value indicating if SMPAffinitized is enabled or disabled. - - - - The SMPProcessorAffinityMask property configures the hexadecimal processor mask. The hexadecimal - processor mask indicates to which CPU the worker processes in an application pool should be - bound. Before this property takes affect, the property must be set - to true for the application pool. These properties cannot be set through IIS Manager. - - Do not set this property to zero. Doing so causes no SMP affinity to be configured, creating an - error condition. The default DWORD value is 4294967295 (or -1), which is represented in hexadecimal - as 0xFFFFFFFF. A value of 0xFFFFFFFF in SMPProcessorAffinityMask indicates that all processors are enabled. - - Value indicating the SMP processor affinity bit mask. - - - - The value of the StartupTimeLimit property specifies the amount of time (in seconds) that the World Wide - Web Publishing Service (WWW Service) should wait for a worker process to finish starting up and - reporting to the WWW Service. - - Value indicating the startup time limit. - - - - The WAMUserName property specifies the account user name that IIS uses by default as the COM+ - application identity for newly created IIS out-of-process applications. The values of this - property and its companion property, , are set when IIS is installed, and - match the user name and password values in the Microsoft Windows user account, which is established - at the same time. Changing the value of this property is not recommended. If you do, change - it to a valid Windows user account, and change WAMUserPass to the corresponding password - for the new account. - - Important: - Changes to WAMUserName and WAMUserPass may disrupt the operation of existing IIS out-of-process - applications. You can synchronize application identities using Component Services to edit the - user name and password values, found on the Identity tab of the property sheet for each package. - - In-process applications are not affected by these property values. - - Value indicating the username. - - - - The WAMUserPass property specifies the password for the account that IIS uses by default as the COM+ - application identity for newly created IIS out-of-process applications. The values of this property - and its companion property, , are set when IIS is installed, and match the - password and user name values in the Microsoft Windows user account (IWAM_ MachineName, where MachineName - is the name of the machine on which IIS is installed) established at the same time. - - Important: - Changing the value of this property is not recommended. If you do, you must change the Windows account - password to the identical value. You must also synchronize existing IIS out-of-process application - identities, using Component Services to edit the user name and password values, which are found on the - Identity tab of the property sheet for each package. - - In-process applications are not affected by these property values. - - Value indicating the password. - - - - Creates a new web directory on a local or remote machine with IIS installed. The default is - to create the new web directory on the local machine. The physical path is required to already exist - on the target machine. If connecting to a remote machine, you can specify the - and for the task to run under. - - Create a new web directory on the local machine. - - ]]> - - - - - When overridden in a derived class, executes the task. - - - True if the task successfully executed; otherwise, false. - - - - - Gets or sets the name of the virtual directory. - - The name of the virtual directory. - - - - Gets or sets the virtual directory physical path. The physical directory must - exist before this task executes. - - The virtual directory physical path. - - - - Gets or sets a value that indicates if the file - or the contents of the folder may be executed, regardless of file type. - - A value indicating if AccessExecute is enabled or disabled. - - - - A value of true indicates that remote requests to execute applications - are denied; only requests from the same computer as the IIS server succeed - if the AccessExecute property is set to true. You cannot set - AccessNoRemoteExecute to false to enable remote requests, and set - to false to disable local requests. - - Value indicating if AccessNoRemoteExecute is enabled or disabled. - - - - A value of true indicates that remote requests to view files are denied; only - requests from the same computer as the IIS server succeed if the - property is set to true. You cannot set to false to enable - remote requests, and set to false to disable local requests. - - Value indicating if AccessNoRemoteRead is enabled or disabled. - - - - A value of true indicates that remote requests to view dynamic content are denied; only - requests from the same computer as the IIS server succeed if the property - is set to true. You cannot set AccessNoRemoteScript to false to enable remote requests, - and set to false to disable local requests. - - Value indicating if AccessNoRemoteScript is enabled or disabled. - - - - A value of true indicates that remote requests to create or change files are denied; only - requests from the same computer as the IIS server succeed if the property - is set to true. You cannot set AccessNoRemoteWrite to false to enable remote requests, - and set to false to disable local requests. - - Value indicating if AccessNoRemoteWrite is enabled or disabled. - - - - A value of true indicates that the file or the contents of the folder may be read - through Microsoft Internet Explorer. - - Value indicating if AccessRead is enabled or disabled. - - - - A value of true indicates that users are allowed to access source code if either - Read or Write permissions are set. Source code includes scripts in Microsoft ® Active - Server Pages (ASP) applications. - - Value indicating if AccessSource is enabled or disabled. - - - - A value of true indicates that the file or the contents of the folder may be executed - if they are script files or static content. A value of false only allows static files, - such as HTML files, to be served. - - Value indicating if AccessScript is enabled or disabled. - - - - A value of true indicates that file access requires SSL file permission processing, with - or without a client certificate. - - Value indicating if AccessSsl is enabled or disabled. - - - - A value of true indicates that file access requires SSL file permission processing - with a minimum key size of 128 bits, with or without a client certificate. - - Value indicating if AccessSsl128 is enabled or disabled. - - - - A value of true indicates that SSL file permission processing maps a client certificate - to a Microsoft Windows ® operating system user-account. The property - must also be set to true for the mapping to occur. - - Value indicating if AccessSslMapCert is enabled or disabled. - - - - A value of true indicates that SSL file access processing requests a certificate from - the client. A value of false indicates that access continues if the client does not have - a certificate. Some versions of Internet Explorer will close the connection if the server - requests a certificate and a certificate is not available (even if - is also set to true). - - Value indicating if AccessSslNegotiateCert is enabled or disabled. - - - - A value of true indicates that SSL file access processing requests a certificate from the - client. If the client provides no certificate, the connection is closed. - must also be set to true when using AccessSSLRequireCert. - - Value indicating if AccessSslRequireCert is enabled or disabled. - - - - A value of true indicates that users are allowed to upload files and their associated - properties to the enabled directory on your server or to change content in a Write-enabled - file. Write can be implemented only with a browser that supports the PUT feature of - the HTTP 1.1 protocol standard. - - Value indicating if AccessWrite is enabled or disabled. - - - - The AnonymousPasswordSync property indicates whether IIS should handle the user password - for anonymous users attempting to access resources. - - Value indicating if AnonymousPasswordSync is enabled or disabled. - - - - The AppAllowClientDebug property specifies whether ASP client-side debugging - is enabled. This property is independent of , which - applies to server-side debugging. - - Value indicating if AppAllowClientDebug is enabled or disabled. - - - - The AppAllowDebugging property specifies whether ASP debugging is enabled on - the server. This property is independent of the property, - which applies to client-side debugging. - - Value indicating if AppAllowDebugging is enabled or disabled. - - - - The AspAllowSessionState property enables session state persistence for the ASP application. - - Value indicating if the AspAllowSessionState is enabled or disabled. - - - - The AspBufferingOn property specifies whether output from an ASP application will be buffered. - - Value indicating if the AspBufferingOn is enabled or disabled. - - - - The AspEnableApplicationRestart determines whether an ASP application can be - automatically restarted. When changes are made to Global.asa or metabase properties - that affect an application, the application will not restart unless the - AspEnableApplicationRestart property is set to true. - - Value indicating if AspEnableApplicationRestart is enabled or disabled. - - - - The AspEnableAspHtmlFallback property controls the behavior of ASP when a - new request is to be rejected due to a full request queue. - - Value indicating if AspEnableAspHtmlFallback is enabled or disabled. - - - - The AspEnableChunkedEncoding property specifies whether HTTP 1.1 chunked - transfer encoding is enabled for the World Wide Web Publishing Service (WWW service). - - Value indicating if AspEnableChunkedEncoding is enabled or disabled. - - - - The AspErrorsToNTLog property specifies which ASP errors are written to the - Windows event log. ASP errors are written to the client browser and to the IIS - log files by default. - - Value indicating if AspErrorsToNTLog is enabled or disabled. - - - - The AspEnableParentPaths property specifies whether an ASP page allows paths - relative to the current directory (using the ..\ notation) or above the current directory. - - Value indicating if AspEnableParentPaths is enabled or disabled. - - - - The AspEnableTypelibCache property specifies whether type libraries are cached - on the server. The World Wide Web Publishing Service (WWW service) setting for - this property is applicable to all in-process and pooled out-of-process application - nodes, at all levels. Metabase settings at the Web server level or lower are ignored - for in-process and pooled out-of-process applications. However, settings at the Web - server level or lower are used if that node is an isolated out-of-process application. - - Value indicating if AspEnableTypelibCache is enabled or disabled. - - - - The AspExceptionCatchEnable property specifies whether ASP pages trap exceptions - thrown by components. - - Value indicating if AspExceptionCatchEnable is enabled or disabled. - - - - The AspLogErrorRequests property controls whether the Web server writes ASP errors - to the application section of the Windows event log. ASP errors are written to the - client browser and to the IIS log files by default. - - Value indicating if AspLogErrorRequests is enabled or disabled. - - - - The AspScriptErrorSentToBrowser property specifies whether the Web server writes - debugging specifics (file name, error, line number, description) to the client - browser, in addition to logging them to the Windows Event Log. The - property provides the error message to be sent if this property is set to false. - - Value indicating if AspScriptErrorSentToBrowser is enabled or disabled. - - - - The AspTrackThreadingModel property specifies whether IIS checks the threading model - of any components (COM objects) that your application creates. The preferred setting - of this metabase property is false. - - Value indicating if AspTrackThreadingModel is enabled or disabled. - - - - Specifies Anonymous authentication as one of the possible Windows authentication - schemes returned to clients as being available. - - Value indicating if AuthAnonymous is enabled or disabled. - - - - Specifies Basic authentication as one of the possible Windows authentication - schemes returned to clients as being available. - - Value indicating if AuthBasic is enabled or disabled. - - - - Specifies Integrated Windows authentication (also known as Challenge/Response or - NTLM authentication) as one of the possible Windows authentication schemes - returned to clients as being available. - - Value indicating if AuthNtlm is enabled or disabled. - - - - Setting this flag to true specifies that authentication persists only for a single - request on a connection. IIS resets the authentication at the end of each request, and - forces re-authentication on the next request of the session. - - Value indicating if AuthPersistSingleRequest is enabled or disabled. - - - - Setting this flag to true specifies authentication will persist only across single - requests on a connection if the connection is by proxy. IIS will reset the authentication - at the end of the request if the current authenticated request is by proxy and it is - not the special case where IIS is running MSPROXY. - - Value indicating if AuthPersistSingleRequestIfProxy is enabled or disabled. - - - - Setting this flag to true specifies that authentication is valid for a single request if - by proxy. IIS will reset the authentication at the end of the request and force - re-authentication on the next request if the current authenticated request is by - proxy of any type. - - Value indicating if AuthPersistSingleRequestAlwaysIfProxy is enabled or disabled. - - - - The CacheControlNoCache property specifies the HTTP 1.1 directive to prevent caching of content. - - Value indicating if CacheControlNoCache is enabled or disabled. - - - - The CacheISAPI property indicates whether ISAPI extensions are cached in memory after first use. - - Value indicating if CacheIsapi is enabled or disabled. - - - - The ContentIndexed property specifies whether the installed content indexer should - index content under this directory tree. - - Value indicating if ContentIndexed is enabled or disabled. - - - - This property specifies whether process accounting and throttling should be performed - for ISAPI extensions and ASP applications. To perform process accounting on CGI - applications, use the property . - - Value indicating if CpuAppEnabled is enabled or disabled. - - - - This property indicates whether IIS should perform process accounting for CGI - applications. To effectively throttle CGI applications, use the CgiTimeout - property. To use process accounting for ISAPI and ASP applications, use . - - Value indicating if CpuCgiEnabled is enabled or disabled. - - - - The CreateCGIWithNewConsole property indicates whether a CGI application runs in its own console. - - Value indicating if CreateCgiWithNewConsole is enabled or disabled. - - - - The CreateProcessAsUser property specifies whether a CGI process is created in the system context or in the context of the requesting user. - - Value indicating if CreateProcessAsUser is enabled or disabled. - - - - When set to true, date information is displayed when browsing directories. - - Value indicating if DirBrowseShowDate is enabled or disabled. - - - - When set to true, file name extensions are displayed when browsing directories. - - Value indicating if DirBrowseShowExtension is enabled or disabled. - - - - When set to true, date information is displayed in extended format when displaying directories. - - Value indicating if DirBrowseShowLongDate is enabled or disabled. - - - - When set to true, file size information is displayed when browsing directories. - - Value indicating if DirBrowseShowSize is enabled or disabled. - - - - When set to true, file time information is displayed when displaying directories. - - Value indicating if DirBrowseShowTime is enabled or disabled. - - - - The DontLog property specifies whether client requests are written to the IIS log files. - - Value indicating if DontLog is enabled or disabled. - - - - When set to true, the default document (specified by the property) for - a directory is loaded when the directory is browsed. - - Value indicating if EnableDefaultDoc is enabled or disabled. - - - - When set to true, directory browsing is enabled. - - Value indicating if EnableDirBrowsing is enabled or disabled. - - - - The EnableDocFooter property enables or disables custom footers specified by - the DefaultDocFooter property. - - Value indicating if EnableDocFooter is enabled or disabled. - - - - The EnableReverseDns property enables or disables reverse Domain Name Server (DNS) lookups - for the World Wide Web Publishing Service (WWW service). Reverse lookups involve looking - up the domain name when the IP address is known. Reverse DNS lookups can use significant - resources and time. - - Value indicating if EnableReverseDns is enabled or disabled. - - - - The SSIExecDisable property specifies whether server-side include (SSI) #exec directives - are disabled under this path. - - Value indicating if SsiExecDisable is enabled or disabled. - - - - The UNCAuthenticationPassthrough property enables user authentication passthrough - for Universal Naming Convention (UNC) virtual root access (for authentication schemes - that support delegation). - - Value indicating if UncAuthenticationPassthrough is enabled or disabled. - - - - The AspScriptErrorMessage property specifies the error message to send to the browser - if specific debugging errors are not sent to the client (if - is set to false). - - Value indicating if AspScriptErrorMessage is enabled or disabled. - - - - The DefaultDoc contains one or more file names of default documents that will be returned - to the client if no file name is included in the client's request. The default document - will be returned if the flag of the DirBrowseFlags property - is set to true for the directory. This property can contain a list of default document - file names separated by a comma and a space, for example Default.htm, Default.asp. - - Listing of the default documents for the web application. - - - - Deletes an existing application pool on a local or remote machine with IIS installed. The default is - to delete an existing application pool on the local machine. If connecting to a remote machine, you can - specify the and for the task - to run under. - - Delete an existing application pool on the local machine. - - ]]> - - - - - When overridden in a derived class, executes the task. - - - True if the task successfully executed; otherwise, false. - - - - - Gets or sets the name of the application pool. - - The name of the application pool. - - - - Deletes a web directory on a local or remote machine with IIS installed. The default is - to delete the web directory on the local machine. If connecting to a remote machine, you - can specify the and for the - task to run under. - - Deletes a web directory on the local machine. - - ]]> - - - - - When overridden in a derived class, executes the task. - - - True if the task successfully executed; otherwise, false. - - - - - Gets or sets the name of the virtual directory. - - The name of the virtual directory. - - - - Actions the can do. - - - - Start the applicaiton pool - - - Stop the applicaiton pool - - - Restart the applicaiton pool - - - Recycle the applicaiton pool - - - - Allows control for an application pool on a local or remote machine with IIS installed. The default is - to control the application pool on the local machine. If connecting to a remote machine, you can - specify the and for the task - to run under. - - Restart an application pool on the local machine. - - ]]> - - - - - When overridden in a derived class, executes the task. - - - True if the task successfully executed; otherwise, false. - - - - - Gets or sets the name of the app pool. - - The name of the app pool. - - - - Gets or sets the application pool action. - - The application pool action. - - - - - Sends an email message - - Example of sending an email. - - - - ]]> - - - - - Initializes a new instance of the class. - - - - Sends an email message - Returns true if successful - - - - List of files to attach to message - - - - - List of addresss that contains the blind carbon copy (BCC) recipients for this e-mail message - - - - - List of addresss that contains the carbon copy (CC) recipients for this e-mail message - - - - - The email message body - - - - - The from address for this e-mail message - - - This property is required. - - - - - A value indicating whether the mail message body is in Html - - - - - The priority of this e-mail message - - - Possible values are High, Normal, and Low - - - - - The subject line for this e-mail message - - - This property is required. - - - - - The name or IP address of the host used for SMTP transactions - - - This property is required. - - - - - List of addresss that contains the recipients of this e-mail message - - - This property is required. - - - - - Gets or sets the username. - - The username. - - - - Gets or sets the password. - - The password. - - - - Specify whether the Mail task uses SSL to encrypt the connection. - - true if the Mail task uses SSL; otherwise false. The default value is false. - - - - Add numbers - - Adding numbers: - - - - - ]]> - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Divide numbers - - - - - - - -]]> - - Above example will display: - Divide 1/2= 0.5 - - Truncate the result to always return an integer: - - - - - -]]> - - Above example will display: - Divide 7/3= 2 - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - When , uses integer division to truncate the result. Default is - - - Any remainder in the result is dropped, and the closest integer to zero is returned. - - Refer to the documentation for the \ Operator - for more information about integer division. - - - - - - Multiple numbers - - - - - - - ]]> - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Subtract numbers - - - - - - - ]]> - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Moves files on the filesystem to a new location. - - - Move a file to another folder - - ]]> - Rename a file - - ]]> - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets the items that were successfully moved. - - The moved files. - - - - Gets or sets the list of files to moved the source files to. - - - This list is expected to be a one-to-one mapping with the - list specified in the SourceFiles parameter. That is, the - first file specified in SourceFiles will be moved to the - first location specified in DestinationFiles, and so forth. - - The destination files. - - - - Gets or sets the directory to which you want to move the files. - - The destination folder. - - - - Gets or sets the source files to move. - - The source files to move. - - - - Runs the NDoc application. - - Generated html help file. - - ]]> - - - - - Initializes a new instance of the class. - - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Logs the starting point of the run to all registered loggers. - - A descriptive message to provide loggers, usually the command line and switches. - - - - Returns the directory in which to run the executable file. - - - The directory in which to run the executable file, or a null reference (Nothing in Visual Basic) if the executable file should be run in the current directory. - - - - - Gets or sets the documenter. - - The documenter. - Available documenters are VS.NET_2003, JavaDoc, LaTeX, LinearHtml, MSDN, XML. - - - - Gets or sets the project file path. - - The project file path. - - - - Gets or sets a value indicating whether the output is verbose. - - true if verbose; otherwise, false. - - - - Gets or sets the working directory. - - The working directory. - - The directory in which to run the executable file, or a null reference (Nothing in Visual Basic) if the executable file should be run in the current directory. - - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - Gets the with which to log errors. - - - The with which to log errors. - - - - Run NUnit 2.4 on a group of assemblies. - - Run NUnit tests. - - - - - - - ]]> - - - - - The default relative path of the NUnit installation. - The value is @"NUnit 2.4\bin". - - - - - Initializes a new instance of the class. - - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Logs the starting point of the run to all registered loggers. - - A descriptive message to provide loggers, usually the command line and switches. - - - - Returns the directory in which to run the executable file. - - - The directory in which to run the executable file, or a null reference (Nothing in Visual Basic) if the executable file should be run in the current directory. - - - - - Gets or sets the assemblies. - - The assemblies. - - - - Gets or sets the categories to include. - - Multiple values must be separated by a comma "," - - - - Gets or sets the categories to exclude. - - Multiple values must be separated by a comma "," - - - - Gets or sets the fixture. - - The fixture. - - - - Gets or sets the XSLT transform file. - - The XSLT transform file. - - - - Gets or sets the output XML file. - - The output XML file. - - - - The file to receive test error details. - - - - - Gets or sets the working directory. - - The working directory. - - The directory in which to run the executable file, or a null reference (Nothing in Visual Basic) if the executable file should be run in the current directory. - - - - - Determines whether assemblies are copied to a shadow folder during testing. - - Shadow copying is enabled by default. If you want to test the assemblies "in place", - you must set this property to True. - - - - The project configuration to run. - - Only applies when a project file is used. The default is the first configuration, usually Debug. - - - - Allows tests to be run in a new thread, allowing you to take advantage of ApartmentState and ThreadPriority settings in the config file. - - - - - Determines whether the tests are run in a 32bit process on a 64bit OS. - - - - - Determines the framework to run aganist. - - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - Gets the with which to log errors. - - - The with which to log errors. - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized string similar to Failed to lookup information for {0} in Active Directory.. - - - - - Looks up a localized string similar to Attrib directory '{0}'. {1}. - - - - - Looks up a localized string similar to Attrib file '{0}'. {1}. - - - - - Looks up a localized string similar to Couldn't connect to remove server.. - - - - - Looks up a localized string similar to Couldn't resolve server host name {0}.. - - - - - Looks up a localized string similar to Creating directory "{0}".. - - - - - Looks up a localized string similar to Both "{0}" and "{1}" were specified as input parameters in the project file. Please choose one or the other.. - - - - - Looks up a localized string similar to File Not Found: {0}. - - - - - Looks up a localized string similar to Local File Not Found: {0}. - - - - - Looks up a localized string similar to {0}% Complete ({1}). - - - - - Looks up a localized string similar to Transfered {0} ({1}) in {2}. - - - - - Looks up a localized string similar to Upload File Complete, {0}. - - - - - Looks up a localized string similar to Uploading "{0}" - to "{1}" - . - - - - - Looks up a localized string similar to The URI "{0}" scheme is not valid.. - - - - - Looks up a localized string similar to Compressed by {0}, from {1} to {2} byte(s). - - - - - Looks up a localized string similar to Compressing JavaScript in "{0}".. - - - - - Looks up a localized string similar to Writing compressed JavaScript back to "{0}" using {1}.. - - - - - Looks up a localized string similar to Emailing "{0}".. - - - - - Looks up a localized string similar to "{0}" is not a number.. - - - - - Looks up a localized string similar to Merge Complete: {0} files merged into '{1}'.. - - - - - Looks up a localized string similar to Merge Complete: No source files to merge.. - - - - - Looks up a localized string similar to Merging file '{0}' into '{1}'. - - - - - Looks up a localized string similar to Unable to move file "{0}" to "{1}". {2}. - - - - - Looks up a localized string similar to Moving file from "{0}" to "{1}".. - - - - - Looks up a localized string similar to Could not find the NUnit Project File open command. Please make sure NUnit is installed.. - - - - - Looks up a localized string similar to Checking Oracle Home: {0}. - - - - - Looks up a localized string similar to The parameter "{1}" does not apply to the current use of task "{0}".. - - - - - Looks up a localized string similar to The "{0}" task was not given a value for the required parameter "{1}".. - - - - - Looks up a localized string similar to Read Windows Registry. - - - - - Looks up a localized string similar to Write Windows Registry. - - - - - Looks up a localized string similar to Cannot continue service {0} on computer '{1}' as it does not support the pause and continue.. - - - - - Looks up a localized string similar to Cannot pause service {0} on computer '{1}' as it does not support the pause and continue.. - - - - - Looks up a localized string similar to Cannot stop service {0} on computer '{1}'.. - - - - - Looks up a localized string similar to {0} service was continued successfully.. - - - - - Looks up a localized string similar to {0} service is continuing .... - - - - - Looks up a localized string similar to Couldn't find the '{0}' service on '{1}'. - - - - - Looks up a localized string similar to Cannot continue service {0} on computer '{1}' as its not currently paused.. - - - - - Looks up a localized string similar to Cannot pause service {0} on computer '{1}' as its not currently started.. - - - - - Looks up a localized string similar to {0} service was paused successfully.. - - - - - Looks up a localized string similar to {0} service is pausing .... - - - - - Looks up a localized string similar to {0} service was started successfully.. - - - - - Looks up a localized string similar to {0} service is starting .... - - - - - Looks up a localized string similar to The '{0}' service on '{1}' is '{2}'.. - - - - - Looks up a localized string similar to {0} service was stopped successfully.. - - - - - Looks up a localized string similar to {0} service is stopping .... - - - - - Looks up a localized string similar to Solution file "{0}" not found.. - - - - - Looks up a localized string similar to LocalPath is not a working subversion copy.. - - - - - Looks up a localized string similar to Could not {0} the file "{1}" to the destination file "{2}", because the destination is a folder instead of a file. To {0} the source file into a folder, consider using the DestinationFolder parameter instead of DestinationFiles.. - - - - - Looks up a localized string similar to No destination specified for {0}. Please supply either "{1}" or "{2}".. - - - - - Looks up a localized string similar to The source file "{0}" is actually a directory. The "{1}" task does not support moving directories.. - - - - - Looks up a localized string similar to Failed to get current date!. - - - - - Looks up a localized string similar to Getting current date.. - - - - - Looks up a localized string similar to Adding TNSNAMES entry "{0}" to "{1}". - - - - - Looks up a localized string similar to Looking for {0}. - - - - - Looks up a localized string similar to Unable to locate a TNSNAMES.ORA file. Please specify a value for TnsNamesFile.. - - - - - Looks up a localized string similar to TNSNAME entry "{0}" already exists in "{1}" and AllowUpdates=false.. - - - - - Looks up a localized string similar to Updating TNSNAMES entry "{0}" in "{1}". - - - - - Looks up a localized string similar to "{2}" refers to {0} item(s), and "{3}" refers to {1} item(s). They must have the same number of items.. - - - - - Looks up a localized string similar to extracted "{0}". - - - - - Looks up a localized string similar to Unzip File "{0}" - to Directory "{1}" - . - - - - - Looks up a localized string similar to Unzipped file "{0}" successfully.. - - - - - Looks up a localized string similar to Commitment of change set failed!. - - - - - Looks up a localized string similar to Files added to Vault repository successfully.. - - - - - Looks up a localized string similar to Files specified for addition to repository cannot be found.. - - - - - Looks up a localized string similar to The file {0} could not be checked in: {1}.. - - - - - Looks up a localized string similar to File or folder {0} not found for checkin.. - - - - - Looks up a localized string similar to The folder {0} could not be checked in: {1}.. - - - - - Looks up a localized string similar to {0} successfully checked out.. - - - - - Looks up a localized string similar to {0} successfully checked out.. - - - - - Looks up a localized string similar to Specified diskfile {0} does not exist.. - - - - - Looks up a localized string similar to File [{0}] added to change set.. - - - - - Looks up a localized string similar to Folder [{0}] added to change set.. - - - - - Looks up a localized string similar to Incorrect parameters passed to VaultSession.. - - - - - Looks up a localized string similar to Login to Vault repository failed.. - - - - - Looks up a localized string similar to Error validating path "{0}".. - - - - - Looks up a localized string similar to Selection of the repository failed: {0}.. - - - - - Looks up a localized string similar to File or folder {0} not found for checkout.. - - - - - Looks up a localized string similar to Set working folder for {0} to {1} from {2}.. - - - - - Looks up a localized string similar to ClientInstance.TreeCache has not been initialized, Common cause is that SelectRepository has not been called sucessfully.. - - - - - Looks up a localized string similar to Successfully undid check out for {0}.. - - - - - Looks up a localized string similar to Url specifying vault location is required.. - - - - - Looks up a localized string similar to Username must be set to access repository.. - - - - - Looks up a localized string similar to Clearing working folder for {0}.. - - - - - Looks up a localized string similar to Restoring working folder for {0} to {1}.. - - - - - Looks up a localized string similar to Version file "{0}" not found - creating new file.. - - - - - Looks up a localized string similar to Updated to version {0}. - - - - - Looks up a localized string similar to Initialized to version {0}. - - - - - Looks up a localized string similar to Reading version from file "{0}".. - - - - - Looks up a localized string similar to Unable to read version number from "{0}". {1}. - - - - - Looks up a localized string similar to Unable to write version number to "{0}". {1}". - - - - - Looks up a localized string similar to Wrote version to file "{0}".. - - - - - Looks up a localized string similar to Web directory {0} does not exist on {1}.. - - - - - Looks up a localized string similar to Setting scriptmap for {0} on web directory {1} on {2}.. - - - - - Looks up a localized string similar to Web directory {0} on {1} does not have a setting called {2}.. - - - - - Looks up a localized string similar to Reading {0} property of web directory {1} on {2}.. - - - - - Looks up a localized string similar to Setting {0} property of web directory {1} on {2}.. - - - - - Looks up a localized string similar to Reading Xml Document "{0}".. - - - - - Looks up a localized string similar to {0} node(s) selected for read.. - - - - - Looks up a localized string similar to XmlRead Result: "{0}". - - - - - Looks up a localized string similar to Updating Xml Document "{0}".. - - - - - Looks up a localized string similar to {0} node(s) selected for update.. - - - - - Looks up a localized string similar to XmlUpdate Wrote: "{0}".. - - - - - Looks up a localized string similar to Adding Parameter "{0}": "{1}".. - - - - - Looks up a localized string similar to Adding root attribute {0}="{1}".. - - - - - Looks up a localized string similar to Creating root tag "{0}".. - - - - - Looks up a localized string similar to No input files.. - - - - - Looks up a localized string similar to No root tag inserted.. - - - - - Looks up a localized string similar to added "{0}".. - - - - - Looks up a localized string similar to Creating zip file "{0}".. - - - - - Looks up a localized string similar to Zip File Not Found: {0}.. - - - - - Looks up a localized string similar to Created zip file "{0}" successfully.. - - - - - Reads a value from the Registry - - Read .NET Framework install root from Registry. - - - - - ]]> - - The parameter is set according to the following rules: - If a is provided, it will be used if the or does not exist. - If a is not provided, the exists, but the does not exist, will be set to an empty string. - If a is not provided, and the does not exist, the task will fail. - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets or sets the full registry path of the key, beginning with a valid registry root, such as "HKEY_CURRENT_USER". - - The name of the key. - - - - Gets or sets the name of the name/value pair. - - The name of the value. - - - - Gets or sets the default value. - - The default value. - - - - Gets the stored value. - - The value. - - - - Writes a value to the Registry - - Write a value to Registry - - ]]> - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets or sets the full registry path of the key, beginning with a valid registry root, such as "HKEY_CURRENT_USER". - - The name of the key. - - - - Gets or sets the name of the name/value pair. - - The name of the value. - - - - Gets or sets the value to be stored. - - The value. - - - - Executes code contained within the task. - - - Simple script that writes to the console - - - - - - - - - - -]]> - - - - - - Executes the task. - - if the task ran successfully; - otherwise . - - - - The required references - - - - - The namespaces to import. - - - - - The language of the script block (defaults to C#). - - The supported languages are: - - Visual Basic.NET (VB, vb, VISUALBASIC) - C# (C#, c#, CSHARP) - JavaScript (JS, js, JSCRIPT) - J# (VJS, vjs, JSHARP) - or, proviude the fully-qualified name for a class implementing - . - - - - The name of the main class containing the static ScriptMain - entry point. - - - - - The code to compile and execute - - - The code must include a static (Shared in VB) method named ScriptMain. - It cannot accept any parameters. If you define the method return a , - the returned value will be available in the output property. - - - - - The string returned from the custom ScriptMain method. - - - - - A task for sleeping for a specified period of time. - - Causes the build to sleep for 300 milliseconds. - - ]]> - - - - - Executes the task. - - if the task ran successfully; - otherwise . - - - - The number of milliseconds to add to the time to sleep. - - - - - The number of seconds to add to the time to sleep. - - - - - The number of minutes to add to the time to sleep. - - - - - The number of hours to add to the time to sleep. - - - - - Executes a SQL command. - - - Execute a SQL command against a database. Target attributes to set: - ConnectionString (required), Command (required, the SQL to execute), - SelectMode (NonQuery, Scalar, or ScalarXml, default is NonQuery), - OutputFile (required when SelectMode is Scalar or ScalarXml). - - Note: ScalarXml was created because of the 2033 byte limit on the sql return. - See http://aspnetresources.com/blog/executescalar_truncates_xml.aspx for details. - - - Example of returning a count of items in a table. Uses the default SelectMode of NonQuery. - - ]]> - - Example of returning the items of a table in an xml format. - - ]]> - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Determines if an output file was specified. - - - - - The connection string - - - - - The command to execute - - - - - Command Timeout - - Defaults to 30 seconds. Set to 0 for an infinite timeout period. - - - - The SQL Selection Mode. Set to NonQuery, Scalar, or ScalarXml. Default is NonQuery. - - - - - The file name to write to - - - - - Output the return count/value - - - - - Checkout a local working copy of a Subversion repository. - - Checkout a working copy - - - - - - - - ]]> - - - - - Initializes a new instance of the class. - - - - - Indicates whether all task paratmeters are valid. - - - true if all task parameters are valid; otherwise, false. - - - - - Subversion Commit command - - - - - Initializes a new instance of the class. - - - - - Indicates whether all task paratmeters are valid. - - - true if all task parameters are valid; otherwise, false. - - - - - Export a folder from a Subversion repository - - Export from repository - - - - - - - - - ]]> - - - - - Initializes a new instance of the class. - - - - - Indicates whether all task paratmeters are valid. - - - true if all task parameters are valid; otherwise, false. - - - - - Summarize the local revision(s) of a working copy. - - The following example gets the revision of the current folder. - - - - - - - ]]> - - - - - Initializes a new instance of the class. - - - - - Returns the fully qualified path to the executable file. - - - The fully qualified path to the executable file. - - - - - Logs the starting point of the run to all registered loggers. - - A descriptive message to provide loggers, usually the command line and switches. - - - - Returns a string value containing the command line arguments to pass directly to the executable file. - - - A string value containing the command line arguments to pass directly to the executable file. - - - - - Runs the exectuable file with the specified task parameters. - - - true if the task runs successfully; otherwise, false. - - - - - Logs the events from text output. - - The single line. - The message importance. - - - Path to local working copy. - - - - Specifies whether to use the last committed revision number as - opposed to the last updated revision number. - - - - Revision number of the local working repository. - - - High revision number of the local working repository revision range. - - - Low revision number of the local working repository revision range. - - - True if working copy contains modifications. - - - True if working copy is switched. - - - - True if invoked on a directory that is not a working copy, - svnversion assumes it is an exported working copy and prints "exported". - - - - - Gets the with which to log errors. - - - The with which to log errors. - - - - Gets the name of the executable file to run. - - - The name of the executable file to run. - - - - Subversion Update command - - - - - Initializes a new instance of the class. - - - - - Indicates whether all task paratmeters are valid. - - - true if all task parameters are valid; otherwise, false. - - - - - Unzip a file to a target directory. - - Unzip file tasks - - ]]> - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets or sets the name of the zip file. - - The name of the zip file. - - - - Gets or sets the target directory. - - The target directory. - - - - Gets or sets a value indicating whether to overwrite any existing files on extraction. Defaults to true. - - true to overwrite any existing files on extraction; otherwise, false. - - - - Gets the files extracted from the zip. - - The files extracted from the zip. - - - - Generates version information based on various algorithms - - Get version information from file and increment revision. - - - - - - - - ]]> - - Specify Major and Minor version information and generate Build and Revision. - - - - - - - - ]]> - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets or sets the major version number. - - The major version number. - - - - Gets or sets the minor version number. - - The minor version number. - - - - Gets or sets the build version number. - - - The build version number. - - - - Gets or sets the revision version number. - - - The revision version number. - - - - Gets or sets the file used to initialize and persist the version. - - The version file. - - When specified, the task will attempt to load the previous version information from the file. - After updating the version, the new value will be saved to the file. - - If you do not specify a value for this property, the version will be calculated - based on the values passed to the , , - , and properties. The new version will not be persisted. - - - - Gets or sets the method used to generate a number - - - If value is not provided, None is assumed. - The number is set according to the following table: - - MajorTypeDescription - NoneThe number is not modified. - IncrementIncreases the previous value by 1. - - - - - - Gets or sets the method used to generate a number - - - If value is not provided, None is assumed. - The number is set according to the following table: - - MinorTypeDescription - NoneThe number is not modified. - IncrementIncreases the previous value by 1. - ResetResets the previous value to 0. - - - - - - Gets or sets the method used to generate a number - - - If value is not provided, None is assumed. - The number is set according to the following table: - - BuildTypeDescription - NoneThe number is not modified. - AutomaticThe number of days since . - IncrementIncreases the previous value by 1. - ResetResets the previous value to 0. - - - - - - Gets or sets the method used to generate a number - - - If value is not provided, None is assumed. - The number is set according to the following table: - - RevisionTypeDescription - NoneThe number is not modified. - AutomaticA number that starts at 0 at midnight, and constantly increases throughout the day (changing roughly every 1.3 seconds). Guaranteed to be safe for components of the AssemblyVersion attribute. - IncrementIncreases the previous value by 1. - BuildIncrementIncreases the previous value by 1 when the value of is unchanged. If the value of has changed, is reset to 0. - ResetResets the previous value to 0. - - - - - - Gets or sets the starting date used to calculate the number when is Automatic. - - The starting date for calculation of the build number. - - This value is only used when the is Automatic. - This default value is January 1, 2000. - - - - - Downloads a resource with the specified URI to a local file. - - Download the Microsoft.com home page. - - ]]> - - Download a page from your local intranet protected by Windows Authentication - - ]]> - - Download a page from a password protected website - - ]]> - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Determines which credentials to pass with the web request - - - - - - Gets or sets the name of the local file that is to receive the data. - - The name of the file. - - - - Gets or sets the URI from which to download data. - - The file URI. - - - - When true, the current user's credentials are used to authenticate against the remote web server - - - This value is ignored if the property is set to a non-empty value. - - - - The username used to authenticate against the remote web server - - - - - The password used to authenticate against the remote web server. A value for must also be provided. - - - - - The domain of the user being used to authenticate against the remote web server. A value for must also be provided. - - - - - Reads a value from a XML document using a XPath. - - Read all targest from a build project. - - - - - ]]> - - - If the XPath returns multiple nodes, the Value will - be a semicolon delimited list of the nodes text. - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets or sets the name of the XML file. - - The name of the XML file. - - - - Gets or sets the XPath. - - The XPath. - - - - Gets the value read from file. - - The value. - - If the XPath returns multiple nodes, the values will be semicolon delimited. - - - - - Gets or sets the default namespace. - - The namespace. - - - - Gets or sets the prefix to associate with the namespace being added. - - The namespace prefix. - - - - Updates a XML document using a XPath. - - Update a XML element. - - ]]> - - - The XML node being updated must exist before using the XmlUpdate task. - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets or sets the name of the XML file. - - The name of the XML file. - - - - Gets or sets the XPath. - - The XPath. - - - - Gets or sets the value to write. - - The value. - - - - Gets or sets a value indicating whether the matched node is deleted. - - true to delete matched node; otherwise, false. - - - - Gets or sets the default namespace. - - The namespace. - - - - Gets or sets the prefix to associate with the namespace being added. - - The namespace prefix. - - - - Create a zip file with the files specified. - - Create a zip file - - - - - - - ]]> - Create a zip file using a working directory. - - - - - - - ]]> - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, executes the task. - - - true if the task successfully executed; otherwise, false. - - - - - Gets or sets the name of the zip file. - - The name of the zip file. - - - - Gets or sets the zip level. Default is 6. - - The zip level. - 0 - store only to 9 - means best compression - - - - Gets or sets the files to zip. - - The files to zip. - - - - Gets or sets a value indicating whether this is flatten. - - true if flatten; otherwise, false. - - Flattening the zip means that all directories will be removed - and the files will be place at the root of the zip file - - - - - Gets or sets the comment. - - The comment. - - - - Gets or sets the working directory for the zip file. - - The working directory. - - The working directory is the base of the zip file. - All files will be made relative from the working directory. - - - - - Gets or sets the password. - - The password. - - - - Gets or sets the encryption algorithm. - - The encryption algorithm. - - Possible values are None, PkzipWeak, WinZipAes128 and WinZipAes256 - - -
-
diff --git a/tools/MSBuildCommunityTasks/MSBuild.Community.Tasks.xsd b/tools/MSBuildCommunityTasks/MSBuild.Community.Tasks.xsd deleted file mode 100644 index 336350be49..0000000000 --- a/tools/MSBuildCommunityTasks/MSBuild.Community.Tasks.xsd +++ /dev/null @@ -1,6337 +0,0 @@ - - - - - - Installs and register script mappings for ASP.NET - - - - - - - [Optional] The method used to determine if ASP.NET script mappings should be applied - - - - - [Optional] When , the aspnet_client scripts will be installed. No script mappings will be updated. - - - - - - [Optional] The web application that should have its script maps updated. - - - - - [Optional] When , script maps are applied recursively under . - - - - - - - [Optional] The version of ASP.NET to install - - - - - - - - - Generates an AssemblyInfo files - - - - - - - [Optional] Gets or sets whether to allow strong-named assemblies to be called by partially trusted code. - - - - - [Optional] Gets or sets the assembly company. - - - - - [Optional] Gets or sets the assembly configuration. - - - - - [Optional] Gets or sets the assembly copyright. - - - - - [Optional] Gets or sets the assembly culture. - - - - - [Optional] Gets or sets the assembly delay sign value. - - - - - [Optional] Gets or sets the assembly description. - - - - - [Optional] Gets or sets the assembly file version. - - - - - [Optional] Gets or sets the assembly informational version. - - - - - [Optional] Gets or sets the assembly key file. - - - - - [Optional] Gets or sets the assembly key name. - - - - - [Optional] Gets or sets the assembly product. - - - - - [Optional] Gets or sets the assembly title. - - - - - [Optional] Gets or sets the assembly trademark. - - - - - [Optional] Gets or sets the assembly version. - - - - - [Optional] Gets or sets a value indicating whether [CLSCompliant]. - - - - - Gets or sets the code language. - - - - - [Optional] Gets or sets a value indicating whether [COMVisible]. - - - - - [Optional] Gets or sets a value indicating whether to generate the ThisAssmebly class. - - - - - [Optional] Gets or sets the GUID. - - - - - [Optional] Makes it possible to make certain assemblies able to use constructs marked as internal. - Example might be setting this value to "UnitTests" assembly. The typical use case might - be constructors in classes which shouldn't be available to other assemblies, but the unit - tests should be able to use them. - - - - - [Optional] Gets or sets the neutral language which is used as a fallback language configuration - if the locale on the computer isn't supported. Example is setting this to "en-US". - - - - - [Optional] [Output] Gets or sets the output file. - - - - - [Optional] Gets or sets the assembly delay sign value. - - - - - [Optional] Gets or sets the ultimate resource fallback location. - - - - - [Optional] Gets or sets the assembly delay sign value. - - - - - - - - - Changes the attributes of files and/or directories - - - - - - - [Optional] Gets or sets file's archive status. - - - - - [Optional] Gets or sets a value indicating file is compressed. - - - - - [Optional] Gets or sets the list of directories to change attributes on. - - - - - [Optional] Gets or sets a value indicating file is encrypted. - - - - - [Optional] Gets or sets the list of files to change attributes on. - - - - - [Optional] Gets or sets a value indicating file is hidden, and thus is not included in an ordinary directory listing. - - - - - [Optional] Gets or sets a value indicating file is normal and has no other attributes set. - - - - - [Optional] Gets or sets a value indicating file is read-only. - - - - - [Optional] Gets or sets a value indicating file is a system file. - - - - - - - - - A task to play the sound of a beep through the console speaker. - - - - - - - [Optional] Gets or sets the of the beep measured in milliseconds. - Defaults to 200 milliseconds. - - - - - [Optional] Gets or sets the frequency of the beep, ranging from 37 to 32767 hertz. - Defaults to 800 hertz. - - - - - - - - - Provides information about the build computer. - - - - - - - [Optional] [Output] Gets the IP address of the build computer. - - - - - [Optional] [Output] Gets the host name of the build computer. - - - - - [Optional] [Output] Gets the platform identifier of the build computer's operating system . - - - - - [Optional] [Output] Gets the version number of the build computer's operating system. - - - - - - - - - Delete a directory tree. This task supports wild card directory selection. - - - - - - - [Optional] [Output] Gets the deleted directories. - - - - - Gets or sets the directories to be deleted. - - - - - [Optional] Gets or sets a value indicating whether this is recursive. - - - - - - - - - Replace text in file(s) using a Regular Expression. - - - - - - - [Optional] The character encoding used to read and write the file. - - - - - [Optional] Gets or sets the files to update. - - - - - [Optional] Gets or sets a value specifies case-insensitive matching. . - - - - - [Optional] Gets or sets a value changing the meaning of ^ and $ so they match at the beginning and end, - respectively, of any line, and not just the beginning and end of the entire string. - - - - - [Optional] Gets or sets the regex. - - - - - [Optional] Gets or sets the maximum number of times the replacement can occur. - - - - - [Optional] Gets or sets the replacement text. - - - - - [Optional] Gets or sets a value changing the meaning of the dot (.) so it matches - every character (instead of every character except \n). - - - - - [Optional] When TRUE, a warning will be generated to show which file was not updated. - - - - - - - - - Creates a full remote directory on the remote server if not exists using the File Transfer Protocol (FTP). - This can be one directory or a full path to create. - - - - - - - [Optional] Gets or sets the size of the data buffer. - - - - - [Optional] Gets the last recieved FTP response over the client socket. - - - - - [Optional] Gets or sets the password to login. - - - - - [Optional] Gets or sets the port number. - - - - - Gets or sets the remote directory to create. - - - - - Gets or sets the server host. - - - - - [Optional] Gets or sets the username to login. - - - - - - - - - Determ if a remote directory exists on a FTP server or not. - - - - - - - [Optional] Gets or sets the size of the data buffer. - - - - - [Optional] [Output] Gets an indication whether the directory exists on the server. - - - - - [Optional] Gets the last recieved FTP response over the client socket. - - - - - [Optional] Gets or sets the password to login. - - - - - [Optional] Gets or sets the port number. - - - - - Gets or sets the remote directory to create. - - - - - Gets or sets the server host. - - - - - [Optional] Gets or sets the username to login. - - - - - - - - - Uploads a full directory content to a remote directory. - - - - - - - [Optional] Gets or sets the size of the data buffer. - - - - - [Optional] Gets the last recieved FTP response over the client socket. - - - - - [Optional] Gets or sets the local directory that contains the content to upload. - - - - - [Optional] Gets or sets the password to login. - - - - - [Optional] Gets or sets the port number. - - - - - [Optional] Gets or sets a value indicating whether the subdirectories of the local directory should be created remotely and the content of these should also be uploaded. - - - - - [Optional] Gets or sets the remote directory destination for the local files. - - - - - Gets or sets the server host. - - - - - [Optional] Gets or sets the username to login. - - - - - - - - - Uploads a group of files using File Transfer Protocol (FTP). - - - - - - - [Optional] Gets or sets the single file to upload. Use - this or LocalFiles, but not both. - - - - - [Optional] Gets or sets the local files to upload. Use this - or LocalFile, but not both. - - - - - [Optional] Gets or sets the password. - - - - - Gets or sets the remote files to upload. - Each item in this list should have a corresponding item in LocalFiles. - - - - - Gets or sets the remote URI to upload. - - - - - [Optional] Gets or sets the behavior of a client application's data transfer process. - - - - - [Optional] Gets or sets the username. - - - - - - - - - Uses FxCop to analyse managed code assemblies and reports on - their design best-practice compliance. - - - - - - - [Optional] Specifies the file name for the analysis report. - - - - - [Optional] Applies the XSL transformation specified in /outXsl to the - analysis report before saving the file. - - - - - [Optional] Specifies the XSL or XSLT file that contains a transformation to - be applied to the analysis output before it is displayed in the console. - - - - - [Optional] Specifies the custom dictionary. - - - - - [Optional] Specifies additional directories to search for assembly dependencies. - FxCopCmd always searches the target assembly directory and the current - working directory. - - - - - [Optional] Directs analysis output to the console or to the - Output window in Visual Studio .NET. By default, - the XSL file FxCopConsoleOutput.xsl is applied to the - output before it is displayed. - - - - - - [Optional] Gets or sets a value indicating whether the build should - fail if static code analysis reports errors. Defaults to - true. - - - - - [Optional] Specifies the name of an analysis report or project file to import. - Any messages in the imported file that are marked as excluded are not - included in the analysis results. - - - - - [Optional] Includes a summary report with the informational - messages returned by FxCopCmd. - - - - - [Optional] Specifies the XSL or XSLT file that is referenced by the - xml-stylesheet processing instruction in the analysis report. - - - - - [Optional] Specifies the location of the version of Mscorlib.dll - that was used when building the target assemblies if this - version is not installed on the computer running FxCopCmd. - - - - - [Optional] Specifies the filename of FxCop project file. - - - - - [Optional] Specifies the filename(s) of FxCop rule assemblies - - - - - [Optional] The list of rules to run - - - - - [Optional] Saves the results of the analysis in the project file. - - - - - [Optional] Tells FxCop to search the GAC for assembly references. This parameter was added in FxCop 1.35 - - - - - [Optional] Specifies the target assembly to analyze. - - - - - - - [Optional] Comma-separated list of type names to analyze. This option disables - analysis of assemblies, namespaces, and resources; only the specified - types and their members are included in the analysis. - Use the wildcard character '*' at the end of the name to select multiple types. - - - - - [Optional] Gets or sets a value indicating whether the output is verbose. - - - - - [Optional] Gets or sets the working directory. - - - - - - - - - MSBuild task to install and uninstall assemblies into the GAC - - - - - - - Gets or sets the assembly name or file. - - - - - [Optional] Gets or sets the command. - - - - - [Optional] [Output] Gets the number of assemblies that failed to installed/uninstalled. - - - - - [Optional] Gets or sets a value indicating whether to force reinstall of an assembly. - - - - - [Optional] Gets or sets a value indicating whether related files are included when installing in GAC. - - - - - [Optional] [Output] Gets the installed assembly names. - - - - - [Optional] [Output] Gets the installed assembly paths. - - - - - [Optional] Gets or sets a value indicating whether warning messages are output. - - - - - [Optional] Gets or sets the related file extensions to copy when is true. - - - - - [Optional] [Output] Gets the number of assemblies that were skipped during installed/uninstalled. - - - - - [Optional] [Output] Gets the number of assemblies successfully installed/uninstalled. - - - - - - - - - - - - - Install the list of assemblies into the GAC. - - - - - Uninstall the list of assembly names from the GAC. - - - - - - - - - Retrieves the list of Projects contained within a Visual Studio Solution (.sln) file - - - - - - - [Optional] [Output] A list of the project files found in - - - - - Name of Solution to get Projects from - - - - - - - - - A task for Git commands. - - - - - - - [Optional] Gets or sets the raw arguments to pass to the git command. - - - - - [Optional] Gets or sets the command to run. - - - - - - [Optional] Gets or sets the local or working path for git command. - - - - - - - - - - - A task for git to get the current commit hash. - - - - - - - [Optional] Gets or sets the raw arguments to pass to the git command. - - - - - [Optional] Gets or sets the command to run. - - - - - [Optional] [Output] Gets or sets the commit hash. - - - - - - [Optional] Gets or sets the local or working path for git command. - - - - - [Optional] Gets or sets the revision to get the version from. Default is HEAD. - - - - - [Optional] Gets or sets a value indicating whether to abbreviate to a shorter unique name. - - - - - - - - - - - Html Help 1x compiler task. - - - - - - - - Gets or sets the project file path. - - - - - - - - - - - A Html Help 2.0 compiler task. - - - - - - - - [Optional] Gets or sets the log file. - - - - - [Optional] Gets or sets a value indicating whether no error messages will be output. - - - - - [Optional] Gets or sets a value indicating whether no info messages will be output. - - - - - [Optional] Gets or sets a value indicating whether no warning messages will be output. - - - - - [Optional] Gets or sets the output file. - - - - - Gets or sets the project file path. - - - - - [Optional] Gets or sets the project root. - - - - - [Optional] Gets or sets a value indicating quite mode. - - - - - - - [Optional] Gets or sets the uncompile directory. - - - - - [Optional] Gets or sets the uncompile file. - - - - - - - - - Allows control for an application pool on a local or remote machine with IIS installed. The default is - to control the application pool on the local machine. If connecting to a remote machine, you can - specify the and for the task - to run under. - - - - - - - Gets or sets the application pool action. - - - - - Gets or sets the name of the app pool. - - - - - [Optional] Gets or sets host header. Used when you have more than one website in IIS that have the same port but different host headers. - - - - - [Optional] Gets or sets the password for the account the task will run under. This property - is needed if you specified a for a remote machine. - - - - - [Optional] Gets or sets the name of the server. The default value is 'localhost'. - - - - - [Optional] Gets or sets the server port. - - - - - [Optional] Gets or sets the username for the account the task will run under. This property - is needed if you specified a for a remote machine. - - - - - - - - - - - - - Start the applicaiton pool - - - - - Stop the applicaiton pool - - - - - Restart the applicaiton pool - - - - - Recycle the applicaiton pool - - - - - - - - - Creates a new application pool on a local or remote machine with IIS installed. The default is - to create the new application pool on the local machine. If connecting to a remote machine, you can - specify the and for the task - to run under. - - - - - - - Gets or sets the name of the application pool. - - - - - [Optional] The AppPoolAutoStart property indicates to the World Wide Web Publishing Service (WWW service) - to automatically start an application pool when the application pool is created or when IIS - is started, if the value of this property is set to true. - - - - - [Optional] The AppPoolIdentityType property allows application pools to run as a specific user account: - - 0 - The application pool runs as NT AUTHORITY\SYSTEM. - 1 - The application pool runs as NT AUTHORITY\LOCAL SERVICE. - 2 - The application pool runs as NT AUTHORITY\NETWORK SERVICE. - 3 - The application pool runs as a specific user account, defined by the property. - - - - - [Optional] The AppPoolQueueLength property indicates to the Universal Listener how many requests - to queue up for an application pool before rejecting future requests. When the limit - for this property is exceeded, IIS rejects the additional requests with a 503 error. - - - - - [Optional] The AutoShutdownAppPoolExe property specifies an executable to run when the World Wide Web - Publishing Service (WWW service) shuts down an application pool for rapid fail protection. You - can use the property to send parameters to the executable. - - - - - [Optional] The AutoShutdownAppPoolParams property specifies any command-line parameters for the executable that - is specified in the AutoShutdownAppPoolExe property. You can use these two properties in the following - way to send e-mail, for example, when the World Wide Web Publishing Service (WWW service) shuts down - an application pool for rapid fail protection: - - AutoShutdownAppPoolExe = "C:\LogAndSendMail.bat" - AutoShutdownAppPoolParams = "-AppPoolName %1%" - - where %1% represents the application pool name. - - - - - [Optional] The CPUAction property configures the action(s) that IIS takes when Microsoft Windows NT ® job objects - run. Only one Windows NT job object exists per application pool, therefore the CPUAction property - is configured on a per application pool basis. - - Possible values: - 0 - No action is taken except that a warning is written to the event log when the CPU limit is exceeded. - 1 - Application pool worker processes that exceed their CPU limit will be forced to shut down. - - - - - [Optional] The CPULimit property configures the maximum percentage of CPU resources that worker processes - in an application pool are allowed to consume over a period of time, as indicated by the - property. Set this property by specifying a percentage of CPU - usage, multiplied by 1000. For example, if you want the CPU usage limit to be 50%, set CPULimit to 50,000. - - - - - [Optional] The CPUResetInterval property specifies the reset period (in minutes) for CPU monitoring and - throttling limits on the application pool. When the number of minutes elapsed since the last - process accounting reset equals the number specified by this property, IIS will reset the CPU - timers for both the logging and limit intervals. Setting the value of this property to 0 - disables CPU monitoring. - - - - - [Optional] The DisallowOverlappingRotation property specifies whether or not the World Wide Web Publishing - Service (WWW Service) should start up another worker process to replace the existing worker - process while it is shutting down. - - - - - [Optional] The DisallowRotationOnConfigChange property specifies whether or not the World Wide Web Publishing - Service (WWW Service) should rotate worker processes in an application pool when the configuration - has changed. This means that the worker processes will not pick up application pool changes to - values passed to the worker process, such as and . - - - - - [Optional] Gets or sets host header. Used when you have more than one website in IIS that have the same port but different host headers. - - - - - [Optional] The IdleTimeout property specifies how long (in minutes) a worker process should run idle if no new - requests are received and the worker process is not processing requests. After the allotted time - passes, the worker process should request to be shut down by the World Wide Web Publishing Service (WWW Service). - - - - - [Optional] The LoadBalancerCapabilities property specifies behavior when a service is unavailable. A setting of 1 - terminates the connection. A setting of 2 sends error code 503. - - - - - [Optional] The LogEventOnRecycle property specifies that IIS should log an event when an application pool is - recycled. Application pools recycle for a variety of reasons. In order for IIS to log the event, the - LogEventOnRecycle property must have a bit set corresponding to the reason for the recycle. - - - - - [Optional] The LogonMethod property contains an integer that specifies the logon method for cleartext - logons. Valid settings are: - - 0 for interactive logon. - 1 for batch logon. - 2 for network logon. - 3 for cleartext logon. - - - - - [Optional] The MaxProcesses property determines the maximum number of worker processes an application pool - allows to service requests for an application pool. This property cannot be set to 0 because there - are no unmanaged pools. - - - - - [Optional] The OrphanActionExe property specifies an executable to run when the World Wide Web Publishing - Service (WWW service) orphans a worker process. You can use the property - to send parameters to the executable. - - - - - [Optional] The OrphanActionParams property specifies command-line parameters for the executable - specified by the property. - - - - - [Optional] The OrphanWorkerProcess property, when set to true, notifies the World Wide Web Publishing - Service (WWW Service) not to terminate a worker process that fails to respond to pings, but - to instead orphan the worker process in the application pool if the worker process suffers - fatal errors. - - - - - [Optional] Gets or sets the password for the account the task will run under. This property - is needed if you specified a for a remote machine. - - - - - [Optional] The PeriodicRestartMemory property specifies the amount of virtual memory (in KB) that a - worker process can use before the worker process recycles. The maximum value supported - for this property is 4,294,967 KB. - - - - - [Optional] The PeriodicRestartPrivateMemory property specifies the amount of private memory (in KB) that a - worker process can use before the worker process recycles. The maximum value supported - for this property is 4,294,967 KB. - - - - - [Optional] The PeriodicRestartRequests property indicates the number of requests the OOP application - should process, after which it is recycled. - - - - - [Optional] The PeriodicRestartSchedule property specifies the time (in 24 hour format) that the application - will be rotated. Each time is in local time and is specified in the following format: - - PeriodicRestartSchedule="hh:mm,hh:mm,hh:mm" - - - - - [Optional] The PeriodicRestartTime property specifies the period of time, in minutes, after which IIS - rotates an isolated OOP application. Setting the value of this property to 0 disables the - property. The maximum supported value for this property is 71,582. - - - - - [Optional] The PingingEnabled property specifies whether the World Wide Web Publishing Service - (WWW Service) should periodically monitor the health of a worker process. Setting the - value of this property to true indicates to the WWW service to monitor the worker - processes to ensure that the they are running and healthy. - - - - - [Optional] The PingInterval property specifies the period of time (in seconds) between health-monitoring - pings that the World Wide Web Publishing Service (WWW Service) sends to a worker process. - - - - - [Optional] The PingResponseTime property specifies the amount of time (in seconds) that a worker process - is given to respond to a health monitoring ping. After the time limit is exceeded, the World - Wide Web Publishing Service (WWW Service) terminates the worker process. - - - - - [Optional] Setting the RapidFailProtection property to true instructs the World Wide Web Publishing - Service (WWW service) to put all applications in an application pool out of service if the - number of worker process crashes has reached the maximum specified by the - property, within the number of minutes specified - by the property. - - - - - [Optional] The RapidFailProtectionInterval property specifies the number of minutes before the failure - count for a process is reset. See . - - - - - [Optional] The RapidFailProtectionMaxCrashes property specifies the maximum number of failures - allowed within the number of minutes specified by the - property. See . - - - - - [Optional] Gets or sets the name of the server. The default value is 'localhost'. - - - - - [Optional] Gets or sets the server port. - - - - - [Optional] The ShutdownTimeLimit property specifies the amount of time (in seconds) after a recycle - threshold has been reached that IIS waits for all old requests to finish running in a worker - process before terminating the worker process. - - - - - [Optional] Setting the SMPAffinitized property to true indicates that a particular worker process - assigned to an application pool should be assigned to a given CPU. This property is used - in conjunction with the property to configure a - particular processor a worker process will be assigned to. - - - - - [Optional] The SMPProcessorAffinityMask property configures the hexadecimal processor mask. The hexadecimal - processor mask indicates to which CPU the worker processes in an application pool should be - bound. Before this property takes affect, the property must be set - to true for the application pool. These properties cannot be set through IIS Manager. - - Do not set this property to zero. Doing so causes no SMP affinity to be configured, creating an - error condition. The default DWORD value is 4294967295 (or -1), which is represented in hexadecimal - as 0xFFFFFFFF. A value of 0xFFFFFFFF in SMPProcessorAffinityMask indicates that all processors are enabled. - - - - - [Optional] The value of the StartupTimeLimit property specifies the amount of time (in seconds) that the World Wide - Web Publishing Service (WWW Service) should wait for a worker process to finish starting up and - reporting to the WWW Service. - - - - - [Optional] Gets or sets the username for the account the task will run under. This property - is needed if you specified a for a remote machine. - - - - - [Optional] The WAMUserName property specifies the account user name that IIS uses by default as the COM+ - application identity for newly created IIS out-of-process applications. The values of this - property and its companion property, , are set when IIS is installed, and - match the user name and password values in the Microsoft Windows user account, which is established - at the same time. Changing the value of this property is not recommended. If you do, change - it to a valid Windows user account, and change WAMUserPass to the corresponding password - for the new account. - - Important: - Changes to WAMUserName and WAMUserPass may disrupt the operation of existing IIS out-of-process - applications. You can synchronize application identities using Component Services to edit the - user name and password values, found on the Identity tab of the property sheet for each package. - - In-process applications are not affected by these property values. - - - - - [Optional] The WAMUserPass property specifies the password for the account that IIS uses by default as the COM+ - application identity for newly created IIS out-of-process applications. The values of this property - and its companion property, , are set when IIS is installed, and match the - password and user name values in the Microsoft Windows user account (IWAM_ MachineName, where MachineName - is the name of the machine on which IIS is installed) established at the same time. - - Important: - Changing the value of this property is not recommended. If you do, you must change the Windows account - password to the identical value. You must also synchronize existing IIS out-of-process application - identities, using Component Services to edit the user name and password values, which are found on the - Identity tab of the property sheet for each package. - - In-process applications are not affected by these property values. - - - - - - - - - Deletes an existing application pool on a local or remote machine with IIS installed. The default is - to delete an existing application pool on the local machine. If connecting to a remote machine, you can - specify the and for the task - to run under. - - - - - - - Gets or sets the name of the application pool. - - - - - [Optional] Gets or sets host header. Used when you have more than one website in IIS that have the same port but different host headers. - - - - - [Optional] Gets or sets the password for the account the task will run under. This property - is needed if you specified a for a remote machine. - - - - - [Optional] Gets or sets the name of the server. The default value is 'localhost'. - - - - - [Optional] Gets or sets the server port. - - - - - [Optional] Gets or sets the username for the account the task will run under. This property - is needed if you specified a for a remote machine. - - - - - - - - - Creates a new web directory on a local or remote machine with IIS installed. The default is - to create the new web directory on the local machine. The physical path is required to already exist - on the target machine. If connecting to a remote machine, you can specify the - and for the task to run under. - - - - - - - [Optional] Gets or sets a value that indicates if the file - or the contents of the folder may be executed, regardless of file type. - - - - - [Optional] A value of true indicates that remote requests to execute applications - are denied; only requests from the same computer as the IIS server succeed - if the AccessExecute property is set to true. You cannot set - AccessNoRemoteExecute to false to enable remote requests, and set - to false to disable local requests. - - - - - [Optional] A value of true indicates that remote requests to view files are denied; only - requests from the same computer as the IIS server succeed if the - property is set to true. You cannot set to false to enable - remote requests, and set to false to disable local requests. - - - - - [Optional] A value of true indicates that remote requests to view dynamic content are denied; only - requests from the same computer as the IIS server succeed if the property - is set to true. You cannot set AccessNoRemoteScript to false to enable remote requests, - and set to false to disable local requests. - - - - - [Optional] A value of true indicates that remote requests to create or change files are denied; only - requests from the same computer as the IIS server succeed if the property - is set to true. You cannot set AccessNoRemoteWrite to false to enable remote requests, - and set to false to disable local requests. - - - - - [Optional] A value of true indicates that the file or the contents of the folder may be read - through Microsoft Internet Explorer. - - - - - [Optional] A value of true indicates that the file or the contents of the folder may be executed - if they are script files or static content. A value of false only allows static files, - such as HTML files, to be served. - - - - - [Optional] A value of true indicates that users are allowed to access source code if either - Read or Write permissions are set. Source code includes scripts in Microsoft ® Active - Server Pages (ASP) applications. - - - - - [Optional] A value of true indicates that file access requires SSL file permission processing, with - or without a client certificate. - - - - - [Optional] A value of true indicates that file access requires SSL file permission processing - with a minimum key size of 128 bits, with or without a client certificate. - - - - - [Optional] A value of true indicates that SSL file permission processing maps a client certificate - to a Microsoft Windows ® operating system user-account. The property - must also be set to true for the mapping to occur. - - - - - [Optional] A value of true indicates that SSL file access processing requests a certificate from - the client. A value of false indicates that access continues if the client does not have - a certificate. Some versions of Internet Explorer will close the connection if the server - requests a certificate and a certificate is not available (even if - is also set to true). - - - - - [Optional] A value of true indicates that SSL file access processing requests a certificate from the - client. If the client provides no certificate, the connection is closed. - must also be set to true when using AccessSSLRequireCert. - - - - - [Optional] A value of true indicates that users are allowed to upload files and their associated - properties to the enabled directory on your server or to change content in a Write-enabled - file. Write can be implemented only with a browser that supports the PUT feature of - the HTTP 1.1 protocol standard. - - - - - [Optional] The AnonymousPasswordSync property indicates whether IIS should handle the user password - for anonymous users attempting to access resources. - - - - - [Optional] The AppAllowClientDebug property specifies whether ASP client-side debugging - is enabled. This property is independent of , which - applies to server-side debugging. - - - - - [Optional] The AppAllowDebugging property specifies whether ASP debugging is enabled on - the server. This property is independent of the property, - which applies to client-side debugging. - - - - - [Optional] The AspAllowSessionState property enables session state persistence for the ASP application. - - - - - [Optional] The AspBufferingOn property specifies whether output from an ASP application will be buffered. - - - - - [Optional] The AspEnableApplicationRestart determines whether an ASP application can be - automatically restarted. When changes are made to Global.asa or metabase properties - that affect an application, the application will not restart unless the - AspEnableApplicationRestart property is set to true. - - - - - [Optional] The AspEnableAspHtmlFallback property controls the behavior of ASP when a - new request is to be rejected due to a full request queue. - - - - - [Optional] The AspEnableChunkedEncoding property specifies whether HTTP 1.1 chunked - transfer encoding is enabled for the World Wide Web Publishing Service (WWW service). - - - - - [Optional] The AspEnableParentPaths property specifies whether an ASP page allows paths - relative to the current directory (using the ..\ notation) or above the current directory. - - - - - [Optional] The AspEnableTypelibCache property specifies whether type libraries are cached - on the server. The World Wide Web Publishing Service (WWW service) setting for - this property is applicable to all in-process and pooled out-of-process application - nodes, at all levels. Metabase settings at the Web server level or lower are ignored - for in-process and pooled out-of-process applications. However, settings at the Web - server level or lower are used if that node is an isolated out-of-process application. - - - - - [Optional] The AspErrorsToNTLog property specifies which ASP errors are written to the - Windows event log. ASP errors are written to the client browser and to the IIS - log files by default. - - - - - [Optional] The AspExceptionCatchEnable property specifies whether ASP pages trap exceptions - thrown by components. - - - - - [Optional] The AspLogErrorRequests property controls whether the Web server writes ASP errors - to the application section of the Windows event log. ASP errors are written to the - client browser and to the IIS log files by default. - - - - - [Optional] The AspScriptErrorMessage property specifies the error message to send to the browser - if specific debugging errors are not sent to the client (if - is set to false). - - - - - [Optional] The AspScriptErrorSentToBrowser property specifies whether the Web server writes - debugging specifics (file name, error, line number, description) to the client - browser, in addition to logging them to the Windows Event Log. The - property provides the error message to be sent if this property is set to false. - - - - - [Optional] The AspTrackThreadingModel property specifies whether IIS checks the threading model - of any components (COM objects) that your application creates. The preferred setting - of this metabase property is false. - - - - - [Optional] Specifies Anonymous authentication as one of the possible Windows authentication - schemes returned to clients as being available. - - - - - [Optional] Specifies Basic authentication as one of the possible Windows authentication - schemes returned to clients as being available. - - - - - [Optional] Specifies Integrated Windows authentication (also known as Challenge/Response or - NTLM authentication) as one of the possible Windows authentication schemes - returned to clients as being available. - - - - - [Optional] Setting this flag to true specifies that authentication persists only for a single - request on a connection. IIS resets the authentication at the end of each request, and - forces re-authentication on the next request of the session. - - - - - [Optional] Setting this flag to true specifies that authentication is valid for a single request if - by proxy. IIS will reset the authentication at the end of the request and force - re-authentication on the next request if the current authenticated request is by - proxy of any type. - - - - - [Optional] Setting this flag to true specifies authentication will persist only across single - requests on a connection if the connection is by proxy. IIS will reset the authentication - at the end of the request if the current authenticated request is by proxy and it is - not the special case where IIS is running MSPROXY. - - - - - [Optional] The CacheControlNoCache property specifies the HTTP 1.1 directive to prevent caching of content. - - - - - [Optional] The CacheISAPI property indicates whether ISAPI extensions are cached in memory after first use. - - - - - [Optional] The ContentIndexed property specifies whether the installed content indexer should - index content under this directory tree. - - - - - [Optional] This property specifies whether process accounting and throttling should be performed - for ISAPI extensions and ASP applications. To perform process accounting on CGI - applications, use the property . - - - - - [Optional] This property indicates whether IIS should perform process accounting for CGI - applications. To effectively throttle CGI applications, use the CgiTimeout - property. To use process accounting for ISAPI and ASP applications, use . - - - - - [Optional] The CreateCGIWithNewConsole property indicates whether a CGI application runs in its own console. - - - - - [Optional] The CreateProcessAsUser property specifies whether a CGI process is created in the system context or in the context of the requesting user. - - - - - [Optional] The DefaultDoc contains one or more file names of default documents that will be returned - to the client if no file name is included in the client's request. The default document - will be returned if the flag of the DirBrowseFlags property - is set to true for the directory. This property can contain a list of default document - file names separated by a comma and a space, for example Default.htm, Default.asp. - - - - - [Optional] When set to true, date information is displayed when browsing directories. - - - - - [Optional] When set to true, file name extensions are displayed when browsing directories. - - - - - [Optional] When set to true, date information is displayed in extended format when displaying directories. - - - - - [Optional] When set to true, file size information is displayed when browsing directories. - - - - - [Optional] When set to true, file time information is displayed when displaying directories. - - - - - [Optional] The DontLog property specifies whether client requests are written to the IIS log files. - - - - - [Optional] When set to true, the default document (specified by the property) for - a directory is loaded when the directory is browsed. - - - - - [Optional] When set to true, directory browsing is enabled. - - - - - [Optional] The EnableDocFooter property enables or disables custom footers specified by - the DefaultDocFooter property. - - - - - [Optional] The EnableReverseDns property enables or disables reverse Domain Name Server (DNS) lookups - for the World Wide Web Publishing Service (WWW service). Reverse lookups involve looking - up the domain name when the IP address is known. Reverse DNS lookups can use significant - resources and time. - - - - - [Optional] Gets or sets host header. Used when you have more than one website in IIS that have the same port but different host headers. - - - - - [Optional] Gets or sets the password for the account the task will run under. This property - is needed if you specified a for a remote machine. - - - - - [Optional] Gets or sets the name of the server. The default value is 'localhost'. - - - - - [Optional] Gets or sets the server port. - - - - - [Optional] The SSIExecDisable property specifies whether server-side include (SSI) #exec directives - are disabled under this path. - - - - - [Optional] The UNCAuthenticationPassthrough property enables user authentication passthrough - for Universal Naming Convention (UNC) virtual root access (for authentication schemes - that support delegation). - - - - - [Optional] Gets or sets the username for the account the task will run under. This property - is needed if you specified a for a remote machine. - - - - - Gets or sets the name of the virtual directory. - - - - - Gets or sets the virtual directory physical path. The physical directory must - exist before this task executes. - - - - - - - - - Deletes a web directory on a local or remote machine with IIS installed. The default is - to delete the web directory on the local machine. If connecting to a remote machine, you - can specify the and for the - task to run under. - - - - - - - [Optional] Gets or sets host header. Used when you have more than one website in IIS that have the same port but different host headers. - - - - - [Optional] Gets or sets the password for the account the task will run under. This property - is needed if you specified a for a remote machine. - - - - - [Optional] Gets or sets the name of the server. The default value is 'localhost'. - - - - - [Optional] Gets or sets the server port. - - - - - [Optional] Gets or sets the username for the account the task will run under. This property - is needed if you specified a for a remote machine. - - - - - Gets or sets the name of the virtual directory. - - - - - - - - - Sets an application mapping for a filename extension on an existing web directory. - - - - - - - [Optional] Set to true when you want the application to run in a directory without Execute permissions. - - - - - [Optional] The full path to the executable used to respond to requests for a Uri ending with - - - - - The filename extension that will be mapped to an executable. - - - - - [Optional] Gets or sets host header. Used when you have more than one website in IIS that have the same port but different host headers. - - - - - [Optional] Indicates whether should be mapped to the ASP.NET runtime. - - - - - [Optional] Gets or sets the password for the account the task will run under. This property - is needed if you specified a for a remote machine. - - - - - [Optional] Gets or sets the name of the server. The default value is 'localhost'. - - - - - [Optional] Gets or sets the server port. - - - - - [Optional] Gets or sets the username for the account the task will run under. This property - is needed if you specified a for a remote machine. - - - - - [Optional] A comma-separated list of the HTTP verbs to include in the application mapping. - - - - - [Optional] Set to true to instruct the Web server to verify the existence of the requested script file and to ensure that the requesting user has access permission for that script file. - - - - - Gets or sets the name of the virtual directory. - - - - - - - - - Reads and modifies a web directory configuration setting. - - - - - - - [Optional] Gets or sets host header. Used when you have more than one website in IIS that have the same port but different host headers. - - - - - [Optional] Gets or sets the password for the account the task will run under. This property - is needed if you specified a for a remote machine. - - - - - [Optional] Gets or sets the name of the server. The default value is 'localhost'. - - - - - [Optional] Gets or sets the server port. - - - - - Gets or sets the configuration setting to read or modify. - - - - - [Optional] [Output] Gets or sets the value of on the web directory - - - - - [Optional] Gets or sets the username for the account the task will run under. This property - is needed if you specified a for a remote machine. - - - - - Gets or sets the name of the virtual directory. - - - - - - - - - A wrapper for the ILMerge tool. - - - - - - - [Optional] Gets or sets the names of public types - to be renamed when they are duplicates. - - - - - [Optional] Gets or sets a value indicating whether to treat an assembly - with a zero PeKind flag - (this is the value of the field listed as .corflags in the Manifest) - as if it was ILonly. - - - - - [Optional] Gets or sets the attribute assembly - from whre to get all of the assembly-level attributes - such as Culture, Version, etc. - It will also be used to get the Win32 Resources from. - - - - - [Optional] Gets or sets a value indicating whether - to augment the list of input assemblies - to its "transitive closure". - - - - - [Optional] Gets or sets a value indicating whether - to copy the assembly level attributes - of each input assembly over into the target assembly. - - - - - [Optional] Gets or sets a value indicating whether - to preserve any .pdb files - that are found for the input assemblies - into a .pdb file for the target assembly. - - - - - [Optional] Gets or sets a value indicating whether - the target assembly will be delay signed. - - - - - [Optional] Gets or sets the file - that will be used to identify types - that are not to have their visibility modified. - - - - - - Gets or sets the input assemblies to merge. - - - - - [Optional] Gets or sets a value indicating whether whether types in assemblies other than the primary assembly have their visibility modified. - - - - - [Optional] Gets or sets the .snk file - to sign the target assembly. - - - - - [Optional] Gets or sets a log file - to write log messages to. - - - - - Gets or sets the target assembly. - - - - - [Optional] Gets or sets a value indicating whether - external assembly references in the manifest - of the target assembly will use public keys (false) - or public key tokens (true). - - - - - [Optional] Gets or sets the directories to be used to search for input assemblies. - - - - - [Optional] Gets or sets the indicator - whether the target assembly is created as a library (Dll), - a console application (Exe) or as a Windows application (WinExe). - - - - - [Optional] Gets or sets the directory in which mscorlib.dll is to be found. - - - - - [Optional] Gets or sets the .NET framework version for the target assembly. - - - - - - - [Optional] Gets or sets the version number of the target assembly. - - - - - [Optional] Gets or sets a value indicating whether - to merge XML documentation files - into one for the target assembly. - - - - - - - - - MSBuild task to create installer with InnoSetup - - - - - - - - [Optional] Specify output filename - - - - - [Optional] Specify output path - - - - - [Optional] Quiet compile - - - - - Filename of Inno Setup script (.iss) - - - - - - - - - - - Installs assemblies. - - - - - - - [Optional] The assemblies to process, identified by their filename. - - - - - [Optional] The assemblies to process, identified by their assembly name. - - - - - - [Optional] The file to write installation progress to. - - - - - [Optional] If an exception occurs at any point during installation, the call - stack will be printed to the log. - - - - - - - - - - - Uninstalls assemblies. - - - - - - - [Optional] The assemblies to process, identified by their filename. - - - - - [Optional] The assemblies to process, identified by their assembly name. - - - - - - [Optional] The file to write installation progress to. - - - - - [Optional] If an exception occurs at any point during installation, the call - stack will be printed to the log. - - - - - - - - - - - Compresses JavaScript source by removing comments and unnecessary - whitespace. It typically reduces the size of the script by half, - resulting in faster downloads and code that is harder to read. - - - - - - - [Optional] [Output] Gets the files that were successfully source-compressed. - - - - - [Optional] Encoding to use to read and write files. - - - - - Gets or sets the files to source-compress. - - - - - - - - - Sends an email message - - - - - - - [Optional] List of files to attach to message - - - - - [Optional] List of addresss that contains the blind carbon copy (BCC) recipients for this e-mail message - - - - - [Optional] The email message body - - - - - [Optional] List of addresss that contains the carbon copy (CC) recipients for this e-mail message - - - - - [Optional] Specify whether the Mail task uses SSL to encrypt the connection. - - - - - The from address for this e-mail message - - - - - [Optional] A value indicating whether the mail message body is in Html - - - - - [Optional] Gets or sets the password. - - - - - [Optional] The priority of this e-mail message - - - - - The name or IP address of the host used for SMTP transactions - - - - - The subject line for this e-mail message - - - - - List of addresss that contains the recipients of this e-mail message - - - - - [Optional] Gets or sets the username. - - - - - - - - - Add numbers - - - - - - - Gets or sets the numbers to work with. - - - - - [Optional] Gets or sets the numeric format. - - - - - [Optional] [Output] Gets or sets the result. - - - - - - - - - Divide numbers - - - - - - - Gets or sets the numbers to work with. - - - - - [Optional] Gets or sets the numeric format. - - - - - [Optional] [Output] Gets or sets the result. - - - - - [Optional] When , uses integer division to truncate the result. Default is - - - - - - - - - Performs the modulo operation on numbers. - - - - - - - Gets or sets the numbers to work with. - - - - - [Optional] Gets or sets the numeric format. - - - - - [Optional] [Output] Gets or sets the result. - - - - - - - - - Multiple numbers - - - - - - - Gets or sets the numbers to work with. - - - - - [Optional] Gets or sets the numeric format. - - - - - [Optional] [Output] Gets or sets the result. - - - - - - - - - Subtract numbers - - - - - - - Gets or sets the numbers to work with. - - - - - [Optional] Gets or sets the numeric format. - - - - - [Optional] [Output] Gets or sets the result. - - - - - - - - - Merge files into the destination file. - - - - - - - Gets or sets the destination file where the - are merged to. - - - - - [Optional] Gets or sets the mode to use when merging. - - - - - Gets or sets the source files to merge. - - - - - - - - - - - - - - Merges files as binary data. - - - - - - - Merges files as text. - - - - - - - Merges files as text line by line. - - - - - - - - - - Moves files on the filesystem to a new location. - - - - - - - [Optional] [Output] Gets or sets the list of files to moved the source files to. - - - - - [Optional] Gets or sets the directory to which you want to move the files. - - - - - [Optional] [Output] Gets the items that were successfully moved. - - - - - Gets or sets the source files to move. - - - - - - - - - Runs the NDoc application. - - - - - - - Gets or sets the documenter. - - - - - - Gets or sets the project file path. - - - - - - - [Optional] Gets or sets a value indicating whether the output is verbose. - - - - - [Optional] Gets or sets the working directory. - - - - - - - - - Makes an HTTP request, optionally validating the result and writing it to a file. - - - - - - - [Optional] Optional: if set then the task fails if the response text doesn't contain the text specified. - - - - - [Optional] Default is true. When true, if the web server returns a status code less than 200 or greater than 299 then the task fails. - - - - - The URL to make an HTTP request against. - - - - - [Optional] Optional; the name of the file to write the response to. - - - - - - - - - Creates a NuGet package based on the specified nuspec or project file. - - - - - - - [Optional] The base path of the files defined in the nuspec file. - - - - - - The location of the nuspec or project file to create a package. - - - - - [Optional] Specifies the directory for the created NuGet package. - - - - - [Optional] Determines if a package containing sources and symbols should be created. When specified with a nuspec, - creates a regular NuGet package file and the corresponding symbols package. - - - - - - - [Optional] Shows verbose output for package building. - - - - - [Optional] Overrides the version number from the nuspec file. - - - - - [Optional] Gets or sets the working directory. - - - - - - - - - Pushes a package to the server and optionally publishes it. - - - - - - - [Optional] The API key to use for push to the server. - - - - - [Optional] Specifies if the package should be created and uploaded to the server but not published to the server. False by default. - - - - - - The path to the package to push the package to the server. - - - - - [Optional] Specifies the server URL. - - - - - - - [Optional] Gets or sets the working directory. - - - - - - - - - Run NUnit 2.4 on a group of assemblies. - - - - - - - Gets or sets the assemblies. - - - - - [Optional] Determines whether assemblies are copied to a shadow folder during testing. - - - - - [Optional] The file to receive test error details. - - - - - [Optional] Gets or sets the categories to exclude. - - - - - - [Optional] Gets or sets the fixture. - - - - - [Optional] Determines whether the tests are run in a 32bit process on a 64bit OS. - - - - - [Optional] Determines the framework to run aganist. - - - - - [Optional] Gets or sets the categories to include. - - - - - [Optional] Gets or sets the output XML file. - - - - - [Optional] The project configuration to run. - - - - - [Optional] Allows tests to be run in a new thread, allowing you to take advantage of ApartmentState and ThreadPriority settings in the config file. - - - - - - - [Optional] Gets or sets the working directory. - - - - - [Optional] Gets or sets the XSLT transform file. - - - - - - - - - Defines a database host within the Oracle TNSNAMES.ORA file. - - - - - - - [Optional] When true, the task will update an existing entry with . - If false, the task will fail if already exists. - - - - - The name of the host entry to add. - - - - - [Optional] The definition of the host entry to add. - - - - - [Optional] [Output] The path to the TNSNAMES.ORA that was used by task. - - - - - [Optional] [Output] The contents of the TNSNAMES.ORA file after the task executes. - - - - - [Optional] [Output] The contents of the TNSNAMES.ORA file before any changes are made. - - - - - [Optional] The path to a specific TNSNAMES.ORA file to update. - - - - - - - - - Displays a message on the console and waits for user input. - - - - - - - [Optional] The message to display in the console. - - - - - [Optional] [Output] The text entered at the console. - - - - - - - - - Compiles regular expressions and saves them to disk in an assembly. - - - - - - - [Optional] Gets or sets the assembly company. - - - - - [Optional] Gets or sets the assembly copyright. - - - - - [Optional] Gets or sets the assembly culture. - - - - - [Optional] Gets or sets the assembly description. - - - - - [Optional] Gets or sets the assembly file version. - - - - - [Optional] Gets or sets the assembly informational version. - - - - - [Optional] Gets or sets the assembly key file. - - - - - Gets or sets the name of the assembly to be created by the regex compiler. - - - - - [Optional] Gets or sets the assembly product. - - - - - [Optional] Gets or sets the assembly title. - - - - - [Optional] Gets or sets the assembly version. - - - - - [Optional] Gets or sets a value indicating whether the default value is public for regular expression instances. - - - - - [Optional] Gets or sets the default namespace for regular expression instances. - - - - - [Optional] Gets or sets the default regular expression options. - - - - - Gets or sets the directory where the assembly will be saved. - - - - - [Optional] [Output] Gets or sets the output file. - - - - - [Optional] Gets or sets the regular expressions. - - - - - [Optional] Gets or sets the file defining the regular expressions. - - - - - - - - - Task to filter an Input list with a Regex expression. - Output list contains items from Input list that matched given expression - - - - - - - Regex expression - - - - - Input, list of items to perform the regex on - - - - - [Optional] Regex options as strings corresponding to the RegexOptions enum: - Compiled - CultureInvariant - ECMAScript - ExplicitCapture - IgnoreCase - IgnorePatternWhitespace - Multiline - None - RightToLeft - Singleline - - - - - [Optional] [Output] Results of the Regex transformation. - - - - - - - - - Task to replace portions of strings within the Input list - Output list contains all the elements of the Input list after - performing the Regex Replace. - - - - - - - [Optional] Number of matches to allow on each input item. - -1 indicates to perform matches on all matches within input item - - - - - Regex expression - - - - - Input, list of items to perform the regex on - - - - - [Optional] Regex options as strings corresponding to the RegexOptions enum: - Compiled - CultureInvariant - ECMAScript - ExplicitCapture - IgnoreCase - IgnorePatternWhitespace - Multiline - None - RightToLeft - Singleline - - - - - [Optional] [Output] Results of the Regex transformation. - - - - - [Optional] String replacing matching expression strings in input list. - If left empty matches in the input list are removed (replaced with empty string) - - - - - [Optional] Position within the input item to start matching - - - - - - - - - Reads a value from the Registry - - - - - - - [Optional] Gets or sets the default value. - - - - - Gets or sets the full registry path of the key, beginning with a valid registry root, such as "HKEY_CURRENT_USER". - - - - - [Optional] [Output] Gets the stored value. - - - - - [Optional] Gets or sets the name of the name/value pair. - - - - - - - - - Writes a value to the Registry - - - - - - - Gets or sets the full registry path of the key, beginning with a valid registry root, such as "HKEY_CURRENT_USER". - - - - - Gets or sets the value to be stored. - - - - - [Optional] Gets or sets the name of the name/value pair. - - - - - - - - - Task wrapping the Window Resource Kit Robocopy.exe command. - - - - - - - [Optional] /E Copies all subdirectories (including empty ones). - - - - - [Optional] /LOG+:file Redirects output to the specified file, appending it to the file if it already exists. - - - - - [Optional] /B Copies files in Backup mode (Backup copies are not restartable, but can copy some files that restartable mode cannot). - - - - - [Optional] /COPYALL Copies Everything. Equivalent to /COPY:DATSOU. - - - - - [Optional] /COPY:copyflags Copies the file information specified by copyflags. - - - - - [Optional] /CREATE Creates a directory tree structure containing zero-length files only (that is, no file data is copied). - - - - - Destination directory. - - - - - [Optional] /XF file [file] Excludes files with the specified names, paths, or wildcard characters. - - - - - [Optional] /XD dir [dir] Excludes directories with the specified names, paths, or wildcard characters. - - - - - [Optional] /XJ Excludes Junction points. - - - - - [Optional] /XA:{R|A|S|H|C|N|E|T|O} Excludes files with the specified attributes. - - - - - - [Optional] /FAT Creates destination files using only 8.3 FAT file names. - - - - - [Optional] /FFT Assume FAT File Times (2-second granularity). - - - - - [Optional] /A Copies only files with the archive attribute set. - - - - - [Optional] /M Copies only files with the archive attribute set and then resets (turns off) the archive attribute in the source files. - - - - - [Optional] /IA:{R|A|S|H|C|N|E|T|O} Includes files with the specified attributes. - - - - - [Optional] /LOG:file Redirects output to the specified file, overwriting the file if it already exists. - - - - - [Optional] /MIR Mirrors a directory tree (equivalent to running both /E and /PURGE). - - - - - [Optional] /MOVE Moves files and directories (that is, deletes source files and directories after copying). - - - - - [Optional] /MOV Moves files (that is, deletes source files after copying). - - - - - [Optional] /NOCOPY Copies Nothing. Can be useful with /PURGE. - - - - - [Optional] /NFL Turns off logging of file names. File names are still shown, however, if file copy errors occur. - - - - - [Optional] /NDL Turns off logging of directory names. Full file pathnames (as opposed to simple file names) will be shown if /NDL is used. - - - - - [Optional] /NJH Turns of logging of the job header. - - - - - [Optional] /NJS Turns off logging of the job summary. - - - - - [Optional] /NP Turns off copy progress indicator (% copied). - - - - - [Optional] Manually entered options. - - - - - [Optional] /PURGE Deletes destination files and directories that no longer exist in the source. - - - - - [Optional] /Z Copies files in restartable mode (that is, restarts the copy process from the point of failure). - - - - - [Optional] /SEC Copies NTFS security information. (Source and destination volumes must both be NTFS). Equivalent to /COPY:DATS. - - - - - [Optional] Names of files to act upon. - - - - - Source directory - - - - - [Optional] /S Copies subdirectories (excluding empty ones). - - - - - - - [Optional] /V Produces verbose output (including skipped files). - - - - - - - - - BuildAssembler task for Sandcastle. - - - - - - - Gets or sets the configuration file. - - - - - - Gets or sets the manifest file. - - - - - [Optional] Gets or sets a value indicating whether no info messages will be output. - - - - - [Optional] Gets or sets a value indicating whether no warning messages will be output. - - - - - [Optional] Gets or sets the sandcastle install root directory. - - - - - - - - - - - ChmBuilder task for Sandcastle. - - - - - - - - [Optional] Gets or sets the HTML directory. - - - - - [Optional] Gets or sets the language id. - - - - - [Optional] Gets or sets a value indicating whether this is metadata. - - - - - [Optional] Gets or sets a value indicating whether no info messages will be output. - - - - - [Optional] Gets or sets a value indicating whether no warning messages will be output. - - - - - [Optional] Gets or sets the output file. - - - - - [Optional] Gets or sets the name of the project. - - - - - [Optional] Gets or sets the sandcastle install root directory. - - - - - - [Optional] Gets or sets the toc file. - - - - - - - - - - DBCSFix task for Sandcastle. - - - - - - - [Optional] Gets or sets the CHM directory. - - - - - - [Optional] Gets or sets the language id. - - - - - [Optional] Gets or sets a value indicating whether no info messages will be output. - - - - - [Optional] Gets or sets a value indicating whether no warning messages will be output. - - - - - [Optional] Gets or sets the sandcastle install root directory. - - - - - - - - - - - MRefBuilder task for Sandcastle. - - - - - - - Gets or sets the assemblies. - - - - - [Optional] Gets or sets the config file. - - - - - - [Optional] Gets or sets a value indicating whether to include internal members. - - - - - [Optional] Gets or sets a value indicating whether no info messages will be output. - - - - - [Optional] Gets or sets a value indicating whether no warning messages will be output. - - - - - Gets or sets the output file. - - - - - [Optional] Gets or sets the references. - - - - - [Optional] Gets or sets the sandcastle install root directory. - - - - - - - - - - - The Sandcastle task. - - - - - - - Gets or sets the assemblies. - - - - - [Optional] Gets or sets the name of the CHM. - - - - - [Optional] Gets or sets a value indicating whether working directory is cleaned. - - - - - Gets or sets the comments. - - - - - [Optional] Gets or sets a value indicating a Html Help 2x project will be created. - - - - - [Optional] Gets or sets the language id. - - - - - [Optional] Gets or sets a value indicating whether no info messages will be output. - - - - - [Optional] Gets or sets a value indicating whether no warning messages will be output. - - - - - [Optional] Gets or sets the references. - - - - - [Optional] Gets or sets the build assembler config file. - - - - - [Optional] Gets or sets the sandcastle install root directory. - - - - - [Optional] Gets or sets the html help topic style. - - - - - [Optional] Gets or sets the working directory. - - - - - - - - - XslTransform task for Sandcastle. - - - - - - - [Optional] Gets or sets the arguments. - - - - - - [Optional] Gets or sets a value indicating whether no info messages will be output. - - - - - [Optional] Gets or sets a value indicating whether no warning messages will be output. - - - - - Gets or sets the output file. - - - - - [Optional] Gets or sets the sandcastle install root directory. - - - - - - - [Optional] Gets or sets the XML files. - - - - - [Optional] Gets or sets the XSLT files. - - - - - - - - - A Task that generates a XSD schema of the tasks in an assembly. - - - - - - - Gets or sets the list of path to analyse. - - - - - - [Optional] Gets or sets a value indicating if the task list (using UsingTask) - has to be genereted. - - - - - - [Optional] Gets or sets a value indicating wheter documentation should be ignored - even if available (Default is false). - - - - - [Optional] Gets or sets a value indicating if the - MsBuild schema inclusing should be ignored - - - - - [Optional] Gets or sets a list of included schemas - - - - - - [Optional] Gets or sets the output path for the generated files. - - - - - [Optional] [Output] Gets the list of path to the generated XSD schema. - - - - - [Optional] Gets or sets a value indicating how the assembly is specified in the - UsingTask element. - - - - - [Optional] [Output] Gets the path to the task list if it was generated. - - - - - - - - - - - - - - Assembly file name (Default): <UsingTask AssemblyFile="foo.dll" /> - - - - - - - Assembly location: <UsingTask AssemblyName="foo" /> - - - - - - - Assembly Name: <UsingTask AssemblyFile="bin\debug\foo.dll" /> - - - - - - - Assembly fully qualified name: <UsingTask AssemblyName="foo.dll,version ...." /> - - - - - - - - - - Executes code contained within the task. - - - - - - - [Optional] The code to compile and execute - - - - - [Optional] The namespaces to import. - - - - - The language of the script block (defaults to C#). - - - - - [Optional] The name of the main class containing the static ScriptMain - entry point. - - - - - [Optional] The required references - - - - - [Optional] [Output] The string returned from the custom ScriptMain method. - - - - - - - - - Task that can control a Windows service. - - - - - - - Gets or sets the to perform on the service. - - - - - [Optional] [Output] Gets a value indicating whether the service can be paused and resumed. - - - - - [Optional] [Output] Gets a value indicating whether the service should be notified when the system is shutting down. - - - - - [Optional] [Output] Gets a value indicating whether the service can be stopped after it has started. - - - - - [Optional] [Output] Gets a friendly name for the service. - - - - - [Optional] [Output] Gets a value indicating whether the service exists. - - - - - [Optional] Gets or sets the name of the machine. - - - - - Gets or sets the name of the service. - - - - - [Optional] [Output] Gets or sets the status. - - - - - [Optional] Gets or sets the timeout for the command. The default is - one minute. - - - - - - - - - - - - - - Starts a service. - - - - - - - Stops a service. - - - - - - - Restarts a service. - - - - - - - Pauses a running service. - - - - - - - Continues a paused service. - - - - - - - - - - Task that can determine the status of a specified service - on a target server. - - - - - - - [Optional] [Output] Gets a value indicating whether the service can be paused and resumed. - - - - - [Optional] [Output] Gets a value indicating whether the service should be notified when the system is shutting down. - - - - - [Optional] [Output] Gets a value indicating whether the service can be stopped after it has started. - - - - - [Optional] [Output] Gets a friendly name for the service. - - - - - [Optional] [Output] Gets a value indicating whether the service exists. - - - - - [Optional] Gets or sets the name of the machine. - - - - - Gets or sets the name of the service. - - - - - [Optional] [Output] Gets or sets the status. - - - - - - - - - A task for sleeping for a specified period of time. - - - - - - - [Optional] The number of hours to add to the time to sleep. - - - - - [Optional] The number of milliseconds to add to the time to sleep. - - - - - [Optional] The number of minutes to add to the time to sleep. - - - - - [Optional] The number of seconds to add to the time to sleep. - - - - - - - - - A task to play a sound from a .wav file path or URL. - - - - - - - [Optional] Gets or sets the time, in milliseconds, in which the .wav file must load. - - - - - [Optional] Sets the file path of the .wav file to load - as a relative path to . - - - - - [Optional] Gets or sets the file path or URL of the .wav file to load. - - - - - [Optional] Gets or sets a value indicating whether to play the sound synchronously. - - - - - [Optional] Sets the file path of the .wav file to load - as a relative path to . - - - - - - - - - A task for the pdbstr from source server. - - - - - - - [Optional] Gets or sets the command. - - - - - - [Optional] Gets or sets the PDB file. - - - - - [Optional] Gets or sets the stream file. - - - - - [Optional] Gets or sets the name of the stream. - - - - - - - - - - - - - - - - Read stream from pdb symbol file. - - - - - - - Write stream to pdb symbol file. - - - - - - - - - - A task for the srctool from source server. - - - - - - - [Optional] Gets or sets a value indicating whether to get the count of indexed files. The -c switch. - - - - - - [Optional] Gets or sets a value indicating whether to extracts the files, instead of simply listing them. The -x switch. - - - - - [Optional] Gets or sets the directory to extract to. The -d switch. - - - - - [Optional] [Output] Gets the extracted files. Populated when is true. - - - - - [Optional] Gets or sets the filter to only source files that match this regular expression. The -l switch. - - - - - [Optional] Gets or sets the PDB file. - - - - - [Optional] [Output] Gets or sets the number of source files. - - - - - [Optional] [Output] Gets the source files. Populated when is true. - - - - - [Optional] Gets or sets a value indicating whether to dumps raw source data from the PDB. The -r switch. - - - - - - - - - - - A subversion source index task. - - - - - - - [Optional] Gets or sets the source command format. The SRCSRVCMD environment variable. - - - - - Gets or sets the name of the source server. - - - - - [Optional] Gets or sets the source server SDK path. - - - - - [Optional] Gets or sets the source target format. The SRCSRVTRG environment variable. - - - - - Gets or sets the symbol files to have to source index added. - - - - - - - - - Executes a SQL command. - - - - - - - The command to execute - - - - - [Optional] Command Timeout - - - - - The connection string - - - - - [Optional] The file name to write to - - - - - [Optional] [Output] Output the return count/value - - - - - [Optional] The SQL Selection Mode. Set to NonQuery, Scalar, or ScalarXml. Default is NonQuery. - - - - - - - - - MSBuild task to execute DDL and SQL statements. - - - - - - - [Optional] Gets or sets the batch delimter string. - - - - - The connection string - - - - - Gets or sets the DDL/SQL files. - - - - - [Optional] [Output] Output the return count/values - - - - - [Optional] Timeout to execute a DDL statement. - - - - - - - - - The Database Publishing Wizard enables the deployment of - SQL Server databases (both schema and data) into a shared - hosting environment. - - - - - - - [Optional] Gets or sets the database publishing command. - - - - - [Optional] Gets or sets the full connection string to the local database. - - - - - [Optional] Gets or sets the name of the local database to be scripted. - - - - - [Optional] Gets or sets a value indicating whether the data but - not the schema should be scripted. - - - - - - [Optional] Gets or sets the friendly name of previously - configured hosting Web service. - - - - - [Optional] Gets or sets a value indicating whether the produced - script should not drop pre-existing objects. - - - - - [Optional] Gets or sets a value indicating whether objects will - not be qualified with a schema. - - - - - [Optional] Gets or sets a value indicating whether the publish operation - should not be executed within a single transaction. - - - - - [Optional] Gets or sets the full file path for the script file generated. - - - - - [Optional] Gets or sets the password to use for connection - to the source database. - - - - - [Optional] Gets or sets a value indicating output message suppression. - - - - - [Optional] Gets or sets a value indicating whether the schema, - but not the data, should be scripted. - - - - - [Optional] Gets or sets the name or IP address for the local database connection. - - - - - [Optional] Gets or sets the remote database server name. - - - - - [Optional] Gets or sets the database name to publish to on the remote server. - - - - - [Optional] Gets or sets the password for the remote Web service endpoint. - - - - - [Optional] Gets or sets the username on the hosting Web service endpoint. - - - - - [Optional] Gets or sets the target server the script should target. - - - - - - - [Optional] Gets or sets the SQL Server user name to use for connection - to the source database. - - - - - [Optional] Gets or sets the configuration of the hosting Web service endpoint. - - - - - - - - - Checkout a local working copy of a Subversion repository. - - - - - - - [Optional] Gets or sets the arguments. - - - - - [Optional] Gets or sets the command. - - - - - - [Optional] Gets or sets the force. - - - - - [Optional] Gets or sets the local path. - - - - - [Optional] Gets or sets the message. - - - - - [Optional] Gets or sets the message file. - - - - - [Optional] Gets or sets a value indicating no auth cache. - - - - - [Optional] Gets or sets a value indicating the command is non interactive]. - - - - - [Optional] Gets or sets the password. - - - - - [Optional] [Output] Gets or sets the repository path. - - - - - [Optional] [Output] Gets or sets the revision. - - - - - [Optional] [Output] Gets the error output of SVN command-line client. - - - - - [Optional] [Output] Gets the output of SVN command-line client. - - - - - [Optional] Gets or sets the target file. - - - - - [Optional] Gets or sets the targets. - - - - - - - [Optional] Gets or sets a value indicating whether to trust the server cert. - - - - - [Optional] Gets or sets the username. - - - - - [Optional] Gets or sets the verbose. - - - - - [Optional] Gets or sets a value indicating the output is XML. - - - - - - - - - Subversion client base class - - - - - - - [Optional] Gets or sets the arguments. - - - - - [Optional] Gets or sets the command. - - - - - - [Optional] Gets or sets the force. - - - - - [Optional] Gets or sets the local path. - - - - - [Optional] Gets or sets the message. - - - - - [Optional] Gets or sets the message file. - - - - - [Optional] Gets or sets a value indicating no auth cache. - - - - - [Optional] Gets or sets a value indicating the command is non interactive]. - - - - - [Optional] Gets or sets the password. - - - - - [Optional] [Output] Gets or sets the repository path. - - - - - [Optional] [Output] Gets or sets the revision. - - - - - [Optional] [Output] Gets the error output of SVN command-line client. - - - - - [Optional] [Output] Gets the output of SVN command-line client. - - - - - [Optional] Gets or sets the target file. - - - - - [Optional] Gets or sets the targets. - - - - - - - [Optional] Gets or sets a value indicating whether to trust the server cert. - - - - - [Optional] Gets or sets the username. - - - - - [Optional] Gets or sets the verbose. - - - - - [Optional] Gets or sets a value indicating the output is XML. - - - - - - - - - Subversion Commit command - - - - - - - [Optional] Gets or sets the arguments. - - - - - [Optional] Gets or sets the command. - - - - - - [Optional] Gets or sets the force. - - - - - [Optional] Gets or sets the local path. - - - - - [Optional] Gets or sets the message. - - - - - [Optional] Gets or sets the message file. - - - - - [Optional] Gets or sets a value indicating no auth cache. - - - - - [Optional] Gets or sets a value indicating the command is non interactive]. - - - - - [Optional] Gets or sets the password. - - - - - [Optional] [Output] Gets or sets the repository path. - - - - - [Optional] [Output] Gets or sets the revision. - - - - - [Optional] [Output] Gets the error output of SVN command-line client. - - - - - [Optional] [Output] Gets the output of SVN command-line client. - - - - - [Optional] Gets or sets the target file. - - - - - [Optional] Gets or sets the targets. - - - - - - - [Optional] Gets or sets a value indicating whether to trust the server cert. - - - - - [Optional] Gets or sets the username. - - - - - [Optional] Gets or sets the verbose. - - - - - [Optional] Gets or sets a value indicating the output is XML. - - - - - - - - - Copy a file or folder in Subversion - - - - - - - [Optional] Gets or sets the arguments. - - - - - [Optional] Gets or sets the command. - - - - - [Optional] The path to which the SourcePath should be copied - - - - - - [Optional] Gets or sets the force. - - - - - [Optional] Gets or sets the local path. - - - - - [Optional] Gets or sets the message. - - - - - [Optional] Gets or sets the message file. - - - - - [Optional] Gets or sets a value indicating no auth cache. - - - - - [Optional] Gets or sets a value indicating the command is non interactive]. - - - - - [Optional] Gets or sets the password. - - - - - [Optional] [Output] Gets or sets the repository path. - - - - - [Optional] [Output] Gets or sets the revision. - - - - - [Optional] The path of the source file or folder that should be copied - - - - - [Optional] [Output] Gets the error output of SVN command-line client. - - - - - [Optional] [Output] Gets the output of SVN command-line client. - - - - - [Optional] Gets or sets the target file. - - - - - [Optional] Gets or sets the targets. - - - - - - - [Optional] Gets or sets a value indicating whether to trust the server cert. - - - - - [Optional] Gets or sets the username. - - - - - [Optional] Gets or sets the verbose. - - - - - [Optional] Gets or sets a value indicating the output is XML. - - - - - - - - - Export a folder from a Subversion repository - - - - - - - [Optional] Gets or sets the arguments. - - - - - [Optional] Gets or sets the command. - - - - - - [Optional] Gets or sets the force. - - - - - [Optional] Gets or sets the local path. - - - - - [Optional] Gets or sets the message. - - - - - [Optional] Gets or sets the message file. - - - - - [Optional] Gets or sets a value indicating no auth cache. - - - - - [Optional] Gets or sets a value indicating the command is non interactive]. - - - - - [Optional] Gets or sets the password. - - - - - [Optional] [Output] Gets or sets the repository path. - - - - - [Optional] [Output] Gets or sets the revision. - - - - - [Optional] [Output] Gets the error output of SVN command-line client. - - - - - [Optional] [Output] Gets the output of SVN command-line client. - - - - - [Optional] Gets or sets the target file. - - - - - [Optional] Gets or sets the targets. - - - - - - - [Optional] Gets or sets a value indicating whether to trust the server cert. - - - - - [Optional] Gets or sets the username. - - - - - [Optional] Gets or sets the verbose. - - - - - [Optional] Gets or sets a value indicating the output is XML. - - - - - - - - - Run the "svn info" command and parse the output - - - - - - - [Optional] Gets or sets the arguments. - - - - - [Optional] Gets or sets the command. - - - - - - [Optional] Gets or sets the force. - - - - - [Optional] [Output] The author who last changed this node. - - - - - [Optional] [Output] The date this node was last changed. - - - - - [Optional] [Output] The last changed revision number. - - - - - [Optional] Gets or sets the local path. - - - - - [Optional] Gets or sets the message. - - - - - [Optional] Gets or sets the message file. - - - - - [Optional] Gets or sets a value indicating no auth cache. - - - - - [Optional] [Output] The Subversion node kind. - - - - - [Optional] Gets or sets a value indicating the command is non interactive]. - - - - - [Optional] Gets or sets the password. - - - - - [Optional] [Output] Gets or sets the repository path. - - - - - [Optional] [Output] Return the repository root or null if not set by Subversion. - - - - - [Optional] [Output] Return the repository UUID value from Subversion. - - - - - [Optional] [Output] Gets or sets the revision. - - - - - [Optional] [Output] The Subversion schedule type. - - - - - [Optional] [Output] Gets the error output of SVN command-line client. - - - - - [Optional] [Output] Gets the output of SVN command-line client. - - - - - [Optional] Gets or sets the target file. - - - - - [Optional] Gets or sets the targets. - - - - - - - [Optional] Gets or sets a value indicating whether to trust the server cert. - - - - - [Optional] Gets or sets the username. - - - - - [Optional] Gets or sets the verbose. - - - - - [Optional] Gets or sets a value indicating the output is XML. - - - - - - - - - - - - - - Node is a file - - - - - - - Node is a directory - - - - - - - Unknown node type - - - - - - - - - - - - - - - Normal schedule - - - - - - - Unknown schedule. - - - - - - - - - - Subversion status command. - - - - - - - [Optional] Gets or sets the arguments. - - - - - [Optional] Gets or sets the command. - - - - - [Optional] [Output] Gets or sets the entries. - - - - - - [Optional] Gets or sets the force. - - - - - [Optional] Gets or sets the local path. - - - - - [Optional] Gets or sets the message. - - - - - [Optional] Gets or sets the message file. - - - - - [Optional] Gets or sets a value indicating no auth cache. - - - - - [Optional] Gets or sets a value indicating the command is non interactive]. - - - - - [Optional] Gets or sets the password. - - - - - [Optional] [Output] Gets or sets the repository path. - - - - - [Optional] [Output] Gets or sets the revision. - - - - - [Optional] [Output] Gets the error output of SVN command-line client. - - - - - [Optional] [Output] Gets the output of SVN command-line client. - - - - - [Optional] Gets or sets the target file. - - - - - [Optional] Gets or sets the targets. - - - - - - - [Optional] Gets or sets a value indicating whether to trust the server cert. - - - - - [Optional] Gets or sets the username. - - - - - [Optional] Gets or sets the verbose. - - - - - [Optional] Gets or sets a value indicating the output is XML. - - - - - - - - - Subversion Update command - - - - - - - [Optional] Gets or sets the arguments. - - - - - [Optional] Gets or sets the command. - - - - - - [Optional] Gets or sets the force. - - - - - [Optional] Gets or sets the local path. - - - - - [Optional] Gets or sets the message. - - - - - [Optional] Gets or sets the message file. - - - - - [Optional] Gets or sets a value indicating no auth cache. - - - - - [Optional] Gets or sets a value indicating the command is non interactive]. - - - - - [Optional] Gets or sets the password. - - - - - [Optional] [Output] Gets or sets the repository path. - - - - - [Optional] [Output] Gets or sets the revision. - - - - - [Optional] [Output] Gets the error output of SVN command-line client. - - - - - [Optional] [Output] Gets the output of SVN command-line client. - - - - - [Optional] Gets or sets the target file. - - - - - [Optional] Gets or sets the targets. - - - - - - - [Optional] Gets or sets a value indicating whether to trust the server cert. - - - - - [Optional] Gets or sets the username. - - - - - [Optional] Gets or sets the verbose. - - - - - [Optional] Gets or sets a value indicating the output is XML. - - - - - - - - - Summarize the local revision(s) of a working copy. - - - - - - - - [Optional] [Output] True if invoked on a directory that is not a working copy, - svnversion assumes it is an exported working copy and prints "exported". - - - - - [Optional] [Output] High revision number of the local working repository revision range. - - - - - Path to local working copy. - - - - - [Optional] [Output] Low revision number of the local working repository revision range. - - - - - [Optional] [Output] True if working copy contains modifications. - - - - - [Optional] [Output] Revision number of the local working repository. - - - - - [Optional] [Output] True if working copy is switched. - - - - - - - [Optional] Specifies whether to use the last committed revision number as - opposed to the last updated revision number. - - - - - - - - - Task that wraps the Symbol Server SymStore.exe application. - - - - - - - [Optional] Gets or sets a value indicating SymStore will append new indexing information to an existing index file. - - - - - [Optional] Gets or sets the command. - - - - - [Optional] Gets or sets the comment for the transaction. - - - - - [Optional] Gets or sets a value indicating SymStore will create a compressed version of each file copied to the symbol store instead of using an uncompressed copy of the file. - - - - - - [Optional] Gets or sets the network path of files or directories to add. - - - - - [Optional] Gets or sets the transaction ID string. - - - - - [Optional] Gets or sets a value indicating whether the file will be in a local directory rather than a network path. - - - - - [Optional] Gets or sets a log file to be used for command output. If this is not included, transaction information and other output is sent to stdout. - - - - - [Optional] Gets or sets the message to be added to each file. - - - - - [Optional] Gets or sets a value indicating whether to omit the creation of reference pointer files for the files and pointers being stored. - - - - - [Optional] Gets or sets a value indicating whether SymStore will store a pointer to the file, rather than the file itself. - - - - - [Optional] Gets or sets the name of the product. - - - - - [Optional] Gets or sets the index file. Causes SymStore to read the data from a file created with WriteIndexFile. - - - - - [Optional] Gets or sets a value indicating whether SymStore will add files or directories recursively. - - - - - [Optional] Gets or sets a value indicating whether the paths in the file pointers will be relative. - - - - - [Optional] Gets or sets the server and share where the symbol files were originally stored. - - - - - [Optional] Gets or sets the root directory for the symbol store. - - - - - - - [Optional] Gets or sets a value indicating whether SymStore will display verbose output. - - - - - [Optional] Gets or sets the version of the product. - - - - - [Optional] Gets or sets the index file. Causes SymStore not to store the actual symbol files. Instead, SymStore records information in the IndexFile that will enable SymStore to access the symbol files at a later time. - - - - - - - - - - - - - - Add to the symbol server store. - - - - - - - Query the symbol server store. - - - - - - - Delete from the symbol serer store. - - - - - - - - - - MSBuild task that replaces tokens in a template file and writes out a new file. - - - - - - - [Optional] [Output] The token replaced template file. - - - - - [Optional] The full path to the output file name. If no filename is specified (the default) the - output file will be the Template filename with a .out extension. - - - - - The template file used. Tokens with values of ${Name} are replaced by name. - - - - - [Optional] List of tokens to replace in the template. Token name is taken from the TaskItem.ItemSpec and the - replacement value comes from the ReplacementValue metadata of the item. - - - - - - - - - A task for Team Foundation Server version control. - - - - - - - [Optional] Gets or sets a value indicating whether this is all. - - - - - [Optional] Gets or sets the author. - - - - - [Optional] Gets or sets a value indicating whether this is bypass. - - - - - [Optional] [Output] Gets or sets the changeset. - - - - - [Optional] Gets or sets the collection. - - - - - [Optional] Gets or sets the Team Foundation Server command. - - - - - [Optional] Gets or sets the comment. - - - - - - [Optional] Gets or sets the files. - - - - - [Optional] Gets or sets a value indicating whether this is force. - - - - - [Optional] Gets or sets the format. - - - - - [Optional] Gets or sets the lock. - - - - - [Optional] Gets or sets the notes. - - - - - [Optional] Gets or sets a value indicating whether this is override. - - - - - [Optional] Gets or sets a value indicating whether this is overwrite. - - - - - [Optional] Gets or sets the password. - - - - - [Optional] Gets or sets a value indicating whether this is preview. - - - - - [Optional] Gets or sets a value indicating whether this is recursive. - - - - - [Optional] Gets or sets a value indicating whether this is remap. - - - - - [Optional] Gets or sets a value indicating whether this is saved. - - - - - [Optional] [Output] Gets or sets the server path. - - - - - [Optional] Gets or sets the name of the shelve set. - - - - - [Optional] Gets or sets the shelve set owner. - - - - - [Optional] Gets or sets a value indicating whether this is silent. - - - - - - - [Optional] Gets or sets the type. - - - - - [Optional] Gets or sets the name of the user. - - - - - [Optional] Gets or sets a value indicating whether this is validate. - - - - - [Optional] Gets or sets the version. - - - - - [Optional] Gets or sets the name of the workspace. - - - - - [Optional] Gets or sets the workspace owner. - - - - - - - - - Gets the current date and time. - - - - - - - [Optional] Gets the internal time value. - - - - - [Optional] [Output] Gets the day of the month represented by this instance. - - - - - [Optional] [Output] Gets the day of the week represented by this instance. - - - - - [Optional] [Output] Gets the day of the year represented by this instance. - - - - - [Optional] Gets or sets the format string - for output parameter . - - - - - [Optional] [Output] Gets the value of this instance to its equivalent string representation. - If input parameter is provided, - the value is formatted according to it. - - - - - [Optional] [Output] Gets the hour component of the date represented by this instance. - - - - - [Optional] [Output] Gets or sets a value that indicates whether the time represented by this instance is based - on local time, Coordinated Universal Time (UTC), or neither. - - - - - [Optional] [Output] Gets the value of this instance to its equivalent long date string representation. - - - - - [Optional] [Output] Gets the value of this instance to its equivalent long time string representation. - - - - - [Optional] [Output] Gets the milliseconds component of the date represented by this instance. - - - - - [Optional] [Output] Gets the minute component of the date represented by this instance. - - - - - [Optional] [Output] Gets the month component of the date represented by this instance. - - - - - [Optional] [Output] Gets the seconds component of the date represented by this instance. - - - - - [Optional] [Output] Gets the value of this instance to its equivalent short date string representation. - - - - - [Optional] [Output] Gets the value of this instance to its equivalent short time string representation. - - - - - [Optional] [Output] Gets the number of ticks that represent the date and time of this instance. - - - - - [Optional] [Output] Gets the time of day for this instance. - - - - - [Optional] [Output] Gets the year component of the date represented by this instance. - - - - - - - - - - - - - - - - - - - - Unzip a file to a target directory. - - - - - - - [Optional] [Output] Gets the files extracted from the zip. - - - - - [Optional] Gets or sets a value indicating whether to overwrite any existing files on extraction. Defaults to true. - - - - - Gets or sets the target directory. - - - - - Gets or sets the name of the zip file. - - - - - - - - - Provides information about the build user. - - - - - - - [Optional] [Output] Gets the domain name of the build user. - - - - - [Optional] [Output] Gets the email address of the build user. - - - - - [Optional] [Output] Gets the first name of the build user. - - - - - [Optional] [Output] Gets the full name of the build user in "[First name] [Middle initial]. [Last name]" format . - - - - - [Optional] [Output] Gets the last name of the build user. - - - - - [Optional] [Output] Gets the middle initial of the build user. - - - - - [Optional] [Output] Gets the phone number of the build user. - - - - - [Optional] [Output] Gets the user name of the build user. - - - - - [Optional] [Output] Gets the username and domain name of the build user in "[Domain name]\[User name]" format. - - - - - - - - - Generates version information based on various algorithms - - - - - - - [Optional] [Output] Gets or sets the build version number. - - - - - [Optional] Gets or sets the method used to generate a number - - - - - [Optional] [Output] Gets or sets the major version number. - - - - - [Optional] Gets or sets the method used to generate a number - - - - - [Optional] [Output] Gets or sets the minor version number. - - - - - [Optional] Gets or sets the method used to generate a number - - - - - [Optional] [Output] Gets or sets the revision version number. - - - - - [Optional] Gets or sets the method used to generate a number - - - - - [Optional] Gets or sets the starting date used to calculate the number when is Automatic. - - - - - [Optional] Gets or sets the file used to initialize and persist the version. - - - - - - - - - Downloads a resource with the specified URI to a local file. - - - - - - - [Optional] The domain of the user being used to authenticate against the remote web server. A value for must also be provided. - - - - - Gets or sets the name of the local file that is to receive the data. - - - - - Gets or sets the URI from which to download data. - - - - - [Optional] The password used to authenticate against the remote web server. A value for must also be provided. - - - - - [Optional] When true, the current user's credentials are used to authenticate against the remote web server - - - - - [Optional] The username used to authenticate against the remote web server - - - - - - - - - Performs multiple updates on an XML file - - - - - - - The original file whose content is to be updated - - - - - [Optional] [Output] The full path of the file containing content updated by the task - - - - - [Optional] The XPath expression identifying root node that substitions are relative to - - - - - [Optional] The file created after performing the updates - - - - - [Optional] [Output] The full path of the file containing the results of the task - - - - - [Optional] A collection of prefix=namespace definitions used to query the XML documents - - - - - [Optional] The file containing the list of updates to perform - - - - - [Optional] [Output] The full path of the file containing substitutions used by the task - - - - - [Optional] The XPath expression used to locate the list of substitutions to perform - - - - - [Optional] The namespace used for XmlMassUpdate pre-defined attributes - - - - - - - - - Reads a value or values from lines of XML - - - - - - - [Optional] The lines of a valid XML document - - - - - [Optional] A collection of prefix=namespace definitions used to query the XML document - - - - - [Optional] The string that is prepended to all reserved metadata properties. - - - - - [Optional] [Output] The values selected by - - - - - [Optional] [Output] The number of values returned in - - - - - [Optional] Gets or sets the name of an XML file to query - - - - - The query used to identify the values in the XML document - - - - - - - - - Reads a value from a XML document using a XPath. - - - - - - - [Optional] Gets or sets the default namespace. - - - - - [Optional] Gets or sets the prefix to associate with the namespace being added. - - - - - [Optional] [Output] Gets the value read from file. - - - - - Gets or sets the name of the XML file. - - - - - Gets or sets the XPath. - - - - - - - - - Updates a XML document using a XPath. - - - - - - - [Optional] Gets or sets a value indicating whether the matched node is deleted. - - - - - [Optional] Gets or sets the default namespace. - - - - - [Optional] Gets or sets the prefix to associate with the namespace being added. - - - - - [Optional] Gets or sets the value to write. - - - - - Gets or sets the name of the XML file. - - - - - Gets or sets the XPath. - - - - - - - - - A task to merge and transform a set of xml files. - - - - - - - Gets or sets the xml input files. - - - - - Gets or sets the path of the output file. - - - - - [Optional] Gets or sets the list of - semicolon-delimited name/value pairs - of the . - For example: RootAttributes="foo=bar;date=$(buildDate)" - - - - - [Optional] Gets or sets the xml tag name - of the root tag wrapped - around the merged xml input files. - - - - - Gets or sets the path of the - xsl transformation file to apply. - - - - - - - - - Create a zip file with the files specified. - - - - - - - [Optional] Gets or sets the comment. - - - - - [Optional] Gets or sets the encryption algorithm. - - - - - Gets or sets the files to zip. - - - - - [Optional] Gets or sets a value indicating whether this is flatten. - - - - - [Optional] Gets or sets the password. - - - - - [Optional] Gets or sets the working directory for the zip file. - - - - - Gets or sets the name of the zip file. - - - - - [Optional] Gets or sets the zip level. Default is 6. - - - - - - - \ No newline at end of file diff --git a/tools/MSBuildCommunityTasks/Sample.proj b/tools/MSBuildCommunityTasks/Sample.proj deleted file mode 100644 index 4d323d472b..0000000000 --- a/tools/MSBuildCommunityTasks/Sample.proj +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - list = new List(); - list.Add("Happy"); - list.Add("New"); - list.Add("Year"); - Console.WriteLine("Hello MSBuild Community Scripting World."); - foreach(string s in list) - { - Console.WriteLine(s); - } - } - ]]> - - - - -