Compare commits
96 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
15ae55136f | ||
|
|
b18abd954f | ||
|
|
b45f79a1f8 | ||
|
|
01a03b4c84 | ||
|
|
e48328af34 | ||
|
|
8925d44807 | ||
|
|
213283510f | ||
|
|
9f8190dc28 | ||
|
|
c32d4ee2f7 | ||
|
|
2c867a4b2c | ||
|
|
da5194bdcb | ||
|
|
bbb27aed10 | ||
|
|
c02fbaeae7 | ||
|
|
847218da73 | ||
|
|
90dc788893 | ||
|
|
f3525cc555 | ||
|
|
198f243181 | ||
|
|
8e049f4af5 | ||
|
|
ff465a59b6 | ||
|
|
68b4f3ca04 | ||
|
|
6b31f2b3f2 | ||
|
|
63cf0f1548 | ||
|
|
e607f68b3e | ||
|
|
db3bb82dbd | ||
|
|
5889c600fa | ||
|
|
d7d4c7236c | ||
|
|
f54d8ce36f | ||
|
|
43faa13cb5 | ||
|
|
85a2d994f3 | ||
|
|
d8cd78cd6b | ||
|
|
3e59a5bcd2 | ||
|
|
0efb89d6ff | ||
|
|
6697c075cb | ||
|
|
06660160e7 | ||
|
|
0b571737b7 | ||
|
|
0a486a280d | ||
|
|
bd53e685d0 | ||
|
|
a2bbf3f44e | ||
|
|
410bb62906 | ||
|
|
cbb4ac3e20 | ||
|
|
7508192ab9 | ||
|
|
bbf6cbd8fb | ||
|
|
9765269d27 | ||
|
|
61746b7ff7 | ||
|
|
e6066c2cb5 | ||
|
|
633a918590 | ||
|
|
71c14a0837 | ||
|
|
9bbed2c275 | ||
|
|
d9ba4d9130 | ||
|
|
ecd40de7ec | ||
|
|
e2bd6c06ec | ||
|
|
a26be76d79 | ||
|
|
3b68c1eb69 | ||
|
|
f7879bdbf9 | ||
|
|
dbb0fc519f | ||
|
|
b931ccfabf | ||
|
|
eeab048f46 | ||
|
|
5da89ac05b | ||
|
|
e2b446be1c | ||
|
|
5f2e17a738 | ||
|
|
399d6d0045 | ||
|
|
f36f3ffd21 | ||
|
|
3c785ae7d8 | ||
|
|
00cd772cbc | ||
|
|
d434724a54 | ||
|
|
b6c9a3bb89 | ||
|
|
fc3bf45a7f | ||
|
|
cbf6c06e4b | ||
|
|
cff21124da | ||
|
|
ce7893c2e5 | ||
|
|
f7dcaa38ff | ||
|
|
8ce1013a26 | ||
|
|
114d67b408 | ||
|
|
56c2d16560 | ||
|
|
2238c42432 | ||
|
|
64f6cf6747 | ||
|
|
c0e9f1ca43 | ||
|
|
7f66087d8c | ||
|
|
18671b7cca | ||
|
|
233156c744 | ||
|
|
ac0ffab99c | ||
|
|
5e964d2105 | ||
|
|
59e7a5fa4b | ||
|
|
8452f577d2 | ||
|
|
726eb8d0e1 | ||
|
|
2c0d6b93ee | ||
|
|
533f2734f1 | ||
|
|
2859bee4c0 | ||
|
|
972f857c71 | ||
|
|
d2eb1488fd | ||
|
|
508e4eac61 | ||
|
|
fd1d807012 | ||
|
|
906c4c7f39 | ||
|
|
668e43f57c | ||
|
|
6d260c195f | ||
|
|
fdfecbb3f7 |
58
.travis.yml
@@ -1,58 +0,0 @@
|
|||||||
sudo: false
|
|
||||||
language: cpp
|
|
||||||
|
|
||||||
os:
|
|
||||||
- linux
|
|
||||||
- osx
|
|
||||||
|
|
||||||
cache:
|
|
||||||
directories:
|
|
||||||
- $HOME/.cache/yarn
|
|
||||||
|
|
||||||
notifications:
|
|
||||||
email: false
|
|
||||||
webhooks:
|
|
||||||
- http://vscode-probot.westus.cloudapp.azure.com:3450/travis/notifications
|
|
||||||
- http://vscode-test-probot.westus.cloudapp.azure.com:3450/travis/notifications
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
packages:
|
|
||||||
- gcc-4.9
|
|
||||||
- g++-4.9
|
|
||||||
- gcc-4.9-multilib
|
|
||||||
- g++-4.9-multilib
|
|
||||||
- zip
|
|
||||||
- libgtk2.0-0
|
|
||||||
- libx11-dev
|
|
||||||
- libxkbfile-dev
|
|
||||||
- libsecret-1-dev
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- git submodule update --init --recursive
|
|
||||||
- nvm install 8.9.1
|
|
||||||
- nvm use 8.9.1
|
|
||||||
- npm i -g yarn
|
|
||||||
# - npm config set python `which python`
|
|
||||||
- if [ $TRAVIS_OS_NAME == "linux" ]; then
|
|
||||||
export CXX="g++-4.9" CC="gcc-4.9" DISPLAY=:99.0;
|
|
||||||
sh -e /etc/init.d/xvfb start;
|
|
||||||
sleep 3;
|
|
||||||
fi
|
|
||||||
# Make npm logs less verbose
|
|
||||||
# - npm config set depth 0
|
|
||||||
# - npm config set loglevel warn
|
|
||||||
|
|
||||||
install:
|
|
||||||
- yarn
|
|
||||||
|
|
||||||
script:
|
|
||||||
- node_modules/.bin/gulp electron --silent
|
|
||||||
- node_modules/.bin/gulp compile --silent --max_old_space_size=4096
|
|
||||||
- node_modules/.bin/gulp optimize-vscode --silent --max_old_space_size=4096
|
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./scripts/test.sh --coverage --reporter dot; else ./scripts/test.sh --reporter dot; fi
|
|
||||||
|
|
||||||
after_success:
|
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then node_modules/.bin/coveralls < .build/coverage/lcov.info; fi
|
|
||||||
23
CHANGELOG.md
@@ -1,5 +1,28 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
|
## Version 1.2.4
|
||||||
|
* Release date: November 6, 2018
|
||||||
|
* Release status: General Availability
|
||||||
|
|
||||||
|
## What's new in this version
|
||||||
|
* Update to the SQL Server 2019 Preview extension
|
||||||
|
* Introducing Paste the Plan extension
|
||||||
|
* Introducing High Color queries extension, including SSMS editor theme
|
||||||
|
* Fixes in SQL Server Agent, Profiler, and Import extensions
|
||||||
|
* Fix .Net Core Socket KeepAlive issue causing dropped inactive connections on macOS
|
||||||
|
* Upgrade SQL Tools Service to .Net Core 2.2 Preview 3 (for eventual AAD support)
|
||||||
|
* Fix customer reported GitHub issues
|
||||||
|
|
||||||
|
## Contributions and "thank you"
|
||||||
|
We would like to thank all our users who raised issues, and in particular the following users who helped contribute fixes:
|
||||||
|
|
||||||
|
* rdaniels6813 for `Add query plan theme support #3031`
|
||||||
|
* Ruturaj123 for `Fixed some typos and grammatical errors #3027`
|
||||||
|
* PromoFaux for `Use emoji shortcodes in CONTRIBUTING.md instead of <20> #3009`
|
||||||
|
* ckaczor for `Fix: DATETIMEOFFSET data types should be ISO formatted #714`
|
||||||
|
* hi-im-T0dd for `Fixed sync issue with my forked master so this commit is correct #2948`
|
||||||
|
* hi-im-T0dd for `Fixed when right clicking and selecting Manage-correct name displays #2794`
|
||||||
|
|
||||||
## Version 1.1.3
|
## Version 1.1.3
|
||||||
* Release date: October 18, 2018
|
* Release date: October 18, 2018
|
||||||
* Release status: General Availability
|
* Release status: General Availability
|
||||||
|
|||||||
36
README.md
@@ -1,6 +1,7 @@
|
|||||||
# Azure Data Studio
|
# Azure Data Studio
|
||||||
|
|
||||||
[](https://gitter.im/Microsoft/sqlopsstudio?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
[](https://gitter.im/Microsoft/sqlopsstudio?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||||
|
[](https://dev.azure.com/ms/azuredatastudio/_build/latest?definitionId=4)
|
||||||
|
|
||||||
Azure Data Studio is a data management tool that enables you to work with SQL Server, Azure SQL DB and SQL DW from Windows, macOS and Linux.
|
Azure Data Studio is a data management tool that enables you to work with SQL Server, Azure SQL DB and SQL DW from Windows, macOS and Linux.
|
||||||
|
|
||||||
@@ -8,12 +9,12 @@ Azure Data Studio is a data management tool that enables you to work with SQL Se
|
|||||||
|
|
||||||
Platform | Link
|
Platform | Link
|
||||||
-- | --
|
-- | --
|
||||||
Windows Setup Installer | https://go.microsoft.com/fwlink/?linkid=2030731
|
Windows Setup Installer | https://go.microsoft.com/fwlink/?linkid=2038320
|
||||||
Windows ZIP | https://go.microsoft.com/fwlink/?linkid=2030736
|
Windows ZIP | https://go.microsoft.com/fwlink/?linkid=2038323
|
||||||
macOS ZIP | https://go.microsoft.com/fwlink/?linkid=2030738
|
macOS ZIP | https://go.microsoft.com/fwlink/?linkid=2038327
|
||||||
Linux TAR.GZ | https://go.microsoft.com/fwlink/?linkid=2030741
|
Linux TAR.GZ | https://go.microsoft.com/fwlink/?linkid=2038332
|
||||||
Linux RPM | https://go.microsoft.com/fwlink/?linkid=2030746
|
Linux RPM | https://go.microsoft.com/fwlink/?linkid=2038401
|
||||||
Linux DEB | https://go.microsoft.com/fwlink/?linkid=2030750
|
Linux DEB | https://go.microsoft.com/fwlink/?linkid=2038405
|
||||||
|
|
||||||
Go to our [download page](https://aka.ms/azuredatastudio) for more specific instructions.
|
Go to our [download page](https://aka.ms/azuredatastudio) for more specific instructions.
|
||||||
|
|
||||||
@@ -34,9 +35,9 @@ See the [change log](https://github.com/Microsoft/azuredatastudio/blob/master/CH
|
|||||||
- Task History window to view current task execution status, completion results with error messages and task T-SQL scripting
|
- Task History window to view current task execution status, completion results with error messages and task T-SQL scripting
|
||||||
- Scripting support to generate CREATE, SELECT, ALTER and DROP statements for database objects
|
- Scripting support to generate CREATE, SELECT, ALTER and DROP statements for database objects
|
||||||
- Workspaces with full Git integration and Find In Files support to managing T-SQL script libraries
|
- Workspaces with full Git integration and Find In Files support to managing T-SQL script libraries
|
||||||
- Modern light-weight shell with theming, user settings, full screen support, integrated terminal and numerous other features
|
- Modern light-weight shell with theming, user settings, full-screen support, integrated terminal and numerous other features
|
||||||
|
|
||||||
Here's some of these features in action.
|
Here are some of these features in action.
|
||||||
|
|
||||||
<img src='https://github.com/Microsoft/azuredatastudio/blob/master/docs/overview_screen.jpg' width='800px'>
|
<img src='https://github.com/Microsoft/azuredatastudio/blob/master/docs/overview_screen.jpg' width='800px'>
|
||||||
|
|
||||||
@@ -61,6 +62,12 @@ The [Microsoft Enterprise and Developer Privacy Statement](https://privacy.micro
|
|||||||
## Contributions and "Thank You"
|
## Contributions and "Thank You"
|
||||||
We would like to thank all our users who raised issues, and in particular the following users who helped contribute fixes:
|
We would like to thank all our users who raised issues, and in particular the following users who helped contribute fixes:
|
||||||
|
|
||||||
|
* rdaniels6813 for `Add query plan theme support #3031`
|
||||||
|
* Ruturaj123 for `Fixed some typos and grammatical errors #3027`
|
||||||
|
* PromoFaux for `Use emoji shortcodes in CONTRIBUTING.md instead of <20> #3009`
|
||||||
|
* ckaczor for `Fix: DATETIMEOFFSET data types should be ISO formatted #714`
|
||||||
|
* hi-im-T0dd for `Fixed sync issue with my forked master so this commit is correct #2948`
|
||||||
|
* hi-im-T0dd for `Fixed when right clicking and selecting Manage-correct name displays #2794`
|
||||||
* philoushka for `center the icon #2760`
|
* philoushka for `center the icon #2760`
|
||||||
* anthonypants for `Typo #2775`
|
* anthonypants for `Typo #2775`
|
||||||
* kstolte for `Fix Invalid Configuration in Launch.json #2789`
|
* kstolte for `Fix Invalid Configuration in Launch.json #2789`
|
||||||
@@ -69,25 +76,25 @@ We would like to thank all our users who raised issues, and in particular the fo
|
|||||||
* AlexFsmn `Disabled connection name input when connecting to a server. #2566`
|
* AlexFsmn `Disabled connection name input when connecting to a server. #2566`
|
||||||
* SebastianPfliegel `Added more saveAsCsv options #2099`
|
* SebastianPfliegel `Added more saveAsCsv options #2099`
|
||||||
* ianychoi `Fixes a typo: Mimunum -> Minimum #1994`
|
* ianychoi `Fixes a typo: Mimunum -> Minimum #1994`
|
||||||
* AlexFsmn `Fixed bug where proper file extension wasn't appended to filename. #2151`
|
* AlexFsmn `Fixed bug where proper file extension wasn't appended to the filename. #2151`
|
||||||
* AlexFsmn `Added functionality for adding any file to import wizard #2329`
|
* AlexFsmn `Added functionality for adding any file to import wizard #2329`
|
||||||
* AlexFsmn `Fixed background issue when copying a chart to clipboard #2215`
|
* AlexFsmn `Fixed background issue when copying a chart to clipboard #2215`
|
||||||
* AlexFsmn `Fixed problem where vertical charts didn't display labels correctly. #2263`
|
* AlexFsmn `Fixed problem where vertical charts didn't display labels correctly. #2263`
|
||||||
* AlexFsmn `Fixed Initial values for charts to match visuals #2266`
|
* AlexFsmn `Fixed Initial values for charts to match visuals #2266`
|
||||||
* AlexFsmn `Renamed chart option labels #2264`
|
* AlexFsmn `Renamed chart option labels #2264`
|
||||||
* AlexFsmn `Added feature for opening file after exporting to CSV/XLS/JSON & query files #2216`
|
* AlexFsmn `Added feature for the opening file after exporting to CSV/XLS/JSON & query files #2216`
|
||||||
* AlexFsmm `Get Connection String should copy to clipboard #2175`
|
* AlexFsmm `Get Connection String should copy to clipboard #2175`
|
||||||
* lanceklinger `Fix for double clicking column handle in results table #1504`
|
* lanceklinger `Fix for double-clicking column handle in results table #1504`
|
||||||
* westerncj for `Removed duplicate contribution from README.md (#753)`
|
* westerncj for `Removed duplicate contribution from README.md (#753)`
|
||||||
* ntovas for `Fix for duplicate extensions shown in "Save File" dialog. (#779)`
|
* ntovas for `Fix for duplicate extensions shown in "Save File" dialog. (#779)`
|
||||||
* SebastianPfliegel for `Add cursor snippet (#475)`
|
* SebastianPfliegel for `Add cursor snippet (#475)`
|
||||||
* mikaoelitiana for fix: `revert README and CONTRIBUTING after last VSCode merge (#574)`
|
* mikaoelitiana for the fix: `revert README and CONTRIBUTING after last VSCode merge (#574)`
|
||||||
* alextercete for `Reinstate menu item to install from VSIX (#682)`
|
* alextercete for `Reinstate menu item to install from VSIX (#682)`
|
||||||
* alextercete for `Fix "No extension gallery service configured" error (#427)`
|
* alextercete for `Fix "No extension gallery service configured" error (#427)`
|
||||||
* mwiedemeyer for `Fix #58: Default sort order for DB size widget (#111)`
|
* mwiedemeyer for `Fix #58: Default sort order for DB size widget (#111)`
|
||||||
* AlexTroshkin for `Show disconnect in context menu only when connectionProfile connected (#150)`
|
* AlexTroshkin for `Show disconnect in context menu only when connectionProfile connected (#150)`
|
||||||
* AlexTroshkin for `Fix #138: Invalid syntax color highlighting (identity not highlighting) (#140))`
|
* AlexTroshkin for `Fix #138: Invalid syntax color highlighting (identity not highlighting) (#140))`
|
||||||
* stebet for `Fix #153: Fixing sql snippets that failed on a DB with case-sensitive collation. (#152)`
|
* stebet for `Fix #153: Fixing sql snippets that failed on a DB with a case-sensitive collation. (#152)`
|
||||||
* SebastianPfliegel `Remove sqlExtensionHelp (#312)`
|
* SebastianPfliegel `Remove sqlExtensionHelp (#312)`
|
||||||
* olljanat for `Implemented npm version check (#314)`
|
* olljanat for `Implemented npm version check (#314)`
|
||||||
* Adam Machanic for helping with the `whoisactive` extension
|
* Adam Machanic for helping with the `whoisactive` extension
|
||||||
@@ -103,8 +110,7 @@ We would like to thank all our users who raised issues, and in particular the fo
|
|||||||
* Russian: Andrey Veselov, Anton Fontanov, Anton Savin, Elena Ostrovskaia, Igor Babichev, Maxim Zelensky, Rodion Fedechkin, Tasha T, Vladimir Zyryanov
|
* Russian: Andrey Veselov, Anton Fontanov, Anton Savin, Elena Ostrovskaia, Igor Babichev, Maxim Zelensky, Rodion Fedechkin, Tasha T, Vladimir Zyryanov
|
||||||
* Portuguese Brazil: Daniel de Sousa, Diogo Duarte, Douglas Correa, Douglas Eccker, José Emanuel Mendes, Marcelo Fernandes, Marcondes Alexandre, Roberto Fonseca, Rodrigo Crespi
|
* Portuguese Brazil: Daniel de Sousa, Diogo Duarte, Douglas Correa, Douglas Eccker, José Emanuel Mendes, Marcelo Fernandes, Marcondes Alexandre, Roberto Fonseca, Rodrigo Crespi
|
||||||
|
|
||||||
|
And of course, we'd like to thank the authors of all upstream dependencies. Please see a full list in the [ThirdPartyNotices.txt](https://raw.githubusercontent.com/Microsoft/azuredatastudio/master/ThirdPartyNotices.txt)
|
||||||
And of course we'd like to thank the authors of all upstream dependencies. Please see a full list in the [ThirdPartyNotices.txt](https://raw.githubusercontent.com/Microsoft/azuredatastudio/master/ThirdPartyNotices.txt)
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ expressly granted herein, whether by implication, estoppel or otherwise.
|
|||||||
jquery-ui: https://github.com/jquery/jquery-ui
|
jquery-ui: https://github.com/jquery/jquery-ui
|
||||||
jquery.event.drag: https://github.com/devongovett/jquery.event.drag
|
jquery.event.drag: https://github.com/devongovett/jquery.event.drag
|
||||||
jschardet: https://github.com/aadsm/jschardet
|
jschardet: https://github.com/aadsm/jschardet
|
||||||
|
JupyterLab: https://github.com/jupyterlab/jupyterlab
|
||||||
make-error: https://github.com/JsCommunity/make-error
|
make-error: https://github.com/JsCommunity/make-error
|
||||||
minimist: https://github.com/substack/minimist
|
minimist: https://github.com/substack/minimist
|
||||||
moment: https://github.com/moment/moment
|
moment: https://github.com/moment/moment
|
||||||
@@ -1166,6 +1167,43 @@ That's all there is to it!
|
|||||||
=========================================
|
=========================================
|
||||||
END OF jschardet NOTICES AND INFORMATION
|
END OF jschardet NOTICES AND INFORMATION
|
||||||
|
|
||||||
|
%% JupyterLab NOTICES AND INFORMATION BEGIN HERE
|
||||||
|
Copyright (c) 2015 Project Jupyter Contributors
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the copyright holder nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
Semver File License
|
||||||
|
===================
|
||||||
|
|
||||||
|
The semver.py file is from https://github.com/podhmo/python-semver
|
||||||
|
which is licensed under the "MIT" license. See the semver.py file for details.
|
||||||
|
|
||||||
|
END OF JupyterLab NOTICES AND INFORMATION
|
||||||
|
|
||||||
%% make-error NOTICES AND INFORMATION BEGIN HERE
|
%% make-error NOTICES AND INFORMATION BEGIN HERE
|
||||||
=========================================
|
=========================================
|
||||||
ISC © Julien Fontanet
|
ISC © Julien Fontanet
|
||||||
|
|||||||
19
appveyor.yml
@@ -1,19 +0,0 @@
|
|||||||
environment:
|
|
||||||
ELECTRON_RUN_AS_NODE: 1
|
|
||||||
VSCODE_BUILD_VERBOSE: true
|
|
||||||
|
|
||||||
cache:
|
|
||||||
- '%LOCALAPPDATA%\Yarn\cache'
|
|
||||||
|
|
||||||
install:
|
|
||||||
- ps: Install-Product node 8.9.1 x64
|
|
||||||
|
|
||||||
build_script:
|
|
||||||
- yarn
|
|
||||||
- .\node_modules\.bin\gulp electron
|
|
||||||
- npm run compile
|
|
||||||
|
|
||||||
test_script:
|
|
||||||
- node --version
|
|
||||||
- .\scripts\test.bat
|
|
||||||
- .\scripts\test-integration.bat
|
|
||||||
38
azure-pipelines-linux-mac.yml
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
steps:
|
||||||
|
- task: NodeTool@0
|
||||||
|
inputs:
|
||||||
|
versionSpec: '8.x'
|
||||||
|
displayName: 'Install Node.js'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
git submodule update --init --recursive
|
||||||
|
nvm install 8.9.1
|
||||||
|
nvm use 8.9.1
|
||||||
|
npm i -g yarn
|
||||||
|
displayName: 'preinstall'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
export CXX="g++-4.9" CC="gcc-4.9" DISPLAY=:99.0
|
||||||
|
sh -e /etc/init.d/xvfb start
|
||||||
|
sleep 3
|
||||||
|
displayName: 'Linux preinstall'
|
||||||
|
condition: eq(variables['Agent.OS'], 'Linux')
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
yarn
|
||||||
|
displayName: 'Install'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
node_modules/.bin/gulp electron --silent
|
||||||
|
node_modules/.bin/gulp compile --silent --max_old_space_size=4096
|
||||||
|
node_modules/.bin/gulp optimize-vscode --silent --max_old_space_size=4096
|
||||||
|
displayName: 'Scripts'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
./scripts/test.sh --reporter mocha-junit-reporter
|
||||||
|
displayName: 'Tests'
|
||||||
|
|
||||||
|
- task: PublishTestResults@2
|
||||||
|
inputs:
|
||||||
|
testResultsFiles: '**/test-results.xml'
|
||||||
|
condition: succeededOrFailed()
|
||||||
26
azure-pipelines-windows.yml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
steps:
|
||||||
|
- task: NodeTool@0
|
||||||
|
inputs:
|
||||||
|
versionSpec: '8.9'
|
||||||
|
displayName: 'Install Node.js'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
yarn
|
||||||
|
displayName: 'Yarn Install'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
.\node_modules\.bin\gulp electron
|
||||||
|
displayName: 'Electron'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
npm run compile
|
||||||
|
displayName: 'Compile'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
.\scripts\test.bat --reporter mocha-junit-reporter
|
||||||
|
displayName: 'Test'
|
||||||
|
|
||||||
|
- task: PublishTestResults@2
|
||||||
|
inputs:
|
||||||
|
testResultsFiles: 'test-results.xml'
|
||||||
|
condition: succeededOrFailed()
|
||||||
29
azure-pipelines.yml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
trigger:
|
||||||
|
- master
|
||||||
|
- releases/*
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
# All tasks on Windows
|
||||||
|
- job: build_all_windows
|
||||||
|
displayName: Build all tasks (Windows)
|
||||||
|
pool:
|
||||||
|
vmImage: vs2017-win2016
|
||||||
|
steps:
|
||||||
|
- template: azure-pipelines-windows.yml
|
||||||
|
|
||||||
|
# All tasks on Linux
|
||||||
|
- job: build_all_linux
|
||||||
|
displayName: Build all tasks (Linux)
|
||||||
|
pool:
|
||||||
|
vmImage: 'Ubuntu 16.04'
|
||||||
|
steps:
|
||||||
|
- template: azure-pipelines-linux-mac.yml
|
||||||
|
|
||||||
|
# All tasks on macOS
|
||||||
|
- job: build_all_darwin
|
||||||
|
displayName: Build all tasks (macOS)
|
||||||
|
pool:
|
||||||
|
vmImage: macos-10.13
|
||||||
|
steps:
|
||||||
|
- template: azure-pipelines-linux-mac.yml
|
||||||
@@ -129,6 +129,7 @@ const vscodeResources = [
|
|||||||
'out-build/sql/parts/jobManagement/common/media/*.svg',
|
'out-build/sql/parts/jobManagement/common/media/*.svg',
|
||||||
'out-build/sql/media/objectTypes/*.svg',
|
'out-build/sql/media/objectTypes/*.svg',
|
||||||
'out-build/sql/media/icons/*.svg',
|
'out-build/sql/media/icons/*.svg',
|
||||||
|
'out-build/sql/parts/notebook/media/**/*.svg',
|
||||||
'!**/test/**'
|
'!**/test/**'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -9,20 +9,21 @@
|
|||||||
"@types/mime": "0.0.29",
|
"@types/mime": "0.0.29",
|
||||||
"@types/minimatch": "^3.0.3",
|
"@types/minimatch": "^3.0.3",
|
||||||
"@types/node": "8.0.33",
|
"@types/node": "8.0.33",
|
||||||
"@types/xml2js": "0.0.33",
|
|
||||||
"@types/request": "^2.47.0",
|
"@types/request": "^2.47.0",
|
||||||
|
"@types/xml2js": "0.0.33",
|
||||||
"azure-storage": "^2.1.0",
|
"azure-storage": "^2.1.0",
|
||||||
"decompress": "^4.2.0",
|
"decompress": "^4.2.0",
|
||||||
|
"del": "^3.0.0",
|
||||||
"documentdb": "1.13.0",
|
"documentdb": "1.13.0",
|
||||||
"service-downloader": "github:anthonydresser/service-downloader#0.1.5",
|
|
||||||
"fs-extra-promise": "^1.0.1",
|
"fs-extra-promise": "^1.0.1",
|
||||||
|
"github-releases": "^0.4.1",
|
||||||
"mime": "^1.3.4",
|
"mime": "^1.3.4",
|
||||||
"minimist": "^1.2.0",
|
"minimist": "^1.2.0",
|
||||||
|
"request": "^2.85.0",
|
||||||
|
"service-downloader": "github:anthonydresser/service-downloader#0.1.5",
|
||||||
"typescript": "2.9.2",
|
"typescript": "2.9.2",
|
||||||
"vscode": "^1.0.1",
|
"vscode": "^1.0.1",
|
||||||
"xml2js": "^0.4.17",
|
"xml2js": "^0.4.17"
|
||||||
"github-releases": "^0.4.1",
|
|
||||||
"request": "^2.85.0"
|
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"compile": "tsc -p tsconfig.build.json",
|
"compile": "tsc -p tsconfig.build.json",
|
||||||
|
|||||||
@@ -46,6 +46,7 @@
|
|||||||
"@types/minimatch@^3.0.3":
|
"@types/minimatch@^3.0.3":
|
||||||
version "3.0.3"
|
version "3.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
|
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
|
||||||
|
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
|
||||||
|
|
||||||
"@types/node@*":
|
"@types/node@*":
|
||||||
version "8.0.51"
|
version "8.0.51"
|
||||||
@@ -570,6 +571,18 @@ deep-assign@^1.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
is-obj "^1.0.0"
|
is-obj "^1.0.0"
|
||||||
|
|
||||||
|
del@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
|
||||||
|
integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=
|
||||||
|
dependencies:
|
||||||
|
globby "^6.1.0"
|
||||||
|
is-path-cwd "^1.0.0"
|
||||||
|
is-path-in-cwd "^1.0.0"
|
||||||
|
p-map "^1.1.1"
|
||||||
|
pify "^3.0.0"
|
||||||
|
rimraf "^2.2.8"
|
||||||
|
|
||||||
delayed-stream@~1.0.0:
|
delayed-stream@~1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||||
@@ -941,6 +954,29 @@ glob@^5.0.3:
|
|||||||
once "^1.3.0"
|
once "^1.3.0"
|
||||||
path-is-absolute "^1.0.0"
|
path-is-absolute "^1.0.0"
|
||||||
|
|
||||||
|
glob@^7.0.3:
|
||||||
|
version "7.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
|
||||||
|
integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
|
||||||
|
dependencies:
|
||||||
|
fs.realpath "^1.0.0"
|
||||||
|
inflight "^1.0.4"
|
||||||
|
inherits "2"
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
once "^1.3.0"
|
||||||
|
path-is-absolute "^1.0.0"
|
||||||
|
|
||||||
|
globby@^6.1.0:
|
||||||
|
version "6.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
|
||||||
|
integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
|
||||||
|
dependencies:
|
||||||
|
array-union "^1.0.1"
|
||||||
|
glob "^7.0.3"
|
||||||
|
object-assign "^4.0.1"
|
||||||
|
pify "^2.0.0"
|
||||||
|
pinkie-promise "^2.0.0"
|
||||||
|
|
||||||
glogg@^1.0.0:
|
glogg@^1.0.0:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.1.tgz#dcf758e44789cc3f3d32c1f3562a3676e6a34810"
|
resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.1.tgz#dcf758e44789cc3f3d32c1f3562a3676e6a34810"
|
||||||
@@ -1312,6 +1348,25 @@ is-obj@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
|
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
|
||||||
integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
|
integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
|
||||||
|
|
||||||
|
is-path-cwd@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
|
||||||
|
integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=
|
||||||
|
|
||||||
|
is-path-in-cwd@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52"
|
||||||
|
integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==
|
||||||
|
dependencies:
|
||||||
|
is-path-inside "^1.0.0"
|
||||||
|
|
||||||
|
is-path-inside@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
|
||||||
|
integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
|
||||||
|
dependencies:
|
||||||
|
path-is-inside "^1.0.1"
|
||||||
|
|
||||||
is-posix-bracket@^0.1.0:
|
is-posix-bracket@^0.1.0:
|
||||||
version "0.1.1"
|
version "0.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
|
resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
|
||||||
@@ -1777,6 +1832,11 @@ os-tmpdir@~1.0.2:
|
|||||||
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||||
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
|
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
|
||||||
|
|
||||||
|
p-map@^1.1.1:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
|
||||||
|
integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==
|
||||||
|
|
||||||
parse-glob@^3.0.4:
|
parse-glob@^3.0.4:
|
||||||
version "3.0.4"
|
version "3.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
|
resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
|
||||||
@@ -1797,6 +1857,11 @@ path-is-absolute@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
||||||
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
|
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
|
||||||
|
|
||||||
|
path-is-inside@^1.0.1:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
|
||||||
|
integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
|
||||||
|
|
||||||
pause-stream@0.0.11:
|
pause-stream@0.0.11:
|
||||||
version "0.0.11"
|
version "0.0.11"
|
||||||
resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"
|
resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"
|
||||||
@@ -1819,7 +1884,7 @@ performance-now@^2.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
||||||
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
|
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
|
||||||
|
|
||||||
pify@^2.3.0:
|
pify@^2.0.0, pify@^2.3.0:
|
||||||
version "2.3.0"
|
version "2.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
|
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
|
||||||
integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
|
integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
|
||||||
@@ -2117,7 +2182,7 @@ requires-port@~1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
|
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
|
||||||
integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
|
integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
|
||||||
|
|
||||||
rimraf@2:
|
rimraf@2, rimraf@^2.2.8:
|
||||||
version "2.6.2"
|
version "2.6.2"
|
||||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
|
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
|
||||||
integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==
|
integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==
|
||||||
|
|||||||
1
docs/UX-Design-Guidelines.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "agent",
|
"name": "agent",
|
||||||
"displayName": "SQL Server Agent",
|
"displayName": "SQL Server Agent",
|
||||||
"description": "Manage and troubleshoot SQL Server Agent jobs",
|
"description": "Manage and troubleshoot SQL Server Agent jobs",
|
||||||
"version": "0.34.0",
|
"version": "0.35.0",
|
||||||
"publisher": "Microsoft",
|
"publisher": "Microsoft",
|
||||||
"preview": true,
|
"preview": true,
|
||||||
"license": "https://raw.githubusercontent.com/Microsoft/azuredatastudio/master/LICENSE.txt",
|
"license": "https://raw.githubusercontent.com/Microsoft/azuredatastudio/master/LICENSE.txt",
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import * as vscode from 'vscode';
|
|||||||
import * as sqlops from 'sqlops';
|
import * as sqlops from 'sqlops';
|
||||||
import { AgentUtils } from '../agentUtils';
|
import { AgentUtils } from '../agentUtils';
|
||||||
import { IAgentDialogData, AgentDialogMode } from '../interfaces';
|
import { IAgentDialogData, AgentDialogMode } from '../interfaces';
|
||||||
|
import { JobData } from './jobData';
|
||||||
|
|
||||||
const localize = nls.loadMessageBundle();
|
const localize = nls.loadMessageBundle();
|
||||||
|
|
||||||
@@ -45,8 +46,19 @@ export class AlertData implements IAgentDialogData {
|
|||||||
wmiEventNamespace: string;
|
wmiEventNamespace: string;
|
||||||
wmiEventQuery: string;
|
wmiEventQuery: string;
|
||||||
|
|
||||||
constructor(ownerUri:string, alertInfo: sqlops.AgentAlertInfo) {
|
private viaJobDialog: boolean;
|
||||||
|
private jobModel: JobData;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
ownerUri:string,
|
||||||
|
alertInfo: sqlops.AgentAlertInfo,
|
||||||
|
jobModel?: JobData,
|
||||||
|
viaJobDialog: boolean = false
|
||||||
|
) {
|
||||||
this.ownerUri = ownerUri;
|
this.ownerUri = ownerUri;
|
||||||
|
this.viaJobDialog = viaJobDialog;
|
||||||
|
this.jobModel = jobModel;
|
||||||
|
this.jobName = this.jobName ? this.jobName : this.jobModel.name;
|
||||||
|
|
||||||
if (alertInfo) {
|
if (alertInfo) {
|
||||||
this.dialogMode = AgentDialogMode.EDIT;
|
this.dialogMode = AgentDialogMode.EDIT;
|
||||||
@@ -60,7 +72,6 @@ export class AlertData implements IAgentDialogData {
|
|||||||
this.includeEventDescription = alertInfo.includeEventDescription.toString();
|
this.includeEventDescription = alertInfo.includeEventDescription.toString();
|
||||||
this.isEnabled = alertInfo.isEnabled;
|
this.isEnabled = alertInfo.isEnabled;
|
||||||
this.jobId = alertInfo.jobId;
|
this.jobId = alertInfo.jobId;
|
||||||
this.jobName = alertInfo.jobName;
|
|
||||||
this.lastOccurrenceDate = alertInfo.lastOccurrenceDate;
|
this.lastOccurrenceDate = alertInfo.lastOccurrenceDate;
|
||||||
this.lastResponseDate = alertInfo.lastResponseDate;
|
this.lastResponseDate = alertInfo.lastResponseDate;
|
||||||
this.messageId = alertInfo.messageId;
|
this.messageId = alertInfo.messageId;
|
||||||
@@ -82,10 +93,18 @@ export class AlertData implements IAgentDialogData {
|
|||||||
|
|
||||||
public async save() {
|
public async save() {
|
||||||
let agentService = await AgentUtils.getAgentService();
|
let agentService = await AgentUtils.getAgentService();
|
||||||
let result = this.dialogMode === AgentDialogMode.CREATE
|
let result: any;
|
||||||
? await agentService.createAlert(this.ownerUri, this.toAgentAlertInfo())
|
// if it's called via the job dialog, add it to the
|
||||||
: await agentService.updateAlert(this.ownerUri, this.originalName, this.toAgentAlertInfo());
|
// job model
|
||||||
|
if (this.viaJobDialog) {
|
||||||
|
if (this.jobModel) {
|
||||||
|
Promise.resolve(this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// has to be a create alert
|
||||||
|
result = await agentService.createAlert(this.ownerUri, this.toAgentAlertInfo());
|
||||||
|
}
|
||||||
if (!result || !result.success) {
|
if (!result || !result.success) {
|
||||||
vscode.window.showErrorMessage(
|
vscode.window.showErrorMessage(
|
||||||
localize('alertData.saveErrorMessage', "Alert update failed '{0}'", result.errorMessage ? result.errorMessage : 'Unknown'));
|
localize('alertData.saveErrorMessage', "Alert update failed '{0}'", result.errorMessage ? result.errorMessage : 'Unknown'));
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ export class JobData implements IAgentDialogData {
|
|||||||
public jobSteps: sqlops.AgentJobStepInfo[];
|
public jobSteps: sqlops.AgentJobStepInfo[];
|
||||||
public jobSchedules: sqlops.AgentJobScheduleInfo[];
|
public jobSchedules: sqlops.AgentJobScheduleInfo[];
|
||||||
public alerts: sqlops.AgentAlertInfo[];
|
public alerts: sqlops.AgentAlertInfo[];
|
||||||
|
public jobId: string;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
ownerUri: string,
|
ownerUri: string,
|
||||||
@@ -62,6 +63,7 @@ export class JobData implements IAgentDialogData {
|
|||||||
this.jobSteps = jobInfo.JobSteps;
|
this.jobSteps = jobInfo.JobSteps;
|
||||||
this.jobSchedules = jobInfo.JobSchedules;
|
this.jobSchedules = jobInfo.JobSchedules;
|
||||||
this.alerts = jobInfo.Alerts;
|
this.alerts = jobInfo.Alerts;
|
||||||
|
this.jobId = jobInfo.jobId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,7 +117,6 @@ export class JobData implements IAgentDialogData {
|
|||||||
let result = this.dialogMode === AgentDialogMode.CREATE
|
let result = this.dialogMode === AgentDialogMode.CREATE
|
||||||
? await this._agentService.createJob(this.ownerUri, jobInfo)
|
? await this._agentService.createJob(this.ownerUri, jobInfo)
|
||||||
: await this._agentService.updateJob(this.ownerUri, this.originalName, jobInfo);
|
: await this._agentService.updateJob(this.ownerUri, this.originalName, jobInfo);
|
||||||
|
|
||||||
if (!result || !result.success) {
|
if (!result || !result.success) {
|
||||||
vscode.window.showErrorMessage(
|
vscode.window.showErrorMessage(
|
||||||
localize('jobData.saveErrorMessage', "Job update failed '{0}'", result.errorMessage ? result.errorMessage : 'Unknown'));
|
localize('jobData.saveErrorMessage', "Job update failed '{0}'", result.errorMessage ? result.errorMessage : 'Unknown'));
|
||||||
@@ -135,18 +136,6 @@ export class JobData implements IAgentDialogData {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public addJobSchedule(schedule: sqlops.AgentJobScheduleInfo) {
|
|
||||||
if (this.jobSchedules) {
|
|
||||||
let existingSchedule = this.jobSchedules.find(item => item.name === schedule.name);
|
|
||||||
if (!existingSchedule) {
|
|
||||||
this.jobSchedules.push(schedule);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.jobSchedules = [];
|
|
||||||
this.jobSchedules.push(schedule);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public toAgentJobInfo(): sqlops.AgentJobInfo {
|
public toAgentJobInfo(): sqlops.AgentJobInfo {
|
||||||
return {
|
return {
|
||||||
name: this.name,
|
name: this.name,
|
||||||
@@ -177,7 +166,7 @@ export class JobData implements IAgentDialogData {
|
|||||||
categoryType: 1, // LocalJob, hard-coding the value, corresponds to the target tab in SSMS
|
categoryType: 1, // LocalJob, hard-coding the value, corresponds to the target tab in SSMS
|
||||||
lastRun: '',
|
lastRun: '',
|
||||||
nextRun: '',
|
nextRun: '',
|
||||||
jobId: ''
|
jobId: this.jobId
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -46,11 +46,13 @@ export class JobStepData implements IAgentDialogData {
|
|||||||
public retryInterval: number;
|
public retryInterval: number;
|
||||||
public proxyName: string;
|
public proxyName: string;
|
||||||
private jobModel: JobData;
|
private jobModel: JobData;
|
||||||
|
private viaJobDialog: boolean;
|
||||||
|
|
||||||
constructor(ownerUri:string, jobModel?: JobData) {
|
constructor(ownerUri:string, jobModel?: JobData, viaJobDialog: boolean = false) {
|
||||||
this.ownerUri = ownerUri;
|
this.ownerUri = ownerUri;
|
||||||
this.jobName = jobModel.name;
|
this.jobName = jobModel.name;
|
||||||
this.jobModel = jobModel;
|
this.jobModel = jobModel;
|
||||||
|
this.viaJobDialog = viaJobDialog;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async initialize() {
|
public async initialize() {
|
||||||
@@ -59,18 +61,16 @@ export class JobStepData implements IAgentDialogData {
|
|||||||
public async save() {
|
public async save() {
|
||||||
let agentService = await AgentUtils.getAgentService();
|
let agentService = await AgentUtils.getAgentService();
|
||||||
let result: any;
|
let result: any;
|
||||||
if (this.dialogMode === AgentDialogMode.CREATE) {
|
// if it's called via the job dialog, add it to the
|
||||||
if (this.jobModel && this.jobModel.dialogMode === AgentDialogMode.CREATE) {
|
// job model
|
||||||
// create job -> create step
|
if (this.viaJobDialog) {
|
||||||
|
if (this.jobModel) {
|
||||||
Promise.resolve(this);
|
Promise.resolve(this);
|
||||||
return;
|
return;
|
||||||
} else {
|
|
||||||
// edit job -> create step
|
|
||||||
result = await agentService.createJobStep(this.ownerUri, JobStepData.convertToAgentJobStepInfo(this));
|
|
||||||
}
|
}
|
||||||
} else if (this.jobModel && this.jobModel.dialogMode === AgentDialogMode.EDIT) {
|
} else {
|
||||||
// edit job -> edit step
|
// has to be a create step
|
||||||
result = await agentService.updateJobStep(this.ownerUri, this.stepName, JobStepData.convertToAgentJobStepInfo(this));
|
result = await agentService.createJobStep(this.ownerUri, JobStepData.convertToAgentJobStepInfo(this));
|
||||||
}
|
}
|
||||||
if (!result || !result.success) {
|
if (!result || !result.success) {
|
||||||
vscode.window.showErrorMessage(
|
vscode.window.showErrorMessage(
|
||||||
|
|||||||
@@ -29,8 +29,6 @@ export class PickScheduleData implements IAgentDialogData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async save() {
|
public async save() {
|
||||||
let agentService = await AgentUtils.getAgentService();
|
|
||||||
this.selectedSchedule.jobName = this.jobName;
|
this.selectedSchedule.jobName = this.jobName;
|
||||||
let result = await agentService.createJobSchedule(this.ownerUri, this.selectedSchedule);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import { AgentUtils } from '../agentUtils';
|
|||||||
import { AlertData } from '../data/alertData';
|
import { AlertData } from '../data/alertData';
|
||||||
import { OperatorDialog } from './operatorDialog';
|
import { OperatorDialog } from './operatorDialog';
|
||||||
import { JobDialog } from './jobDialog';
|
import { JobDialog } from './jobDialog';
|
||||||
|
import { JobData } from '../data/jobData';
|
||||||
|
|
||||||
const localize = nls.loadMessageBundle();
|
const localize = nls.loadMessageBundle();
|
||||||
|
|
||||||
@@ -148,14 +149,23 @@ export class AlertDialog extends AgentDialog<AlertData> {
|
|||||||
private delayMinutesTextBox: sqlops.InputBoxComponent;
|
private delayMinutesTextBox: sqlops.InputBoxComponent;
|
||||||
private delaySecondsTextBox: sqlops.InputBoxComponent;
|
private delaySecondsTextBox: sqlops.InputBoxComponent;
|
||||||
|
|
||||||
private jobs: string[];
|
|
||||||
private databases: string[];
|
private databases: string[];
|
||||||
|
private jobModel: JobData;
|
||||||
|
public jobId: string;
|
||||||
|
public jobName: string;
|
||||||
|
|
||||||
constructor(ownerUri: string, alertInfo: sqlops.AgentAlertInfo = undefined, jobs: string[]) {
|
constructor(
|
||||||
|
ownerUri: string,
|
||||||
|
jobModel: JobData,
|
||||||
|
alertInfo: sqlops.AgentAlertInfo = undefined,
|
||||||
|
viaJobDialog: boolean = false
|
||||||
|
) {
|
||||||
super(ownerUri,
|
super(ownerUri,
|
||||||
new AlertData(ownerUri, alertInfo),
|
new AlertData(ownerUri, alertInfo, jobModel, viaJobDialog),
|
||||||
alertInfo ? AlertDialog.EditDialogTitle : AlertDialog.CreateDialogTitle);
|
alertInfo ? AlertDialog.EditDialogTitle : AlertDialog.CreateDialogTitle);
|
||||||
this.jobs = jobs;
|
this.jobModel = jobModel;
|
||||||
|
this.jobId = this.jobId ? this.jobId : this.jobModel.jobId;
|
||||||
|
this.jobName = this.jobName ? this.jobName : this.jobModel.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async initializeDialog(dialog: sqlops.window.modelviewdialog.Dialog) {
|
protected async initializeDialog(dialog: sqlops.window.modelviewdialog.Dialog) {
|
||||||
@@ -512,7 +522,8 @@ export class AlertDialog extends AgentDialog<AlertData> {
|
|||||||
protected updateModel() {
|
protected updateModel() {
|
||||||
this.model.name = this.nameTextBox.value;
|
this.model.name = this.nameTextBox.value;
|
||||||
this.model.isEnabled = this.enabledCheckBox.checked;
|
this.model.isEnabled = this.enabledCheckBox.checked;
|
||||||
|
this.model.jobId = this.jobId;
|
||||||
|
this.model.jobName = this.jobName;
|
||||||
this.model.alertType = this.getDropdownValue(this.typeDropDown);
|
this.model.alertType = this.getDropdownValue(this.typeDropDown);
|
||||||
let databaseName = this.getDropdownValue(this.databaseDropDown);
|
let databaseName = this.getDropdownValue(this.databaseDropDown);
|
||||||
this.model.databaseName = (databaseName !== AlertDialog.AllDatabases) ? databaseName : undefined;
|
this.model.databaseName = (databaseName !== AlertDialog.AllDatabases) ? databaseName : undefined;
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import { PickScheduleDialog } from './pickScheduleDialog';
|
|||||||
import { AlertDialog } from './alertDialog';
|
import { AlertDialog } from './alertDialog';
|
||||||
import { AgentDialog } from './agentDialog';
|
import { AgentDialog } from './agentDialog';
|
||||||
import { AgentUtils } from '../agentUtils';
|
import { AgentUtils } from '../agentUtils';
|
||||||
|
import { JobStepData } from '../data/jobStepData';
|
||||||
|
|
||||||
const localize = nls.loadMessageBundle();
|
const localize = nls.loadMessageBundle();
|
||||||
|
|
||||||
@@ -110,11 +111,19 @@ export class JobDialog extends AgentDialog<JobData> {
|
|||||||
private newAlertButton: sqlops.ButtonComponent;
|
private newAlertButton: sqlops.ButtonComponent;
|
||||||
private isEdit: boolean = false;
|
private isEdit: boolean = false;
|
||||||
|
|
||||||
|
// Job objects
|
||||||
|
private steps: sqlops.AgentJobStepInfo[];
|
||||||
|
private schedules: sqlops.AgentJobScheduleInfo[];
|
||||||
|
private alerts: sqlops.AgentAlertInfo[] = [];
|
||||||
|
|
||||||
constructor(ownerUri: string, jobInfo: sqlops.AgentJobInfo = undefined) {
|
constructor(ownerUri: string, jobInfo: sqlops.AgentJobInfo = undefined) {
|
||||||
super(
|
super(
|
||||||
ownerUri,
|
ownerUri,
|
||||||
new JobData(ownerUri, jobInfo),
|
new JobData(ownerUri, jobInfo),
|
||||||
jobInfo ? JobDialog.EditDialogTitle : JobDialog.CreateDialogTitle);
|
jobInfo ? JobDialog.EditDialogTitle : JobDialog.CreateDialogTitle);
|
||||||
|
this.steps = this.model.jobSteps ? this.model.jobSteps : [];
|
||||||
|
this.schedules = this.model.jobSchedules ? this.model.jobSchedules : [];
|
||||||
|
this.alerts = this.model.alerts ? this.model.alerts : [];
|
||||||
this.isEdit = jobInfo ? true : false;
|
this.isEdit = jobInfo ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,12 +207,7 @@ export class JobDialog extends AgentDialog<JobData> {
|
|||||||
|
|
||||||
private initializeStepsTab() {
|
private initializeStepsTab() {
|
||||||
this.stepsTab.registerContent(async view => {
|
this.stepsTab.registerContent(async view => {
|
||||||
let previewTag = view.modelBuilder.text()
|
let data = this.steps ? this.convertStepsToData(this.steps) : [];
|
||||||
.withProperties({
|
|
||||||
value: 'Feature Preview'
|
|
||||||
}).component();
|
|
||||||
let steps = this.model.jobSteps ? this.model.jobSteps : [];
|
|
||||||
let data = this.convertStepsToData(steps);
|
|
||||||
this.stepsTable = view.modelBuilder.table()
|
this.stepsTable = view.modelBuilder.table()
|
||||||
.withProperties({
|
.withProperties({
|
||||||
columns: [
|
columns: [
|
||||||
@@ -237,13 +241,11 @@ export class JobDialog extends AgentDialog<JobData> {
|
|||||||
width: 80
|
width: 80
|
||||||
}).component();
|
}).component();
|
||||||
|
|
||||||
let stepDialog = new JobStepDialog(this.model.ownerUri, '' , this.model);
|
let stepDialog = new JobStepDialog(this.model.ownerUri, '' , this.model, null, true);
|
||||||
stepDialog.onSuccess((step) => {
|
stepDialog.onSuccess((step) => {
|
||||||
if (!this.model.jobSteps) {
|
let stepInfo = JobStepData.convertToAgentJobStepInfo(step);
|
||||||
this.model.jobSteps = [];
|
this.steps.push(stepInfo);
|
||||||
}
|
this.stepsTable.data = this.convertStepsToData(this.steps);
|
||||||
this.model.jobSteps.push(step);
|
|
||||||
this.stepsTable.data = this.convertStepsToData(this.model.jobSteps);
|
|
||||||
});
|
});
|
||||||
this.newStepButton.onDidClick((e)=>{
|
this.newStepButton.onDidClick((e)=>{
|
||||||
if (this.nameTextBox.value && this.nameTextBox.value.length > 0) {
|
if (this.nameTextBox.value && this.nameTextBox.value.length > 0) {
|
||||||
@@ -277,7 +279,7 @@ export class JobDialog extends AgentDialog<JobData> {
|
|||||||
this.deleteStepButton.enabled = true;
|
this.deleteStepButton.enabled = true;
|
||||||
this.editStepButton.enabled = true;
|
this.editStepButton.enabled = true;
|
||||||
this.editStepButton.onDidClick(() => {
|
this.editStepButton.onDidClick(() => {
|
||||||
let stepDialog = new JobStepDialog(this.model.ownerUri, '' , this.model, stepData);
|
let stepDialog = new JobStepDialog(this.model.ownerUri, '' , this.model, stepData, true);
|
||||||
stepDialog.openDialog();
|
stepDialog.openDialog();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -287,7 +289,6 @@ export class JobDialog extends AgentDialog<JobData> {
|
|||||||
agentService.deleteJobStep(this.ownerUri, stepData).then((result) => {
|
agentService.deleteJobStep(this.ownerUri, stepData).then((result) => {
|
||||||
if (result && result.success) {
|
if (result && result.success) {
|
||||||
delete steps[rowNumber];
|
delete steps[rowNumber];
|
||||||
this.model.jobSteps = steps;
|
|
||||||
let data = this.convertStepsToData(steps);
|
let data = this.convertStepsToData(steps);
|
||||||
this.stepsTable.data = data;
|
this.stepsTable.data = data;
|
||||||
}
|
}
|
||||||
@@ -299,10 +300,6 @@ export class JobDialog extends AgentDialog<JobData> {
|
|||||||
|
|
||||||
let formModel = view.modelBuilder.formContainer()
|
let formModel = view.modelBuilder.formContainer()
|
||||||
.withFormItems([{
|
.withFormItems([{
|
||||||
component: previewTag,
|
|
||||||
title: ''
|
|
||||||
},
|
|
||||||
{
|
|
||||||
component: this.stepsTable,
|
component: this.stepsTable,
|
||||||
title: this.JobStepsTopLabelString,
|
title: this.JobStepsTopLabelString,
|
||||||
actions: [this.moveStepUpButton, this.moveStepDownButton, this.newStepButton, this.editStepButton, this.deleteStepButton]
|
actions: [this.moveStepUpButton, this.moveStepDownButton, this.newStepButton, this.editStepButton, this.deleteStepButton]
|
||||||
@@ -313,10 +310,6 @@ export class JobDialog extends AgentDialog<JobData> {
|
|||||||
|
|
||||||
private initializeAlertsTab() {
|
private initializeAlertsTab() {
|
||||||
this.alertsTab.registerContent(async view => {
|
this.alertsTab.registerContent(async view => {
|
||||||
let previewTag = view.modelBuilder.text()
|
|
||||||
.withProperties({
|
|
||||||
value: 'Feature Preview'
|
|
||||||
}).component();
|
|
||||||
let alerts = this.model.alerts ? this.model.alerts : [];
|
let alerts = this.model.alerts ? this.model.alerts : [];
|
||||||
let data = this.convertAlertsToData(alerts);
|
let data = this.convertAlertsToData(alerts);
|
||||||
this.alertsTable = view.modelBuilder.table()
|
this.alertsTable = view.modelBuilder.table()
|
||||||
@@ -327,7 +320,7 @@ export class JobDialog extends AgentDialog<JobData> {
|
|||||||
this.AlertTypeLabelString
|
this.AlertTypeLabelString
|
||||||
],
|
],
|
||||||
data: data,
|
data: data,
|
||||||
height: 430,
|
height: 750,
|
||||||
width: 400
|
width: 400
|
||||||
}).component();
|
}).component();
|
||||||
|
|
||||||
@@ -336,18 +329,24 @@ export class JobDialog extends AgentDialog<JobData> {
|
|||||||
width: 80
|
width: 80
|
||||||
}).component();
|
}).component();
|
||||||
|
|
||||||
this.newAlertButton.onDidClick((e)=>{
|
let alertDialog = new AlertDialog(this.model.ownerUri, this.model, null, true);
|
||||||
let alertDialog = new AlertDialog(this.model.ownerUri, null, []);
|
alertDialog.onSuccess((alert) => {
|
||||||
alertDialog.onSuccess((dialogModel) => {
|
let alertInfo = alert.toAgentAlertInfo();
|
||||||
|
this.alerts.push(alertInfo);
|
||||||
|
this.alertsTable.data = this.convertAlertsToData(this.alerts);
|
||||||
});
|
});
|
||||||
|
this.newAlertButton.onDidClick(()=>{
|
||||||
|
if (this.nameTextBox.value && this.nameTextBox.value.length > 0) {
|
||||||
|
alertDialog.jobId = this.model.jobId;
|
||||||
|
alertDialog.jobName = this.model.name ? this.model.name : this.nameTextBox.value;
|
||||||
alertDialog.openDialog();
|
alertDialog.openDialog();
|
||||||
|
} else {
|
||||||
|
this.dialog.message = { text: this.BlankJobNameErrorText };
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let formModel = view.modelBuilder.formContainer()
|
let formModel = view.modelBuilder.formContainer()
|
||||||
.withFormItems([{
|
.withFormItems([{
|
||||||
component: previewTag,
|
|
||||||
title: ''
|
|
||||||
}, {
|
|
||||||
component: this.alertsTable,
|
component: this.alertsTable,
|
||||||
title: this.AlertsTopLabelString,
|
title: this.AlertsTopLabelString,
|
||||||
actions: [this.newAlertButton]
|
actions: [this.newAlertButton]
|
||||||
@@ -380,8 +379,11 @@ export class JobDialog extends AgentDialog<JobData> {
|
|||||||
pickScheduleDialog.onSuccess((dialogModel) => {
|
pickScheduleDialog.onSuccess((dialogModel) => {
|
||||||
let selectedSchedule = dialogModel.selectedSchedule;
|
let selectedSchedule = dialogModel.selectedSchedule;
|
||||||
if (selectedSchedule) {
|
if (selectedSchedule) {
|
||||||
selectedSchedule.jobName = this.model.name;
|
let existingSchedule = this.schedules.find(item => item.name === selectedSchedule.name);
|
||||||
this.model.addJobSchedule(selectedSchedule);
|
if (!existingSchedule) {
|
||||||
|
selectedSchedule.jobName = this.model.name ? this.model.name : this.nameTextBox.value;
|
||||||
|
this.schedules.push(selectedSchedule);
|
||||||
|
}
|
||||||
this.populateScheduleTable();
|
this.populateScheduleTable();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -402,8 +404,7 @@ export class JobDialog extends AgentDialog<JobData> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private populateScheduleTable() {
|
private populateScheduleTable() {
|
||||||
let schedules = this.model.jobSchedules ? this.model.jobSchedules : [];
|
let data = this.convertSchedulesToData(this.schedules);
|
||||||
let data = this.convertSchedulesToData(schedules);
|
|
||||||
if (data.length > 0) {
|
if (data.length > 0) {
|
||||||
this.schedulesTable.data = data;
|
this.schedulesTable.data = data;
|
||||||
this.schedulesTable.height = 750;
|
this.schedulesTable.height = 750;
|
||||||
@@ -566,5 +567,17 @@ export class JobDialog extends AgentDialog<JobData> {
|
|||||||
this.model.pageLevel = this.getActualConditionValue(this.pagerCheckBox, this.pagerConditionDropdown);
|
this.model.pageLevel = this.getActualConditionValue(this.pagerCheckBox, this.pagerConditionDropdown);
|
||||||
this.model.eventLogLevel = this.getActualConditionValue(this.eventLogCheckBox, this.eventLogConditionDropdown);
|
this.model.eventLogLevel = this.getActualConditionValue(this.eventLogCheckBox, this.eventLogConditionDropdown);
|
||||||
this.model.deleteLevel = this.getActualConditionValue(this.deleteJobCheckBox, this.deleteJobConditionDropdown);
|
this.model.deleteLevel = this.getActualConditionValue(this.deleteJobCheckBox, this.deleteJobConditionDropdown);
|
||||||
|
if (!this.model.jobSteps) {
|
||||||
|
this.model.jobSteps = [];
|
||||||
|
}
|
||||||
|
this.model.jobSteps = this.steps;
|
||||||
|
if (!this.model.jobSchedules) {
|
||||||
|
this.model.jobSchedules = [];
|
||||||
|
}
|
||||||
|
this.model.jobSchedules = this.schedules;
|
||||||
|
if (!this.model.alerts) {
|
||||||
|
this.model.alerts = [];
|
||||||
|
}
|
||||||
|
this.model.alerts = this.alerts;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -118,9 +118,10 @@ export class JobStepDialog extends AgentDialog<JobStepData> {
|
|||||||
server: string,
|
server: string,
|
||||||
jobModel: JobData,
|
jobModel: JobData,
|
||||||
jobStepInfo?: sqlops.AgentJobStepInfo,
|
jobStepInfo?: sqlops.AgentJobStepInfo,
|
||||||
|
viaJobDialog: boolean = false
|
||||||
) {
|
) {
|
||||||
super(ownerUri,
|
super(ownerUri,
|
||||||
jobStepInfo ? JobStepData.convertToJobStepData(jobStepInfo, jobModel) : new JobStepData(ownerUri, jobModel),
|
jobStepInfo ? JobStepData.convertToJobStepData(jobStepInfo, jobModel) : new JobStepData(ownerUri, jobModel, viaJobDialog),
|
||||||
jobStepInfo ? JobStepDialog.EditDialogTitle : JobStepDialog.NewDialogTitle);
|
jobStepInfo ? JobStepDialog.EditDialogTitle : JobStepDialog.NewDialogTitle);
|
||||||
this.stepId = jobStepInfo ?
|
this.stepId = jobStepInfo ?
|
||||||
jobStepInfo.id : jobModel.jobSteps ?
|
jobStepInfo.id : jobModel.jobSteps ?
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ export class OperatorDialog extends AgentDialog<OperatorData> {
|
|||||||
private static readonly PagerSundayCheckBoxLabel: string = localize('createOperator.PagerSundayCheckBox', 'Sunday');
|
private static readonly PagerSundayCheckBoxLabel: string = localize('createOperator.PagerSundayCheckBox', 'Sunday');
|
||||||
private static readonly WorkdayBeginLabel: string = localize('createOperator.workdayBegin', 'Workday begin');
|
private static readonly WorkdayBeginLabel: string = localize('createOperator.workdayBegin', 'Workday begin');
|
||||||
private static readonly WorkdayEndLabel: string = localize('createOperator.workdayEnd', 'Workday end');
|
private static readonly WorkdayEndLabel: string = localize('createOperator.workdayEnd', 'Workday end');
|
||||||
private static readonly PagerDutyScheduleLabel: string = localize('createOperator.PagerDutySchedule', 'Pager on duty schdule');
|
private static readonly PagerDutyScheduleLabel: string = localize('createOperator.PagerDutySchedule', 'Pager on duty schedule');
|
||||||
|
|
||||||
// Notifications tab strings
|
// Notifications tab strings
|
||||||
private static readonly AlertsTableLabel: string = localize('createOperator.AlertListHeading', 'Alert list');
|
private static readonly AlertsTableLabel: string = localize('createOperator.AlertListHeading', 'Alert list');
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import { ProxyDialog } from './dialogs/proxyDialog';
|
|||||||
import { JobStepDialog } from './dialogs/jobStepDialog';
|
import { JobStepDialog } from './dialogs/jobStepDialog';
|
||||||
import { PickScheduleDialog } from './dialogs/pickScheduleDialog';
|
import { PickScheduleDialog } from './dialogs/pickScheduleDialog';
|
||||||
import { JobData } from './data/jobData';
|
import { JobData } from './data/jobData';
|
||||||
|
import { AgentUtils } from './agentUtils';
|
||||||
|
|
||||||
const localize = nls.loadMessageBundle();
|
const localize = nls.loadMessageBundle();
|
||||||
|
|
||||||
@@ -41,18 +42,24 @@ export class MainController {
|
|||||||
let dialog = new JobDialog(ownerUri, jobInfo);
|
let dialog = new JobDialog(ownerUri, jobInfo);
|
||||||
dialog.openDialog();
|
dialog.openDialog();
|
||||||
});
|
});
|
||||||
vscode.commands.registerCommand('agent.openNewStepDialog', (ownerUri: string, server: string, jobData: JobData, jobStepInfo: sqlops.AgentJobStepInfo) => {
|
vscode.commands.registerCommand('agent.openNewStepDialog', (ownerUri: string, server: string, jobInfo: sqlops.AgentJobInfo, jobStepInfo: sqlops.AgentJobStepInfo) => {
|
||||||
let dialog = new JobStepDialog(ownerUri, server, jobData, jobStepInfo);
|
AgentUtils.getAgentService().then((agentService) => {
|
||||||
|
let jobData: JobData = new JobData(ownerUri, jobInfo, agentService);
|
||||||
|
let dialog = new JobStepDialog(ownerUri, server, jobData, jobStepInfo, false);
|
||||||
dialog.openDialog();
|
dialog.openDialog();
|
||||||
});
|
});
|
||||||
|
});
|
||||||
vscode.commands.registerCommand('agent.openPickScheduleDialog', (ownerUri: string, jobName: string) => {
|
vscode.commands.registerCommand('agent.openPickScheduleDialog', (ownerUri: string, jobName: string) => {
|
||||||
let dialog = new PickScheduleDialog(ownerUri, jobName);
|
let dialog = new PickScheduleDialog(ownerUri, jobName);
|
||||||
dialog.showDialog();
|
dialog.showDialog();
|
||||||
});
|
});
|
||||||
vscode.commands.registerCommand('agent.openAlertDialog', (ownerUri: string, alertInfo: sqlops.AgentAlertInfo, jobs: string[]) => {
|
vscode.commands.registerCommand('agent.openAlertDialog', (ownerUri: string, jobInfo: sqlops.AgentJobInfo, alertInfo: sqlops.AgentAlertInfo) => {
|
||||||
let dialog = new AlertDialog(ownerUri, alertInfo, jobs);
|
AgentUtils.getAgentService().then((agentService) => {
|
||||||
|
let jobData: JobData = new JobData(ownerUri, jobInfo, agentService);
|
||||||
|
let dialog = new AlertDialog(ownerUri, jobData, alertInfo, false);
|
||||||
dialog.openDialog();
|
dialog.openDialog();
|
||||||
});
|
});
|
||||||
|
});
|
||||||
vscode.commands.registerCommand('agent.openOperatorDialog', (ownerUri: string, operatorInfo: sqlops.AgentOperatorInfo) => {
|
vscode.commands.registerCommand('agent.openOperatorDialog', (ownerUri: string, operatorInfo: sqlops.AgentOperatorInfo) => {
|
||||||
let dialog = new OperatorDialog(ownerUri, operatorInfo);
|
let dialog = new OperatorDialog(ownerUri, operatorInfo);
|
||||||
dialog.openDialog();
|
dialog.openDialog();
|
||||||
|
|||||||
@@ -147,7 +147,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"request": "2.63.0",
|
"request": "2.88.0",
|
||||||
"azure-arm-resource": "^7.0.0",
|
"azure-arm-resource": "^7.0.0",
|
||||||
"azure-arm-sql": "^5.0.1",
|
"azure-arm-sql": "^5.0.1",
|
||||||
"vscode-nls": "^4.0.0"
|
"vscode-nls": "^4.0.0"
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
"@types/node@^8.0.24":
|
"@types/node@^8.0.24":
|
||||||
version "8.10.36"
|
version "8.10.36"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.36.tgz#eac05d576fbcd0b4ea3c912dc58c20475c08d9e4"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.36.tgz#eac05d576fbcd0b4ea3c912dc58c20475c08d9e4"
|
||||||
|
integrity sha512-SL6KhfM7PTqiFmbCW3eVNwVBZ+88Mrzbuvn9olPsfv43mbiWaFY+nRcz/TGGku0/lc2FepdMbImdMY1JrQ+zbw==
|
||||||
|
|
||||||
"@types/node@^8.0.47":
|
"@types/node@^8.0.47":
|
||||||
version "8.10.30"
|
version "8.10.30"
|
||||||
@@ -41,18 +42,6 @@ ajv@^5.3.0:
|
|||||||
fast-json-stable-stringify "^2.0.0"
|
fast-json-stable-stringify "^2.0.0"
|
||||||
json-schema-traverse "^0.3.0"
|
json-schema-traverse "^0.3.0"
|
||||||
|
|
||||||
ansi-regex@^2.0.0:
|
|
||||||
version "2.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
|
|
||||||
|
|
||||||
ansi-styles@^2.2.1:
|
|
||||||
version "2.2.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
|
|
||||||
|
|
||||||
asn1@0.1.11:
|
|
||||||
version "0.1.11"
|
|
||||||
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7"
|
|
||||||
|
|
||||||
asn1@~0.2.3:
|
asn1@~0.2.3:
|
||||||
version "0.2.4"
|
version "0.2.4"
|
||||||
resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
|
resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
|
||||||
@@ -65,10 +54,6 @@ assert-plus@1.0.0, assert-plus@^1.0.0:
|
|||||||
resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
|
resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
|
||||||
integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
|
integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
|
||||||
|
|
||||||
assert-plus@^0.1.5:
|
|
||||||
version "0.1.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160"
|
|
||||||
|
|
||||||
async@2.6.0:
|
async@2.6.0:
|
||||||
version "2.6.0"
|
version "2.6.0"
|
||||||
resolved "https://registry.npmjs.org/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4"
|
resolved "https://registry.npmjs.org/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4"
|
||||||
@@ -76,9 +61,10 @@ async@2.6.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
lodash "^4.14.0"
|
lodash "^4.14.0"
|
||||||
|
|
||||||
async@>=0.6.0, async@^2.0.1:
|
async@>=0.6.0:
|
||||||
version "2.6.1"
|
version "2.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610"
|
resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610"
|
||||||
|
integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
lodash "^4.17.10"
|
lodash "^4.17.10"
|
||||||
|
|
||||||
@@ -87,10 +73,6 @@ asynckit@^0.4.0:
|
|||||||
resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
||||||
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
|
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
|
||||||
|
|
||||||
aws-sign2@~0.5.0:
|
|
||||||
version "0.5.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63"
|
|
||||||
|
|
||||||
aws-sign2@~0.7.0:
|
aws-sign2@~0.7.0:
|
||||||
version "0.7.0"
|
version "0.7.0"
|
||||||
resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
|
resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
|
||||||
@@ -129,22 +111,6 @@ bcrypt-pbkdf@^1.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
tweetnacl "^0.14.3"
|
tweetnacl "^0.14.3"
|
||||||
|
|
||||||
bl@~1.0.0:
|
|
||||||
version "1.0.3"
|
|
||||||
resolved "http://registry.npmjs.org/bl/-/bl-1.0.3.tgz#fc5421a28fd4226036c3b3891a66a25bc64d226e"
|
|
||||||
dependencies:
|
|
||||||
readable-stream "~2.0.5"
|
|
||||||
|
|
||||||
bluebird@^2.9.30:
|
|
||||||
version "2.11.0"
|
|
||||||
resolved "http://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
|
|
||||||
|
|
||||||
boom@2.x.x:
|
|
||||||
version "2.10.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
|
|
||||||
dependencies:
|
|
||||||
hoek "2.x.x"
|
|
||||||
|
|
||||||
brace-expansion@^1.1.7:
|
brace-expansion@^1.1.7:
|
||||||
version "1.1.11"
|
version "1.1.11"
|
||||||
resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||||
@@ -163,25 +129,11 @@ buffer-equal-constant-time@1.0.1:
|
|||||||
resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
|
resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
|
||||||
integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
|
integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
|
||||||
|
|
||||||
caseless@~0.11.0:
|
|
||||||
version "0.11.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
|
|
||||||
|
|
||||||
caseless@~0.12.0:
|
caseless@~0.12.0:
|
||||||
version "0.12.0"
|
version "0.12.0"
|
||||||
resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
|
resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
|
||||||
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
|
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
|
||||||
|
|
||||||
chalk@^1.0.0:
|
|
||||||
version "1.1.3"
|
|
||||||
resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
|
|
||||||
dependencies:
|
|
||||||
ansi-styles "^2.2.1"
|
|
||||||
escape-string-regexp "^1.0.2"
|
|
||||||
has-ansi "^2.0.0"
|
|
||||||
strip-ansi "^3.0.0"
|
|
||||||
supports-color "^2.0.0"
|
|
||||||
|
|
||||||
circular-json@^0.3.1:
|
circular-json@^0.3.1:
|
||||||
version "0.3.3"
|
version "0.3.3"
|
||||||
resolved "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
|
resolved "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
|
||||||
@@ -199,9 +151,10 @@ combined-stream@1.0.6:
|
|||||||
dependencies:
|
dependencies:
|
||||||
delayed-stream "~1.0.0"
|
delayed-stream "~1.0.0"
|
||||||
|
|
||||||
combined-stream@^1.0.5, combined-stream@~1.0.1, combined-stream@~1.0.6:
|
combined-stream@~1.0.6:
|
||||||
version "1.0.7"
|
version "1.0.7"
|
||||||
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
|
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
|
||||||
|
integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==
|
||||||
dependencies:
|
dependencies:
|
||||||
delayed-stream "~1.0.0"
|
delayed-stream "~1.0.0"
|
||||||
|
|
||||||
@@ -210,28 +163,15 @@ commander@2.15.1:
|
|||||||
resolved "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
|
resolved "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
|
||||||
integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==
|
integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==
|
||||||
|
|
||||||
commander@^2.8.1:
|
|
||||||
version "2.19.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
|
|
||||||
|
|
||||||
concat-map@0.0.1:
|
concat-map@0.0.1:
|
||||||
version "0.0.1"
|
version "0.0.1"
|
||||||
resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||||
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
||||||
|
|
||||||
core-util-is@1.0.2, core-util-is@~1.0.0:
|
core-util-is@1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||||
|
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
||||||
cryptiles@2.x.x:
|
|
||||||
version "2.0.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
|
|
||||||
dependencies:
|
|
||||||
boom "2.x.x"
|
|
||||||
|
|
||||||
ctype@0.5.3:
|
|
||||||
version "0.5.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f"
|
|
||||||
|
|
||||||
dashdash@^1.12.0:
|
dashdash@^1.12.0:
|
||||||
version "1.14.1"
|
version "1.14.1"
|
||||||
@@ -282,13 +222,15 @@ ecdsa-sig-formatter@1.0.10:
|
|||||||
dependencies:
|
dependencies:
|
||||||
safe-buffer "^5.0.1"
|
safe-buffer "^5.0.1"
|
||||||
|
|
||||||
escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2:
|
escape-string-regexp@1.0.5:
|
||||||
version "1.0.5"
|
version "1.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||||
|
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
||||||
|
|
||||||
extend@~3.0.0, extend@~3.0.2:
|
extend@~3.0.2:
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
|
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
|
||||||
|
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
|
||||||
|
|
||||||
extsprintf@1.3.0:
|
extsprintf@1.3.0:
|
||||||
version "1.3.0"
|
version "1.3.0"
|
||||||
@@ -310,17 +252,10 @@ fast-json-stable-stringify@^2.0.0:
|
|||||||
resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
|
resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
|
||||||
integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
|
integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
|
||||||
|
|
||||||
forever-agent@~0.6.0, forever-agent@~0.6.1:
|
forever-agent@~0.6.1:
|
||||||
version "0.6.1"
|
version "0.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
|
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
|
||||||
|
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
|
||||||
form-data@~1.0.0-rc1:
|
|
||||||
version "1.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c"
|
|
||||||
dependencies:
|
|
||||||
async "^2.0.1"
|
|
||||||
combined-stream "^1.0.5"
|
|
||||||
mime-types "^2.1.11"
|
|
||||||
|
|
||||||
form-data@~2.3.2:
|
form-data@~2.3.2:
|
||||||
version "2.3.2"
|
version "2.3.2"
|
||||||
@@ -336,18 +271,6 @@ fs.realpath@^1.0.0:
|
|||||||
resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||||
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
|
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
|
||||||
|
|
||||||
generate-function@^2.0.0:
|
|
||||||
version "2.3.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f"
|
|
||||||
dependencies:
|
|
||||||
is-property "^1.0.2"
|
|
||||||
|
|
||||||
generate-object-property@^1.1.0:
|
|
||||||
version "1.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
|
|
||||||
dependencies:
|
|
||||||
is-property "^1.0.0"
|
|
||||||
|
|
||||||
getpass@^0.1.1:
|
getpass@^0.1.1:
|
||||||
version "0.1.7"
|
version "0.1.7"
|
||||||
resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
|
resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
|
||||||
@@ -377,15 +300,6 @@ har-schema@^2.0.0:
|
|||||||
resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
|
resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
|
||||||
integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
|
integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
|
||||||
|
|
||||||
har-validator@^1.6.1:
|
|
||||||
version "1.8.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-1.8.0.tgz#d83842b0eb4c435960aeb108a067a3aa94c0eeb2"
|
|
||||||
dependencies:
|
|
||||||
bluebird "^2.9.30"
|
|
||||||
chalk "^1.0.0"
|
|
||||||
commander "^2.8.1"
|
|
||||||
is-my-json-valid "^2.12.0"
|
|
||||||
|
|
||||||
har-validator@~5.1.0:
|
har-validator@~5.1.0:
|
||||||
version "5.1.0"
|
version "5.1.0"
|
||||||
resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29"
|
resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29"
|
||||||
@@ -394,43 +308,16 @@ har-validator@~5.1.0:
|
|||||||
ajv "^5.3.0"
|
ajv "^5.3.0"
|
||||||
har-schema "^2.0.0"
|
har-schema "^2.0.0"
|
||||||
|
|
||||||
has-ansi@^2.0.0:
|
|
||||||
version "2.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
|
|
||||||
dependencies:
|
|
||||||
ansi-regex "^2.0.0"
|
|
||||||
|
|
||||||
has-flag@^3.0.0:
|
has-flag@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
||||||
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
|
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
|
||||||
|
|
||||||
hawk@~3.1.0:
|
|
||||||
version "3.1.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
|
|
||||||
dependencies:
|
|
||||||
boom "2.x.x"
|
|
||||||
cryptiles "2.x.x"
|
|
||||||
hoek "2.x.x"
|
|
||||||
sntp "1.x.x"
|
|
||||||
|
|
||||||
he@1.1.1:
|
he@1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.npmjs.org/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
|
resolved "https://registry.npmjs.org/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
|
||||||
integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
|
integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
|
||||||
|
|
||||||
hoek@2.x.x:
|
|
||||||
version "2.16.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
|
|
||||||
|
|
||||||
http-signature@~0.11.0:
|
|
||||||
version "0.11.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.11.0.tgz#1796cf67a001ad5cd6849dca0991485f09089fe6"
|
|
||||||
dependencies:
|
|
||||||
asn1 "0.1.11"
|
|
||||||
assert-plus "^0.1.5"
|
|
||||||
ctype "0.5.3"
|
|
||||||
|
|
||||||
http-signature@~1.2.0:
|
http-signature@~1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
|
resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
|
||||||
@@ -448,33 +335,16 @@ inflight@^1.0.4:
|
|||||||
once "^1.3.0"
|
once "^1.3.0"
|
||||||
wrappy "1"
|
wrappy "1"
|
||||||
|
|
||||||
inherits@2, inherits@~2.0.1:
|
inherits@2:
|
||||||
version "2.0.3"
|
version "2.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
||||||
|
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
|
||||||
|
|
||||||
is-buffer@^1.1.6:
|
is-buffer@^1.1.6:
|
||||||
version "1.1.6"
|
version "1.1.6"
|
||||||
resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
|
resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
|
||||||
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
|
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
|
||||||
|
|
||||||
is-my-ip-valid@^1.0.0:
|
|
||||||
version "1.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824"
|
|
||||||
|
|
||||||
is-my-json-valid@^2.12.0:
|
|
||||||
version "2.19.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.19.0.tgz#8fd6e40363cd06b963fa877d444bfb5eddc62175"
|
|
||||||
dependencies:
|
|
||||||
generate-function "^2.0.0"
|
|
||||||
generate-object-property "^1.1.0"
|
|
||||||
is-my-ip-valid "^1.0.0"
|
|
||||||
jsonpointer "^4.0.0"
|
|
||||||
xtend "^4.0.0"
|
|
||||||
|
|
||||||
is-property@^1.0.0, is-property@^1.0.2:
|
|
||||||
version "1.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
|
|
||||||
|
|
||||||
is-stream@^1.1.0:
|
is-stream@^1.1.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||||
@@ -485,13 +355,10 @@ is-typedarray@~1.0.0:
|
|||||||
resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
||||||
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
|
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
|
||||||
|
|
||||||
isarray@~1.0.0:
|
isstream@~0.1.2:
|
||||||
version "1.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
|
||||||
|
|
||||||
isstream@~0.1.1, isstream@~0.1.2:
|
|
||||||
version "0.1.2"
|
version "0.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
||||||
|
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
|
||||||
|
|
||||||
jsbn@~0.1.0:
|
jsbn@~0.1.0:
|
||||||
version "0.1.1"
|
version "0.1.1"
|
||||||
@@ -508,13 +375,10 @@ json-schema@0.2.3:
|
|||||||
resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
|
resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
|
||||||
integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
|
integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
|
||||||
|
|
||||||
json-stringify-safe@~5.0.0, json-stringify-safe@~5.0.1:
|
json-stringify-safe@~5.0.1:
|
||||||
version "5.0.1"
|
version "5.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
|
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
|
||||||
|
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
|
||||||
jsonpointer@^4.0.0:
|
|
||||||
version "4.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
|
|
||||||
|
|
||||||
jsprim@^1.2.2:
|
jsprim@^1.2.2:
|
||||||
version "1.4.1"
|
version "1.4.1"
|
||||||
@@ -553,9 +417,10 @@ mime-db@~1.36.0:
|
|||||||
resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397"
|
resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397"
|
||||||
integrity sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==
|
integrity sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==
|
||||||
|
|
||||||
mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.2:
|
mime-types@^2.1.12, mime-types@~2.1.19:
|
||||||
version "2.1.20"
|
version "2.1.20"
|
||||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19"
|
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19"
|
||||||
|
integrity sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==
|
||||||
dependencies:
|
dependencies:
|
||||||
mime-db "~1.36.0"
|
mime-db "~1.36.0"
|
||||||
|
|
||||||
@@ -631,14 +496,6 @@ ms@2.0.0:
|
|||||||
resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||||
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
|
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
|
||||||
|
|
||||||
node-uuid@~1.4.0:
|
|
||||||
version "1.4.8"
|
|
||||||
resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907"
|
|
||||||
|
|
||||||
oauth-sign@~0.8.0:
|
|
||||||
version "0.8.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
|
|
||||||
|
|
||||||
oauth-sign@~0.9.0:
|
oauth-sign@~0.9.0:
|
||||||
version "0.9.0"
|
version "0.9.0"
|
||||||
resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
|
resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
|
||||||
@@ -666,10 +523,6 @@ postinstall-build@^5.0.1:
|
|||||||
resolved "https://registry.npmjs.org/postinstall-build/-/postinstall-build-5.0.3.tgz#238692f712a481d8f5bc8960e94786036241efc7"
|
resolved "https://registry.npmjs.org/postinstall-build/-/postinstall-build-5.0.3.tgz#238692f712a481d8f5bc8960e94786036241efc7"
|
||||||
integrity sha512-vPvPe8TKgp4FLgY3+DfxCE5PIfoXBK2lyLfNCxsRbDsV6vS4oU5RG/IWxrblMn6heagbnMED3MemUQllQ2bQUg==
|
integrity sha512-vPvPe8TKgp4FLgY3+DfxCE5PIfoXBK2lyLfNCxsRbDsV6vS4oU5RG/IWxrblMn6heagbnMED3MemUQllQ2bQUg==
|
||||||
|
|
||||||
process-nextick-args@~1.0.6:
|
|
||||||
version "1.0.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
|
|
||||||
|
|
||||||
psl@^1.1.24:
|
psl@^1.1.24:
|
||||||
version "1.1.29"
|
version "1.1.29"
|
||||||
resolved "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67"
|
resolved "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67"
|
||||||
@@ -680,53 +533,14 @@ punycode@^1.4.1:
|
|||||||
resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
|
resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
|
||||||
integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
|
integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
|
||||||
|
|
||||||
qs@~5.1.0:
|
|
||||||
version "5.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/qs/-/qs-5.1.0.tgz#4d932e5c7ea411cca76a312d39a606200fd50cd9"
|
|
||||||
|
|
||||||
qs@~6.5.2:
|
qs@~6.5.2:
|
||||||
version "6.5.2"
|
version "6.5.2"
|
||||||
resolved "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
|
resolved "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
|
||||||
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
|
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
|
||||||
|
|
||||||
readable-stream@~2.0.5:
|
request@2.88.0, "request@>= 2.52.0", request@^2.88.0:
|
||||||
version "2.0.6"
|
|
||||||
resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
|
|
||||||
dependencies:
|
|
||||||
core-util-is "~1.0.0"
|
|
||||||
inherits "~2.0.1"
|
|
||||||
isarray "~1.0.0"
|
|
||||||
process-nextick-args "~1.0.6"
|
|
||||||
string_decoder "~0.10.x"
|
|
||||||
util-deprecate "~1.0.1"
|
|
||||||
|
|
||||||
request@2.63.0:
|
|
||||||
version "2.63.0"
|
|
||||||
resolved "http://registry.npmjs.org/request/-/request-2.63.0.tgz#c83e7c3485e5d9bf9b146318429bc48f1253d8be"
|
|
||||||
dependencies:
|
|
||||||
aws-sign2 "~0.5.0"
|
|
||||||
bl "~1.0.0"
|
|
||||||
caseless "~0.11.0"
|
|
||||||
combined-stream "~1.0.1"
|
|
||||||
extend "~3.0.0"
|
|
||||||
forever-agent "~0.6.0"
|
|
||||||
form-data "~1.0.0-rc1"
|
|
||||||
har-validator "^1.6.1"
|
|
||||||
hawk "~3.1.0"
|
|
||||||
http-signature "~0.11.0"
|
|
||||||
isstream "~0.1.1"
|
|
||||||
json-stringify-safe "~5.0.0"
|
|
||||||
mime-types "~2.1.2"
|
|
||||||
node-uuid "~1.4.0"
|
|
||||||
oauth-sign "~0.8.0"
|
|
||||||
qs "~5.1.0"
|
|
||||||
stringstream "~0.0.4"
|
|
||||||
tough-cookie ">=0.12.0"
|
|
||||||
tunnel-agent "~0.4.0"
|
|
||||||
|
|
||||||
"request@>= 2.52.0", request@^2.88.0:
|
|
||||||
version "2.88.0"
|
version "2.88.0"
|
||||||
resolved "https://registry.npmjs.org/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
|
resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
|
||||||
integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
|
integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
|
||||||
dependencies:
|
dependencies:
|
||||||
aws-sign2 "~0.7.0"
|
aws-sign2 "~0.7.0"
|
||||||
@@ -804,12 +618,6 @@ should@^13.2.1:
|
|||||||
should-type-adaptors "^1.0.1"
|
should-type-adaptors "^1.0.1"
|
||||||
should-util "^1.0.0"
|
should-util "^1.0.0"
|
||||||
|
|
||||||
sntp@1.x.x:
|
|
||||||
version "1.0.9"
|
|
||||||
resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
|
|
||||||
dependencies:
|
|
||||||
hoek "2.x.x"
|
|
||||||
|
|
||||||
sshpk@^1.7.0:
|
sshpk@^1.7.0:
|
||||||
version "1.14.2"
|
version "1.14.2"
|
||||||
resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98"
|
resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98"
|
||||||
@@ -826,20 +634,6 @@ sshpk@^1.7.0:
|
|||||||
jsbn "~0.1.0"
|
jsbn "~0.1.0"
|
||||||
tweetnacl "~0.14.0"
|
tweetnacl "~0.14.0"
|
||||||
|
|
||||||
string_decoder@~0.10.x:
|
|
||||||
version "0.10.31"
|
|
||||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
|
|
||||||
|
|
||||||
stringstream@~0.0.4:
|
|
||||||
version "0.0.6"
|
|
||||||
resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72"
|
|
||||||
|
|
||||||
strip-ansi@^3.0.0:
|
|
||||||
version "3.0.1"
|
|
||||||
resolved "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
|
|
||||||
dependencies:
|
|
||||||
ansi-regex "^2.0.0"
|
|
||||||
|
|
||||||
supports-color@5.4.0:
|
supports-color@5.4.0:
|
||||||
version "5.4.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
|
resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
|
||||||
@@ -847,18 +641,15 @@ supports-color@5.4.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
has-flag "^3.0.0"
|
has-flag "^3.0.0"
|
||||||
|
|
||||||
supports-color@^2.0.0:
|
|
||||||
version "2.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
|
|
||||||
|
|
||||||
through@^2.3.8:
|
through@^2.3.8:
|
||||||
version "2.3.8"
|
version "2.3.8"
|
||||||
resolved "http://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
resolved "http://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||||
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
|
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
|
||||||
|
|
||||||
tough-cookie@>=0.12.0, tough-cookie@~2.4.3:
|
tough-cookie@~2.4.3:
|
||||||
version "2.4.3"
|
version "2.4.3"
|
||||||
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
|
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
|
||||||
|
integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
psl "^1.1.24"
|
psl "^1.1.24"
|
||||||
punycode "^1.4.1"
|
punycode "^1.4.1"
|
||||||
@@ -870,10 +661,6 @@ tunnel-agent@^0.6.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
safe-buffer "^5.0.1"
|
safe-buffer "^5.0.1"
|
||||||
|
|
||||||
tunnel-agent@~0.4.0:
|
|
||||||
version "0.4.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
|
|
||||||
|
|
||||||
tunnel@0.0.5:
|
tunnel@0.0.5:
|
||||||
version "0.0.5"
|
version "0.0.5"
|
||||||
resolved "https://registry.npmjs.org/tunnel/-/tunnel-0.0.5.tgz#d1532254749ed36620fcd1010865495a1fa9d0ae"
|
resolved "https://registry.npmjs.org/tunnel/-/tunnel-0.0.5.tgz#d1532254749ed36620fcd1010865495a1fa9d0ae"
|
||||||
@@ -898,10 +685,6 @@ typemoq@^2.1.0:
|
|||||||
resolved "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961"
|
resolved "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961"
|
||||||
integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==
|
integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==
|
||||||
|
|
||||||
util-deprecate@~1.0.1:
|
|
||||||
version "1.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
|
||||||
|
|
||||||
uuid@^3.1.0, uuid@^3.2.1, uuid@^3.3.2:
|
uuid@^3.1.0, uuid@^3.2.1, uuid@^3.3.2:
|
||||||
version "3.3.2"
|
version "3.3.2"
|
||||||
resolved "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
|
resolved "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
|
||||||
@@ -934,7 +717,3 @@ wrappy@1:
|
|||||||
xpath.js@~1.1.0:
|
xpath.js@~1.1.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz#3816a44ed4bb352091083d002a383dd5104a5ff1"
|
resolved "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz#3816a44ed4bb352091083d002a383dd5104a5ff1"
|
||||||
|
|
||||||
xtend@^4.0.0:
|
|
||||||
version "4.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "import",
|
"name": "import",
|
||||||
"displayName": "SQL Server Import",
|
"displayName": "SQL Server Import",
|
||||||
"description": "SQL Server Import for Azure Data Studio supports importing CSV or JSON files into SQL Server.",
|
"description": "SQL Server Import for Azure Data Studio supports importing CSV or JSON files into SQL Server.",
|
||||||
"version": "0.3.0",
|
"version": "0.4.0",
|
||||||
"publisher": "Microsoft",
|
"publisher": "Microsoft",
|
||||||
"preview": true,
|
"preview": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -42,33 +42,6 @@
|
|||||||
"mac": "ctrl+i"
|
"mac": "ctrl+i"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"dashboard.tabs": [
|
|
||||||
{
|
|
||||||
"id": "flat-file-import",
|
|
||||||
"title": "Flat File Import",
|
|
||||||
"description": "The flat file importer.",
|
|
||||||
"container": {
|
|
||||||
"flat-file-import-container": {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"dashboard.containers": [
|
|
||||||
{
|
|
||||||
"id": "flat-file-import-container",
|
|
||||||
"container": {
|
|
||||||
"widgets-container": [
|
|
||||||
{
|
|
||||||
"name": "Tasks",
|
|
||||||
"widget": {
|
|
||||||
"tasks-widget": [
|
|
||||||
"flatFileImport.start"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"menus": {
|
"menus": {
|
||||||
"objectExplorer/item/context": [
|
"objectExplorer/item/context": [
|
||||||
{
|
{
|
||||||
@@ -80,7 +53,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#0.2.7",
|
"dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#0.2.10",
|
||||||
"opener": "^1.4.3",
|
"opener": "^1.4.3",
|
||||||
"service-downloader": "github:anthonydresser/service-downloader#0.1.5",
|
"service-downloader": "github:anthonydresser/service-downloader#0.1.5",
|
||||||
"vscode-extension-telemetry": "0.0.18",
|
"vscode-extension-telemetry": "0.0.18",
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ export class FlatFileWizard {
|
|||||||
public async start(p: any, ...args: any[]) {
|
public async start(p: any, ...args: any[]) {
|
||||||
let model = <ImportDataModel>{};
|
let model = <ImportDataModel>{};
|
||||||
|
|
||||||
let profile = <sqlops.IConnectionProfile>p.connectionProfile;
|
let profile = p ? <sqlops.IConnectionProfile>p.connectionProfile : null;
|
||||||
if (profile) {
|
if (profile) {
|
||||||
model.serverId = profile.id;
|
model.serverId = profile.id;
|
||||||
model.database = profile.databaseName;
|
model.database = profile.databaseName;
|
||||||
|
|||||||
@@ -11,7 +11,8 @@ agent-base@4, agent-base@^4.1.0:
|
|||||||
|
|
||||||
applicationinsights@1.0.1:
|
applicationinsights@1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.npmjs.org/applicationinsights/-/applicationinsights-1.0.1.tgz#53446b830fe8d5d619eee2a278b31d3d25030927"
|
resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-1.0.1.tgz#53446b830fe8d5d619eee2a278b31d3d25030927"
|
||||||
|
integrity sha1-U0Rrgw/o1dYZ7uKieLMdPSUDCSc=
|
||||||
dependencies:
|
dependencies:
|
||||||
diagnostic-channel "0.2.0"
|
diagnostic-channel "0.2.0"
|
||||||
diagnostic-channel-publishers "0.2.1"
|
diagnostic-channel-publishers "0.2.1"
|
||||||
@@ -35,7 +36,7 @@ buffer-alloc-unsafe@^1.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
|
resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
|
||||||
integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
|
integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
|
||||||
|
|
||||||
buffer-alloc@^1.1.0:
|
buffer-alloc@^1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
|
resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
|
||||||
integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
|
integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
|
||||||
@@ -74,19 +75,26 @@ core-util-is@~1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||||
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
||||||
|
|
||||||
"dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#0.2.7":
|
"dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#0.2.10":
|
||||||
version "0.2.6"
|
version "0.2.10"
|
||||||
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/85653d8b305af8aef334728d71f07bdc240dfcb7"
|
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/4de3f7caf0eba54159911b977ddb4f5d7c0a9ca8"
|
||||||
dependencies:
|
dependencies:
|
||||||
vscode-languageclient "3.5.1"
|
vscode-languageclient "3.5.1"
|
||||||
|
|
||||||
debug@3.1.0, debug@^3.1.0:
|
debug@3.1.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
|
||||||
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
|
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
|
||||||
dependencies:
|
dependencies:
|
||||||
ms "2.0.0"
|
ms "2.0.0"
|
||||||
|
|
||||||
|
debug@^3.1.0:
|
||||||
|
version "3.2.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
|
||||||
|
integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
|
||||||
|
dependencies:
|
||||||
|
ms "^2.1.1"
|
||||||
|
|
||||||
decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1:
|
decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1:
|
||||||
version "4.1.1"
|
version "4.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1"
|
resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1"
|
||||||
@@ -142,11 +150,13 @@ decompress@^4.2.0:
|
|||||||
|
|
||||||
diagnostic-channel-publishers@0.2.1:
|
diagnostic-channel-publishers@0.2.1:
|
||||||
version "0.2.1"
|
version "0.2.1"
|
||||||
resolved "https://registry.npmjs.org/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.2.1.tgz#8e2d607a8b6d79fe880b548bc58cc6beb288c4f3"
|
resolved "https://registry.yarnpkg.com/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.2.1.tgz#8e2d607a8b6d79fe880b548bc58cc6beb288c4f3"
|
||||||
|
integrity sha1-ji1geottef6IC1SLxYzGvrKIxPM=
|
||||||
|
|
||||||
diagnostic-channel@0.2.0:
|
diagnostic-channel@0.2.0:
|
||||||
version "0.2.0"
|
version "0.2.0"
|
||||||
resolved "https://registry.npmjs.org/diagnostic-channel/-/diagnostic-channel-0.2.0.tgz#cc99af9612c23fb1fff13612c72f2cbfaa8d5a17"
|
resolved "https://registry.yarnpkg.com/diagnostic-channel/-/diagnostic-channel-0.2.0.tgz#cc99af9612c23fb1fff13612c72f2cbfaa8d5a17"
|
||||||
|
integrity sha1-zJmvlhLCP7H/8TYSxy8sv6qNWhc=
|
||||||
dependencies:
|
dependencies:
|
||||||
semver "^5.3.0"
|
semver "^5.3.0"
|
||||||
|
|
||||||
@@ -158,9 +168,9 @@ end-of-stream@^1.0.0:
|
|||||||
once "^1.4.0"
|
once "^1.4.0"
|
||||||
|
|
||||||
es6-promise@^4.0.3:
|
es6-promise@^4.0.3:
|
||||||
version "4.2.4"
|
version "4.2.5"
|
||||||
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29"
|
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054"
|
||||||
integrity sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==
|
integrity sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==
|
||||||
|
|
||||||
es6-promisify@^5.0.0:
|
es6-promisify@^5.0.0:
|
||||||
version "5.0.0"
|
version "5.0.0"
|
||||||
@@ -210,9 +220,9 @@ get-stream@^2.2.0:
|
|||||||
pinkie-promise "^2.0.0"
|
pinkie-promise "^2.0.0"
|
||||||
|
|
||||||
graceful-fs@^4.1.10:
|
graceful-fs@^4.1.10:
|
||||||
version "4.1.11"
|
version "4.1.15"
|
||||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
|
||||||
integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
|
integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
|
||||||
|
|
||||||
"graceful-readlink@>= 1.0.0":
|
"graceful-readlink@>= 1.0.0":
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
@@ -284,6 +294,11 @@ ms@2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||||
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
|
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
|
||||||
|
|
||||||
|
ms@^2.1.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
|
||||||
|
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
|
||||||
|
|
||||||
object-assign@^4.0.1:
|
object-assign@^4.0.1:
|
||||||
version "4.1.1"
|
version "4.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||||
@@ -297,9 +312,9 @@ once@^1.4.0:
|
|||||||
wrappy "1"
|
wrappy "1"
|
||||||
|
|
||||||
opener@^1.4.3:
|
opener@^1.4.3:
|
||||||
version "1.4.3"
|
version "1.5.1"
|
||||||
resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8"
|
resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"
|
||||||
integrity sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=
|
integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==
|
||||||
|
|
||||||
os-tmpdir@~1.0.2:
|
os-tmpdir@~1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
@@ -365,7 +380,8 @@ seek-bzip@^1.0.5:
|
|||||||
|
|
||||||
semver@^5.3.0:
|
semver@^5.3.0:
|
||||||
version "5.6.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
|
||||||
|
integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
|
||||||
|
|
||||||
"service-downloader@github:anthonydresser/service-downloader#0.1.5":
|
"service-downloader@github:anthonydresser/service-downloader#0.1.5":
|
||||||
version "0.1.5"
|
version "0.1.5"
|
||||||
@@ -393,16 +409,16 @@ strip-dirs@^2.0.0:
|
|||||||
is-natural-number "^4.0.1"
|
is-natural-number "^4.0.1"
|
||||||
|
|
||||||
tar-stream@^1.5.2:
|
tar-stream@^1.5.2:
|
||||||
version "1.6.1"
|
version "1.6.2"
|
||||||
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.1.tgz#f84ef1696269d6223ca48f6e1eeede3f7e81f395"
|
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555"
|
||||||
integrity sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==
|
integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==
|
||||||
dependencies:
|
dependencies:
|
||||||
bl "^1.0.0"
|
bl "^1.0.0"
|
||||||
buffer-alloc "^1.1.0"
|
buffer-alloc "^1.2.0"
|
||||||
end-of-stream "^1.0.0"
|
end-of-stream "^1.0.0"
|
||||||
fs-constants "^1.0.0"
|
fs-constants "^1.0.0"
|
||||||
readable-stream "^2.3.0"
|
readable-stream "^2.3.0"
|
||||||
to-buffer "^1.1.0"
|
to-buffer "^1.1.1"
|
||||||
xtend "^4.0.0"
|
xtend "^4.0.0"
|
||||||
|
|
||||||
through@^2.3.6:
|
through@^2.3.6:
|
||||||
@@ -417,15 +433,15 @@ tmp@^0.0.33:
|
|||||||
dependencies:
|
dependencies:
|
||||||
os-tmpdir "~1.0.2"
|
os-tmpdir "~1.0.2"
|
||||||
|
|
||||||
to-buffer@^1.1.0:
|
to-buffer@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
|
resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
|
||||||
integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
|
integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
|
||||||
|
|
||||||
unbzip2-stream@^1.0.9:
|
unbzip2-stream@^1.0.9:
|
||||||
version "1.2.5"
|
version "1.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz#73a033a567bbbde59654b193c44d48a7e4f43c47"
|
resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.3.1.tgz#7854da51622a7e63624221196357803b552966a1"
|
||||||
integrity sha512-izD3jxT8xkzwtXRUZjtmRwKnZoeECrfZ8ra/ketwOcusbZEp4mjULMnJOCfTDZBgGQAAY1AJ/IgxcwkavcX9Og==
|
integrity sha512-fIZnvdjblYs7Cru/xC6tCPVhz7JkYcVQQkePwMLyQELzYTds2Xn8QefPVnvdVhhZqubxNA1cASXEH5wcK0Bucw==
|
||||||
dependencies:
|
dependencies:
|
||||||
buffer "^3.0.1"
|
buffer "^3.0.1"
|
||||||
through "^2.3.6"
|
through "^2.3.6"
|
||||||
@@ -437,7 +453,8 @@ util-deprecate@~1.0.1:
|
|||||||
|
|
||||||
vscode-extension-telemetry@0.0.18:
|
vscode-extension-telemetry@0.0.18:
|
||||||
version "0.0.18"
|
version "0.0.18"
|
||||||
resolved "https://registry.npmjs.org/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.18.tgz#602ba20d8c71453aa34533a291e7638f6e5c0327"
|
resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.18.tgz#602ba20d8c71453aa34533a291e7638f6e5c0327"
|
||||||
|
integrity sha512-Vw3Sr+dZwl+c6PlsUwrTtCOJkgrmvS3OUVDQGcmpXWAgq9xGq6as0K4pUx+aGqTjzLAESmWSrs6HlJm6J6Khcg==
|
||||||
dependencies:
|
dependencies:
|
||||||
applicationinsights "1.0.1"
|
applicationinsights "1.0.1"
|
||||||
|
|
||||||
@@ -467,9 +484,9 @@ vscode-languageserver-types@3.5.0:
|
|||||||
integrity sha1-5I15li8LjgLelV4/UkkI4rGcA3Q=
|
integrity sha1-5I15li8LjgLelV4/UkkI4rGcA3Q=
|
||||||
|
|
||||||
vscode-nls@^3.2.1:
|
vscode-nls@^3.2.1:
|
||||||
version "3.2.4"
|
version "3.2.5"
|
||||||
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.4.tgz#2166b4183c8aea884d20727f5449e62be69fd398"
|
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.5.tgz#25520c1955108036dec607c85e00a522f247f1a4"
|
||||||
integrity sha512-FTjdqa4jDDoBjJqr36O8lmmZf/55kQ2w4ZY/+GL6K92fq765BqO3aYw21atnXUno/P04V5DWagNl4ybDIndJsw==
|
integrity sha512-ITtoh3V4AkWXMmp3TB97vsMaHRgHhsSFPsUdzlueSL+dRZbSNTZeOmdQv60kjCV306ghPxhDeoNUEm3+EZMuyw==
|
||||||
|
|
||||||
wrappy@1:
|
wrappy@1:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
@@ -491,4 +508,5 @@ yauzl@^2.4.2:
|
|||||||
|
|
||||||
zone.js@0.7.6:
|
zone.js@0.7.6:
|
||||||
version "0.7.6"
|
version "0.7.6"
|
||||||
resolved "https://registry.npmjs.org/zone.js/-/zone.js-0.7.6.tgz#fbbc39d3e0261d0986f1ba06306eb3aeb0d22009"
|
resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.7.6.tgz#fbbc39d3e0261d0986f1ba06306eb3aeb0d22009"
|
||||||
|
integrity sha1-+7w50+AmHQmG8boGMG6zrrDSIAk=
|
||||||
|
|||||||
@@ -23,7 +23,8 @@
|
|||||||
"onCommand:markdown.showLockedPreviewToSide",
|
"onCommand:markdown.showLockedPreviewToSide",
|
||||||
"onCommand:markdown.showSource",
|
"onCommand:markdown.showSource",
|
||||||
"onCommand:markdown.showPreviewSecuritySelector",
|
"onCommand:markdown.showPreviewSecuritySelector",
|
||||||
"onWebviewPanel:markdown.preview"
|
"onWebviewPanel:markdown.preview",
|
||||||
|
"onCommand:notebook.showPreview"
|
||||||
],
|
],
|
||||||
"contributes": {
|
"contributes": {
|
||||||
"commands": [
|
"commands": [
|
||||||
@@ -77,6 +78,11 @@
|
|||||||
"command": "markdown.preview.toggleLock",
|
"command": "markdown.preview.toggleLock",
|
||||||
"title": "%markdown.preview.toggleLock.title%",
|
"title": "%markdown.preview.toggleLock.title%",
|
||||||
"category": "Markdown"
|
"category": "Markdown"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "notebook.showPreview",
|
||||||
|
"title": "notebook.showPreview",
|
||||||
|
"category": "Notebook"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"menus": {
|
"menus": {
|
||||||
@@ -154,6 +160,10 @@
|
|||||||
{
|
{
|
||||||
"command": "markdown.preview.toggleLock",
|
"command": "markdown.preview.toggleLock",
|
||||||
"when": "markdownPreviewFocus"
|
"when": "markdownPreviewFocus"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "notebook.showPreview",
|
||||||
|
"when": "false"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ import * as vscode from 'vscode';
|
|||||||
export interface Command {
|
export interface Command {
|
||||||
readonly id: string;
|
readonly id: string;
|
||||||
|
|
||||||
execute(...args: any[]): void;
|
// {{SQL CARBON EDIT}}
|
||||||
|
execute(...args: any[]): any;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class CommandManager {
|
export class CommandManager {
|
||||||
@@ -26,7 +27,8 @@ export class CommandManager {
|
|||||||
return command;
|
return command;
|
||||||
}
|
}
|
||||||
|
|
||||||
private registerCommand(id: string, impl: (...args: any[]) => void, thisArg?: any) {
|
// {{SQL CARBON EDIT}}
|
||||||
|
private registerCommand(id: string, impl: (...args: any[]) => any, thisArg?: any) {
|
||||||
if (this.commands.has(id)) {
|
if (this.commands.has(id)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,3 +11,5 @@ export { RefreshPreviewCommand } from './refreshPreview';
|
|||||||
export { ShowPreviewSecuritySelectorCommand } from './showPreviewSecuritySelector';
|
export { ShowPreviewSecuritySelectorCommand } from './showPreviewSecuritySelector';
|
||||||
export { MoveCursorToPositionCommand } from './moveCursorToPosition';
|
export { MoveCursorToPositionCommand } from './moveCursorToPosition';
|
||||||
export { ToggleLockCommand } from './toggleLock';
|
export { ToggleLockCommand } from './toggleLock';
|
||||||
|
// {{SQL CARBON EDIT}}
|
||||||
|
export { ShowNotebookPreview } from './showNotebookPreview';
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
import * as vscode from 'vscode';
|
||||||
|
|
||||||
|
import { Command } from '../commandManager';
|
||||||
|
import { MarkdownEngine } from '../markdownEngine';
|
||||||
|
|
||||||
|
export class ShowNotebookPreview implements Command {
|
||||||
|
public readonly id = 'notebook.showPreview';
|
||||||
|
|
||||||
|
public constructor(
|
||||||
|
private readonly engine: MarkdownEngine
|
||||||
|
) { }
|
||||||
|
|
||||||
|
public async execute(document: vscode.Uri, textContent: string): Promise<string> {
|
||||||
|
return this.engine.renderText(document, textContent);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -59,6 +59,8 @@ export function activate(context: vscode.ExtensionContext) {
|
|||||||
commandManager.register(new commands.OnPreviewStyleLoadErrorCommand());
|
commandManager.register(new commands.OnPreviewStyleLoadErrorCommand());
|
||||||
commandManager.register(new commands.OpenDocumentLinkCommand(engine));
|
commandManager.register(new commands.OpenDocumentLinkCommand(engine));
|
||||||
commandManager.register(new commands.ToggleLockCommand(previewManager));
|
commandManager.register(new commands.ToggleLockCommand(previewManager));
|
||||||
|
// {{SQL CARBON EDIT}}
|
||||||
|
commandManager.register(new commands.ShowNotebookPreview(engine));
|
||||||
|
|
||||||
context.subscriptions.push(vscode.workspace.onDidChangeConfiguration(() => {
|
context.subscriptions.push(vscode.workspace.onDidChangeConfiguration(() => {
|
||||||
logger.updateConfiguration();
|
logger.updateConfiguration();
|
||||||
|
|||||||
@@ -86,6 +86,12 @@ export class MarkdownEngine {
|
|||||||
return { text, offset };
|
return { text, offset };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// {{SQL CARBON EDIT}}
|
||||||
|
public async renderText(document: vscode.Uri, text: string): Promise<string> {
|
||||||
|
const engine = await this.getEngine(document);
|
||||||
|
return engine.render(text);
|
||||||
|
}
|
||||||
|
|
||||||
public async render(document: vscode.Uri, stripFrontmatter: boolean, text: string): Promise<string> {
|
public async render(document: vscode.Uri, stripFrontmatter: boolean, text: string): Promise<string> {
|
||||||
let offset = 0;
|
let offset = 0;
|
||||||
if (stripFrontmatter) {
|
if (stripFrontmatter) {
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
"update-grammar": "node ../../build/npm/update-grammar.js Microsoft/vscode-mssql syntaxes/SQL.plist ./syntaxes/sql.tmLanguage.json"
|
"update-grammar": "node ../../build/npm/update-grammar.js Microsoft/vscode-mssql syntaxes/SQL.plist ./syntaxes/sql.tmLanguage.json"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#0.2.8",
|
"dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#0.2.10",
|
||||||
"opener": "^1.4.3",
|
"opener": "^1.4.3",
|
||||||
"service-downloader": "github:anthonydresser/service-downloader#0.1.5",
|
"service-downloader": "github:anthonydresser/service-downloader#0.1.5",
|
||||||
"vscode-extension-telemetry": "^0.0.15"
|
"vscode-extension-telemetry": "^0.0.15"
|
||||||
@@ -345,7 +345,7 @@
|
|||||||
"specialValueType": null,
|
"specialValueType": null,
|
||||||
"isIdentity": false,
|
"isIdentity": false,
|
||||||
"name": "asynchronousProcessing",
|
"name": "asynchronousProcessing",
|
||||||
"displayName": "Asynchronous processing enabled",
|
"displayName": "Asynchronous processing",
|
||||||
"description": "When true, enables usage of the Asynchronous functionality in the .Net Framework Data Provider",
|
"description": "When true, enables usage of the Asynchronous functionality in the .Net Framework Data Provider",
|
||||||
"groupName": "Initialization",
|
"groupName": "Initialization",
|
||||||
"valueType": "boolean",
|
"valueType": "boolean",
|
||||||
@@ -387,7 +387,7 @@
|
|||||||
"specialValueType": null,
|
"specialValueType": null,
|
||||||
"isIdentity": false,
|
"isIdentity": false,
|
||||||
"name": "columnEncryptionSetting",
|
"name": "columnEncryptionSetting",
|
||||||
"displayName": "Column encryption setting",
|
"displayName": "Column encryption",
|
||||||
"description": "Default column encryption setting for all the commands on the connection",
|
"description": "Default column encryption setting for all the commands on the connection",
|
||||||
"groupName": "Security",
|
"groupName": "Security",
|
||||||
"valueType": "category",
|
"valueType": "category",
|
||||||
|
|||||||
@@ -42,18 +42,18 @@
|
|||||||
"Create a new Table": {
|
"Create a new Table": {
|
||||||
"prefix": "sqlCreateTable",
|
"prefix": "sqlCreateTable",
|
||||||
"body": [
|
"body": [
|
||||||
"-- Create a new table called '[${1:TableName}]' in schema '[${2:SchemaName}]' in database '[${3:DatabaseName}]'",
|
"-- Create a new table called '[${1:TableName}]' in schema '[${2:dbo}]'",
|
||||||
"-- Drop the table if it already exists",
|
"-- Drop the table if it already exists",
|
||||||
"IF OBJECT_ID('[${3:DatabaseName}].[${2:SchemaName}].[${1:TableName}]', 'U') IS NOT NULL",
|
"IF OBJECT_ID('[${2:dbo}].[${1:TableName}]', 'U') IS NOT NULL",
|
||||||
"DROP TABLE [${3:DatabaseName}].[${2:SchemaName}].[${1:TableName}]",
|
"DROP TABLE [${2:dbo}].[${1:TableName}]",
|
||||||
"GO",
|
"GO",
|
||||||
"-- Create the table in the specified database and schema",
|
"-- Create the table in the specified schema",
|
||||||
"CREATE TABLE [${3:DatabaseName}].[${2:SchemaName}].[${1:TableName}]",
|
"CREATE TABLE [${2:dbo}].[${1:TableName}]",
|
||||||
"(",
|
"(",
|
||||||
"\t[${4:ColumnName}]Id INT NOT NULL PRIMARY KEY, -- Primary Key column",
|
"\t[${3:Id}] INT NOT NULL PRIMARY KEY, -- Primary Key column",
|
||||||
"\t[${5:ColumnName1}] [NVARCHAR](50) NOT NULL,",
|
"\t[${4:ColumnName2}] ${5:NVARCHAR(50)} NOT NULL,",
|
||||||
"\t[${6:ColumnName2}] [NVARCHAR](50) NOT NULL",
|
"\t[${6:ColumnName3}] ${7:NVARCHAR(50)} NOT NULL",
|
||||||
"\t-- Specify more columns here",
|
"\t$0-- Specify more columns here",
|
||||||
");",
|
");",
|
||||||
"GO"
|
"GO"
|
||||||
],
|
],
|
||||||
@@ -64,10 +64,10 @@
|
|||||||
"Drop a Table": {
|
"Drop a Table": {
|
||||||
"prefix": "sqlDropTable",
|
"prefix": "sqlDropTable",
|
||||||
"body": [
|
"body": [
|
||||||
"-- Drop a table called '${3:TableName}' in schema '${2:SchemaName}' in Database '${1:DatabaseName}'",
|
"-- Drop a table called '${1:TableName}' in schema '${2:dbo}'",
|
||||||
"-- Drop the table if it already exists",
|
"-- Drop the table if it already exists",
|
||||||
"IF OBJECT_ID('[${1:DatabaseName}].[${2:SchemaName}].[${3:TableName}]', 'U') IS NOT NULL",
|
"IF OBJECT_ID('[${2:dbo}].[${1:TableName}]', 'U') IS NOT NULL",
|
||||||
"DROP TABLE [${1:DatabaseName}].[${2:SchemaName}].[${3:TableName}]",
|
"DROP TABLE [${2:dbo}].[${1:TableName}]",
|
||||||
"GO"
|
"GO"
|
||||||
],
|
],
|
||||||
"description": "Drop a Table"
|
"description": "Drop a Table"
|
||||||
@@ -76,9 +76,9 @@
|
|||||||
"Add a new column to a Table": {
|
"Add a new column to a Table": {
|
||||||
"prefix": "sqlAddColumn",
|
"prefix": "sqlAddColumn",
|
||||||
"body": [
|
"body": [
|
||||||
"-- Add a new column '[${1:NewColumnName}]' to table '[${2:TableName}]' in schema '[${3:SchemaName}]' in database '[${4:DatabaseName}]'",
|
"-- Add a new column '[${1:NewColumnName}]' to table '[${2:TableName}]' in schema '[${3:dbo}]'",
|
||||||
"ALTER TABLE [${4:DatabaseName}].[${3:SchemaName}].[${2:TableName}]",
|
"ALTER TABLE [${3:dbo}].[${2:TableName}]",
|
||||||
"\tADD [${1:NewColumnName}] /*new_column_name*/ ${5:int} /*new_column_datatype*/ ${6:NULL} /*new_column_nullability*/",
|
"\tADD [${1:NewColumnName}] /*new_column_name*/ ${4:int} /*new_column_datatype*/ ${5:NULL} /*new_column_nullability*/",
|
||||||
"GO"
|
"GO"
|
||||||
],
|
],
|
||||||
"description": "Add a new column to a Table"
|
"description": "Add a new column to a Table"
|
||||||
@@ -87,8 +87,8 @@
|
|||||||
"Drop a column from a Table": {
|
"Drop a column from a Table": {
|
||||||
"prefix": "sqlDropColumn",
|
"prefix": "sqlDropColumn",
|
||||||
"body": [
|
"body": [
|
||||||
"-- Drop '[${1:ColumnName}]' from table '[${2:TableName}]' in schema '[${3:SchemaName}]' in database '[${4:DatabaseName}]'",
|
"-- Drop '[${1:ColumnName}]' from table '[${2:TableName}]' in schema '[${3:dbo}]'",
|
||||||
"ALTER TABLE [${4:DatabaseName}].[${3:SchemaName}].[${2:TableName}]",
|
"ALTER TABLE [${3:dbo}].[${2:TableName}]",
|
||||||
"\tDROP COLUMN [${1:ColumnName}]",
|
"\tDROP COLUMN [${1:ColumnName}]",
|
||||||
"GO"
|
"GO"
|
||||||
],
|
],
|
||||||
@@ -98,9 +98,9 @@
|
|||||||
"Select rows from a Table or a View": {
|
"Select rows from a Table or a View": {
|
||||||
"prefix": "sqlSelect",
|
"prefix": "sqlSelect",
|
||||||
"body": [
|
"body": [
|
||||||
"-- Select rows from a Table or View '[${1:TableOrViewName}]' in schema '[${2:SchemaName}]' in database '[${3:DatabaseName}]'",
|
"-- Select rows from a Table or View '[${1:TableOrViewName}]' in schema '[${2:dbo}]'",
|
||||||
"SELECT * FROM [${3:DatabaseName}].[${2:SchemaName}].[${1:TableOrViewName}]",
|
"SELECT * FROM [${2:dbo}].[${1:TableOrViewName}]",
|
||||||
"WHERE ${4:/* add search conditions here */}",
|
"WHERE ${3:/* add search conditions here */}",
|
||||||
"GO"
|
"GO"
|
||||||
],
|
],
|
||||||
"description": "Select rows from a Table or a View"
|
"description": "Select rows from a Table or a View"
|
||||||
@@ -109,17 +109,17 @@
|
|||||||
"Insert rows into a Table": {
|
"Insert rows into a Table": {
|
||||||
"prefix": "sqlInsertRows",
|
"prefix": "sqlInsertRows",
|
||||||
"body": [
|
"body": [
|
||||||
"-- Insert rows into table '${1:TableName}' in schema '[${2:SchemaName}]' in database '[${3:DatabaseName}]'",
|
"-- Insert rows into table '${1:TableName}' in schema '[${2:dbo}]'",
|
||||||
"INSERT INTO [${3:DatabaseName}].[${2:SchemaName}].[${1:TableName}]",
|
"INSERT INTO [${2:dbo}].[${1:TableName}]",
|
||||||
"( -- Columns to insert data into",
|
"( -- Columns to insert data into",
|
||||||
" ${4:[ColumnName1], [ColumnName2], [ColumnName3]}",
|
" ${3:[ColumnName1], [ColumnName2], [ColumnName3]}",
|
||||||
")",
|
")",
|
||||||
"VALUES",
|
"VALUES",
|
||||||
"( -- First row: values for the columns in the list above",
|
"( -- First row: values for the columns in the list above",
|
||||||
" ${5:ColumnValue1, ColumnValue2, ColumnValue3}",
|
" ${4:ColumnValue1, ColumnValue2, ColumnValue3}",
|
||||||
"),",
|
"),",
|
||||||
"( -- Second row: values for the columns in the list above",
|
"( -- Second row: values for the columns in the list above",
|
||||||
" ${6:ColumnValue1, ColumnValue2, ColumnValue3}",
|
" ${5:ColumnValue1, ColumnValue2, ColumnValue3}",
|
||||||
")",
|
")",
|
||||||
"-- Add more rows here",
|
"-- Add more rows here",
|
||||||
"GO"
|
"GO"
|
||||||
@@ -130,9 +130,9 @@
|
|||||||
"Delete rows from a Table": {
|
"Delete rows from a Table": {
|
||||||
"prefix": "sqlDeleteRows",
|
"prefix": "sqlDeleteRows",
|
||||||
"body": [
|
"body": [
|
||||||
"-- Delete rows from table '[${1:TableName}]' in schema '[${2:SchemaName}]' in database '[${3:DatabaseName}]'",
|
"-- Delete rows from table '[${1:TableName}]' in schema '[${2:dbo}]'",
|
||||||
"DELETE FROM [${3:DatabaseName}].[${2:SchemaName}].[${1:TableName}]",
|
"DELETE FROM [${2:dbo}].[${1:TableName}]",
|
||||||
"WHERE ${4:/* add search conditions here */}",
|
"WHERE ${3:/* add search conditions here */}",
|
||||||
"GO"
|
"GO"
|
||||||
],
|
],
|
||||||
"description": "Delete rows from a Table"
|
"description": "Delete rows from a Table"
|
||||||
@@ -141,13 +141,13 @@
|
|||||||
"Update rows in a Table": {
|
"Update rows in a Table": {
|
||||||
"prefix": "sqlUpdateRows",
|
"prefix": "sqlUpdateRows",
|
||||||
"body": [
|
"body": [
|
||||||
"-- Update rows in table '[${1:TableName}]' in schema '[${2:SchemaName}]' in database '[${3:DatabaseName}]'",
|
"-- Update rows in table '[${1:TableName}]' in schema '[${2:dbo}]'",
|
||||||
"UPDATE [${3:DatabaseName}].[${2:SchemaName}].[${1:TableName}]",
|
"UPDATE [${2:dbo}].[${1:TableName}]",
|
||||||
"SET",
|
"SET",
|
||||||
"\t[${4:ColumnName1}] = ${5:ColumnValue1},",
|
"\t[${3:ColumnName1}] = ${4:ColumnValue1},",
|
||||||
"\t[${6:ColumnName2}] = ${7:ColumnValue2}",
|
"\t[${5:ColumnName2}] = ${6:ColumnValue2}",
|
||||||
"\t-- Add more columns and values here",
|
"\t-- Add more columns and values here",
|
||||||
"WHERE ${8:/* add search conditions here */}",
|
"WHERE ${7:/* add search conditions here */}",
|
||||||
"GO"
|
"GO"
|
||||||
],
|
],
|
||||||
"description": "Update rows in a Table"
|
"description": "Update rows in a Table"
|
||||||
@@ -156,27 +156,28 @@
|
|||||||
"Create a stored procedure": {
|
"Create a stored procedure": {
|
||||||
"prefix": "sqlCreateStoredProc",
|
"prefix": "sqlCreateStoredProc",
|
||||||
"body": [
|
"body": [
|
||||||
"-- Create a new stored procedure called '${1:StoredProcedureName}' in schema '${2:SchemaName}'",
|
"-- Create a new stored procedure called '${1:StoredProcedureName}' in schema '${2:dbo}'",
|
||||||
"-- Drop the stored procedure if it already exists",
|
"-- Drop the stored procedure if it already exists",
|
||||||
"IF EXISTS (",
|
"IF EXISTS (",
|
||||||
"SELECT *",
|
"SELECT *",
|
||||||
"\tFROM INFORMATION_SCHEMA.ROUTINES",
|
"\tFROM INFORMATION_SCHEMA.ROUTINES",
|
||||||
"WHERE SPECIFIC_SCHEMA = N'${2:SchemaName}'",
|
"WHERE SPECIFIC_SCHEMA = N'${2:dbo}'",
|
||||||
"\tAND SPECIFIC_NAME = N'${1:StoredProcedureName}'",
|
"\tAND SPECIFIC_NAME = N'${1:StoredProcedureName}'",
|
||||||
|
"\tAND ROUTINE_TYPE = N'PROCEDURE'"
|
||||||
")",
|
")",
|
||||||
"DROP PROCEDURE ${2:SchemaName}.${1:StoredProcedureName}",
|
"DROP PROCEDURE ${2:dbo}.${1:StoredProcedureName}",
|
||||||
"GO",
|
"GO",
|
||||||
"-- Create the stored procedure in the specified schema",
|
"-- Create the stored procedure in the specified schema",
|
||||||
"CREATE PROCEDURE ${2:SchemaName}.${1:StoredProcedureName}",
|
"CREATE PROCEDURE ${2:dbo}.${1:StoredProcedureName}",
|
||||||
"\t$3@param1 /*parameter name*/ int /*datatype_for_param1*/ = 0, /*default_value_for_param1*/",
|
"\t$3@param1 /*parameter name*/ $4int /*datatype_for_param1*/ = 0, /*default_value_for_param1*/",
|
||||||
"\t$4@param2 /*parameter name*/ int /*datatype_for_param1*/ = 0 /*default_value_for_param2*/",
|
"\t$5@param2 /*parameter name*/ $6int /*datatype_for_param1*/ = 0 /*default_value_for_param2*/",
|
||||||
"-- add more stored procedure parameters here",
|
"-- add more stored procedure parameters here",
|
||||||
"AS",
|
"AS",
|
||||||
"\t-- body of the stored procedure",
|
"\t-- body of the stored procedure",
|
||||||
"\tSELECT @param1, @param2",
|
"\tSELECT @param1, @param2",
|
||||||
"GO",
|
"GO",
|
||||||
"-- example to execute the stored procedure we just created",
|
"-- example to execute the stored procedure we just created",
|
||||||
"EXECUTE ${2:SchemaName}.${1:StoredProcedureName} 1 /*value_for_param1*/, 2 /*value_for_param2*/",
|
"EXECUTE ${2:dbo}.${1:StoredProcedureName} 1 /*value_for_param1*/, 2 /*value_for_param2*/",
|
||||||
"GO"
|
"GO"
|
||||||
],
|
],
|
||||||
"description": "Create a stored procedure"
|
"description": "Create a stored procedure"
|
||||||
@@ -185,14 +186,14 @@
|
|||||||
"Drop a stored procedure": {
|
"Drop a stored procedure": {
|
||||||
"prefix": "sqlDropStoredProc",
|
"prefix": "sqlDropStoredProc",
|
||||||
"body": [
|
"body": [
|
||||||
"-- Drop the stored procedure called '${1:StoredProcedureName}' in schema '${2:SchemaName}'",
|
"-- Drop the stored procedure called '${1:StoredProcedureName}' in schema '${2:dbo}'",
|
||||||
"IF EXISTS (",
|
"IF EXISTS (",
|
||||||
"SELECT *",
|
"SELECT *",
|
||||||
"\tFROM INFORMATION_SCHEMA.ROUTINES",
|
"\tFROM INFORMATION_SCHEMA.ROUTINES",
|
||||||
"WHERE SPECIFIC_SCHEMA = N'${2:SchemaName}'",
|
"WHERE SPECIFIC_SCHEMA = N'${2:dbo}'",
|
||||||
"\tAND SPECIFIC_NAME = N'${1:StoredProcedureName}'",
|
"\tAND SPECIFIC_NAME = N'${1:StoredProcedureName}'",
|
||||||
")",
|
")",
|
||||||
"DROP PROCEDURE ${2:SchemaName}.${1:StoredProcedureName}",
|
"DROP PROCEDURE ${2:dbo}.${1:StoredProcedureName}",
|
||||||
"GO"
|
"GO"
|
||||||
],
|
],
|
||||||
"description": "Drop a stored procedure"
|
"description": "Drop a stored procedure"
|
||||||
@@ -241,7 +242,7 @@
|
|||||||
"Declare a cursor": {
|
"Declare a cursor": {
|
||||||
"prefix": "sqlCursor",
|
"prefix": "sqlCursor",
|
||||||
"body": [
|
"body": [
|
||||||
"-- Declare a cursor for a Table or a View '${1:TableOrViewName}' in schema '${2:SchemaName}'",
|
"-- Declare a cursor for a Table or a View '${1:TableOrViewName}' in schema '${2:dbo}'",
|
||||||
"DECLARE @ColumnName1 NVARCHAR(50), @ColumnName2 NVARCHAR(50)",
|
"DECLARE @ColumnName1 NVARCHAR(50), @ColumnName2 NVARCHAR(50)",
|
||||||
"",
|
"",
|
||||||
"DECLARE db_cursor CURSOR FOR",
|
"DECLARE db_cursor CURSOR FOR",
|
||||||
@@ -304,8 +305,8 @@
|
|||||||
"prefix": "sqlCreateIndex",
|
"prefix": "sqlCreateIndex",
|
||||||
"body": [
|
"body": [
|
||||||
"-- Create a nonclustered index with or without a unique constraint",
|
"-- Create a nonclustered index with or without a unique constraint",
|
||||||
"-- Or create a clustered index on table '[${1:TableName}]' in schema '[${2:SchemaName}]' in database '[${3:DatabaseName}]'",
|
"-- Or create a clustered index on table '[${1:TableName}]' in schema '[${2:dbo}]' in database '[${3:DatabaseName}]'",
|
||||||
"CREATE ${5:/*UNIQUE or CLUSTERED*/} INDEX IX_${4:IndexName} ON [${3:DatabaseName}].[${2:SchemaName}].[${1:TableName}] ([${6:ColumnName1}] DESC /*Change sort order as needed*/",
|
"CREATE ${5:/*UNIQUE or CLUSTERED*/} INDEX IX_${4:IndexName} ON [${3:DatabaseName}].[${2:dbo}].[${1:TableName}] ([${6:ColumnName1}] DESC /*Change sort order as needed*/",
|
||||||
"GO"
|
"GO"
|
||||||
],
|
],
|
||||||
"description": "Create a new Index"
|
"description": "Create a new Index"
|
||||||
@@ -319,13 +320,13 @@
|
|||||||
"IF OBJECT_ID('tempDB..#${1:TableName}', 'U') IS NOT NULL",
|
"IF OBJECT_ID('tempDB..#${1:TableName}', 'U') IS NOT NULL",
|
||||||
"DROP TABLE #${1:TableName}",
|
"DROP TABLE #${1:TableName}",
|
||||||
"GO",
|
"GO",
|
||||||
"-- Create the temporary table from a physical table called '${4:TableName}' in schema '${3:SchemaName}' in database '${2:DatabaseName}'",
|
"-- Create the temporary table from a physical table called '${4:TableName}' in schema '${3:dbo}' in database '${2:DatabaseName}'",
|
||||||
"SELECT *",
|
"SELECT *",
|
||||||
"INTO #${1:TableName}",
|
"INTO #${1:TableName}",
|
||||||
"FROM [${2:DatabaseName}].[${3:[SchemaName}].[${4:TableName}]",
|
"FROM [${2:DatabaseName}].[${3:[dbo}].[${4:TableName}]",
|
||||||
"WHERE ${5:/* add search conditions here */}"
|
"WHERE ${5:/* add search conditions here */}"
|
||||||
],
|
],
|
||||||
"description": "Create a new Temporary Table"
|
"description": "Create a new Temporary Table"
|
||||||
},
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"downloadUrl": "https://github.com/Microsoft/sqltoolsservice/releases/download/v{#version#}/microsoft.sqltools.servicelayer-{#fileName#}",
|
"downloadUrl": "https://github.com/Microsoft/sqltoolsservice/releases/download/v{#version#}/microsoft.sqltools.servicelayer-{#fileName#}",
|
||||||
"version": "1.5.0-alpha.48",
|
"version": "1.5.0-alpha.58",
|
||||||
"downloadFileNames": {
|
"downloadFileNames": {
|
||||||
"Windows_86": "win-x86-netcoreapp2.2.zip",
|
"Windows_86": "win-x86-netcoreapp2.2.zip",
|
||||||
"Windows_64": "win-x64-netcoreapp2.2.zip",
|
"Windows_64": "win-x64-netcoreapp2.2.zip",
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ buffer-alloc-unsafe@^1.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
|
resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
|
||||||
integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
|
integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
|
||||||
|
|
||||||
buffer-alloc@^1.1.0:
|
buffer-alloc@^1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
|
resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
|
||||||
integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
|
integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
|
||||||
@@ -75,19 +75,26 @@ core-util-is@~1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||||
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
||||||
|
|
||||||
"dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#0.2.8":
|
"dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#0.2.10":
|
||||||
version "0.2.8"
|
version "0.2.10"
|
||||||
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/3ec3ec3fa63a8dae958c18a85b91fec74c50aec5"
|
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/4de3f7caf0eba54159911b977ddb4f5d7c0a9ca8"
|
||||||
dependencies:
|
dependencies:
|
||||||
vscode-languageclient "3.5.1"
|
vscode-languageclient "3.5.1"
|
||||||
|
|
||||||
debug@3.1.0, debug@^3.1.0:
|
debug@3.1.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
|
||||||
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
|
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
|
||||||
dependencies:
|
dependencies:
|
||||||
ms "2.0.0"
|
ms "2.0.0"
|
||||||
|
|
||||||
|
debug@^3.1.0:
|
||||||
|
version "3.2.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
|
||||||
|
integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
|
||||||
|
dependencies:
|
||||||
|
ms "^2.1.1"
|
||||||
|
|
||||||
decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1:
|
decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1:
|
||||||
version "4.1.1"
|
version "4.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1"
|
resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1"
|
||||||
@@ -161,9 +168,9 @@ end-of-stream@^1.0.0:
|
|||||||
once "^1.4.0"
|
once "^1.4.0"
|
||||||
|
|
||||||
es6-promise@^4.0.3:
|
es6-promise@^4.0.3:
|
||||||
version "4.2.4"
|
version "4.2.5"
|
||||||
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29"
|
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054"
|
||||||
integrity sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==
|
integrity sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==
|
||||||
|
|
||||||
es6-promisify@^5.0.0:
|
es6-promisify@^5.0.0:
|
||||||
version "5.0.0"
|
version "5.0.0"
|
||||||
@@ -213,9 +220,9 @@ get-stream@^2.2.0:
|
|||||||
pinkie-promise "^2.0.0"
|
pinkie-promise "^2.0.0"
|
||||||
|
|
||||||
graceful-fs@^4.1.10:
|
graceful-fs@^4.1.10:
|
||||||
version "4.1.11"
|
version "4.1.15"
|
||||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
|
||||||
integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
|
integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
|
||||||
|
|
||||||
"graceful-readlink@>= 1.0.0":
|
"graceful-readlink@>= 1.0.0":
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
@@ -287,6 +294,11 @@ ms@2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||||
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
|
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
|
||||||
|
|
||||||
|
ms@^2.1.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
|
||||||
|
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
|
||||||
|
|
||||||
object-assign@^4.0.1:
|
object-assign@^4.0.1:
|
||||||
version "4.1.1"
|
version "4.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||||
@@ -300,9 +312,9 @@ once@^1.4.0:
|
|||||||
wrappy "1"
|
wrappy "1"
|
||||||
|
|
||||||
opener@^1.4.3:
|
opener@^1.4.3:
|
||||||
version "1.4.3"
|
version "1.5.1"
|
||||||
resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8"
|
resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"
|
||||||
integrity sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=
|
integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==
|
||||||
|
|
||||||
os-tmpdir@~1.0.2:
|
os-tmpdir@~1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
@@ -367,9 +379,9 @@ seek-bzip@^1.0.5:
|
|||||||
commander "~2.8.1"
|
commander "~2.8.1"
|
||||||
|
|
||||||
semver@^5.3.0:
|
semver@^5.3.0:
|
||||||
version "5.5.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
|
||||||
integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
|
integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
|
||||||
|
|
||||||
"service-downloader@github:anthonydresser/service-downloader#0.1.5":
|
"service-downloader@github:anthonydresser/service-downloader#0.1.5":
|
||||||
version "0.1.5"
|
version "0.1.5"
|
||||||
@@ -397,16 +409,16 @@ strip-dirs@^2.0.0:
|
|||||||
is-natural-number "^4.0.1"
|
is-natural-number "^4.0.1"
|
||||||
|
|
||||||
tar-stream@^1.5.2:
|
tar-stream@^1.5.2:
|
||||||
version "1.6.1"
|
version "1.6.2"
|
||||||
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.1.tgz#f84ef1696269d6223ca48f6e1eeede3f7e81f395"
|
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555"
|
||||||
integrity sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==
|
integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==
|
||||||
dependencies:
|
dependencies:
|
||||||
bl "^1.0.0"
|
bl "^1.0.0"
|
||||||
buffer-alloc "^1.1.0"
|
buffer-alloc "^1.2.0"
|
||||||
end-of-stream "^1.0.0"
|
end-of-stream "^1.0.0"
|
||||||
fs-constants "^1.0.0"
|
fs-constants "^1.0.0"
|
||||||
readable-stream "^2.3.0"
|
readable-stream "^2.3.0"
|
||||||
to-buffer "^1.1.0"
|
to-buffer "^1.1.1"
|
||||||
xtend "^4.0.0"
|
xtend "^4.0.0"
|
||||||
|
|
||||||
through@^2.3.6:
|
through@^2.3.6:
|
||||||
@@ -421,15 +433,15 @@ tmp@^0.0.33:
|
|||||||
dependencies:
|
dependencies:
|
||||||
os-tmpdir "~1.0.2"
|
os-tmpdir "~1.0.2"
|
||||||
|
|
||||||
to-buffer@^1.1.0:
|
to-buffer@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
|
resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
|
||||||
integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
|
integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
|
||||||
|
|
||||||
unbzip2-stream@^1.0.9:
|
unbzip2-stream@^1.0.9:
|
||||||
version "1.2.5"
|
version "1.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz#73a033a567bbbde59654b193c44d48a7e4f43c47"
|
resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.3.1.tgz#7854da51622a7e63624221196357803b552966a1"
|
||||||
integrity sha512-izD3jxT8xkzwtXRUZjtmRwKnZoeECrfZ8ra/ketwOcusbZEp4mjULMnJOCfTDZBgGQAAY1AJ/IgxcwkavcX9Og==
|
integrity sha512-fIZnvdjblYs7Cru/xC6tCPVhz7JkYcVQQkePwMLyQELzYTds2Xn8QefPVnvdVhhZqubxNA1cASXEH5wcK0Bucw==
|
||||||
dependencies:
|
dependencies:
|
||||||
buffer "^3.0.1"
|
buffer "^3.0.1"
|
||||||
through "^2.3.6"
|
through "^2.3.6"
|
||||||
|
|||||||
@@ -12,12 +12,10 @@ import { CreateSessionData } from '../data/createSessionData';
|
|||||||
const localize = nls.loadMessageBundle();
|
const localize = nls.loadMessageBundle();
|
||||||
|
|
||||||
export class CreateSessionDialog {
|
export class CreateSessionDialog {
|
||||||
|
|
||||||
// Top level
|
// Top level
|
||||||
private readonly DialogTitle: string = localize('createSessionDialog.newSession', 'New Session');
|
|
||||||
private readonly CancelButtonText: string = localize('createSessionDialog.cancel', 'Cancel');
|
private readonly CancelButtonText: string = localize('createSessionDialog.cancel', 'Cancel');
|
||||||
private readonly CreateButtonText: string = localize('createSessionDialog.create', 'Create');
|
private readonly CreateButtonText: string = localize('createSessionDialog.create', 'Start');
|
||||||
private readonly DialogTitleText: string = localize('createSessionDialog.title', 'Create New Profiler Session');
|
private readonly DialogTitleText: string = localize('createSessionDialog.title', 'Start New Profiler Session');
|
||||||
|
|
||||||
// UI Components
|
// UI Components
|
||||||
private dialog: sqlops.window.modelviewdialog.Dialog;
|
private dialog: sqlops.window.modelviewdialog.Dialog;
|
||||||
@@ -25,23 +23,28 @@ export class CreateSessionDialog {
|
|||||||
private sessionNameBox: sqlops.InputBoxComponent;
|
private sessionNameBox: sqlops.InputBoxComponent;
|
||||||
|
|
||||||
private model: CreateSessionData;
|
private model: CreateSessionData;
|
||||||
|
private readonly _providerType: string;
|
||||||
|
|
||||||
private _onSuccess: vscode.EventEmitter<CreateSessionData> = new vscode.EventEmitter<CreateSessionData>();
|
private _onSuccess: vscode.EventEmitter<CreateSessionData> = new vscode.EventEmitter<CreateSessionData>();
|
||||||
public readonly onSuccess: vscode.Event<CreateSessionData> = this._onSuccess.event;
|
public readonly onSuccess: vscode.Event<CreateSessionData> = this._onSuccess.event;
|
||||||
|
|
||||||
|
|
||||||
constructor(ownerUri: string, templates: Array<sqlops.ProfilerSessionTemplate>) {
|
constructor(ownerUri: string, providerType: string, templates: Array<sqlops.ProfilerSessionTemplate>) {
|
||||||
if (typeof (templates) === 'undefined' || templates === null) {
|
if (typeof (templates) === 'undefined' || templates === null) {
|
||||||
throw new Error(localize('createSessionDialog.templatesInvalid', "Invalid templates list, cannot open dialog"));
|
throw new Error(localize('createSessionDialog.templatesInvalid', "Invalid templates list, cannot open dialog"));
|
||||||
}
|
}
|
||||||
if (typeof (ownerUri) === 'undefined' || ownerUri === null) {
|
if (typeof (ownerUri) === 'undefined' || ownerUri === null) {
|
||||||
throw new Error(localize('createSessionDialog.dialogOwnerInvalid', "Invalid dialog owner, cannot open dialog"));
|
throw new Error(localize('createSessionDialog.dialogOwnerInvalid', "Invalid dialog owner, cannot open dialog"));
|
||||||
}
|
}
|
||||||
|
if (typeof (providerType) === 'undefined' || providerType === null) {
|
||||||
|
throw new Error(localize('createSessionDialog.invalidProviderType', "Invalid provider type, cannot open dialog"));
|
||||||
|
}
|
||||||
|
this._providerType = providerType;
|
||||||
this.model = new CreateSessionData(ownerUri, templates);
|
this.model = new CreateSessionData(ownerUri, templates);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async showDialog(): Promise<void> {
|
public async showDialog(): Promise<void> {
|
||||||
this.dialog = sqlops.window.modelviewdialog.createDialog(this.DialogTitle);
|
this.dialog = sqlops.window.modelviewdialog.createDialog(this.DialogTitleText);
|
||||||
this.initializeContent();
|
this.initializeContent();
|
||||||
this.dialog.okButton.onClick(() => this.execute());
|
this.dialog.okButton.onClick(() => this.execute());
|
||||||
this.dialog.cancelButton.onClick(() => { });
|
this.dialog.cancelButton.onClick(() => { });
|
||||||
@@ -65,6 +68,10 @@ export class CreateSessionDialog {
|
|||||||
value: ''
|
value: ''
|
||||||
}).component();
|
}).component();
|
||||||
|
|
||||||
|
this.templatesBox.onValueChanged(() => {
|
||||||
|
this.updateSessionName();
|
||||||
|
});
|
||||||
|
|
||||||
let formModel = view.modelBuilder.formContainer()
|
let formModel = view.modelBuilder.formContainer()
|
||||||
.withFormItems([{
|
.withFormItems([{
|
||||||
components: [{
|
components: [{
|
||||||
@@ -76,13 +83,14 @@ export class CreateSessionDialog {
|
|||||||
|
|
||||||
title: localize('createSessionDialog.enterSessionName', "Enter session name:")
|
title: localize('createSessionDialog.enterSessionName', "Enter session name:")
|
||||||
}],
|
}],
|
||||||
title: this.DialogTitleText
|
title: ''
|
||||||
}]).withLayout({ width: '100%' }).component();
|
}]).withLayout({ width: '100%' }).component();
|
||||||
|
|
||||||
await view.initializeModel(formModel);
|
await view.initializeModel(formModel);
|
||||||
|
|
||||||
if (this.model.templates) {
|
if (this.model.templates) {
|
||||||
this.templatesBox.values = this.model.getTemplateNames();
|
this.templatesBox.values = this.model.getTemplateNames();
|
||||||
|
this.updateSessionName();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.sessionNameBox.onTextChanged(() => {
|
this.sessionNameBox.onTextChanged(() => {
|
||||||
@@ -96,9 +104,14 @@ export class CreateSessionDialog {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private updateSessionName() {
|
||||||
|
if (this.templatesBox.value) {
|
||||||
|
this.sessionNameBox.value = `ADS_${this.templatesBox.value.toString()}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private async execute(): Promise<void> {
|
private async execute(): Promise<void> {
|
||||||
let currentConnection = await sqlops.connection.getCurrentConnection();
|
let profilerService = sqlops.dataprotocol.getProvider<sqlops.ProfilerProvider>(this._providerType, sqlops.DataProviderType.ProfilerProvider);
|
||||||
let profilerService = sqlops.dataprotocol.getProvider<sqlops.ProfilerProvider>(currentConnection.providerName, sqlops.DataProviderType.ProfilerProvider);
|
|
||||||
|
|
||||||
let name = this.sessionNameBox.value;
|
let name = this.sessionNameBox.value;
|
||||||
let selected = this.templatesBox.value.toString();
|
let selected = this.templatesBox.value.toString();
|
||||||
|
|||||||
@@ -29,8 +29,8 @@ export class MainController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public activate(): void {
|
public activate(): void {
|
||||||
vscode.commands.registerCommand('profiler.openCreateSessionDialog', (ownerUri: string, templates: Array<sqlops.ProfilerSessionTemplate>) => {
|
vscode.commands.registerCommand('profiler.openCreateSessionDialog', (ownerUri: string, providerType: string, templates: Array<sqlops.ProfilerSessionTemplate>) => {
|
||||||
let dialog = new CreateSessionDialog(ownerUri, templates);
|
let dialog = new CreateSessionDialog(ownerUri, providerType, templates);
|
||||||
dialog.showDialog();
|
dialog.showDialog();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "profiler",
|
"name": "profiler",
|
||||||
"displayName": "SQL Server Profiler",
|
"displayName": "SQL Server Profiler",
|
||||||
"description": "SQL Server Profiler for Azure Data Studio",
|
"description": "SQL Server Profiler for Azure Data Studio",
|
||||||
"version": "0.2.0",
|
"version": "0.5.0",
|
||||||
"publisher": "Microsoft",
|
"publisher": "Microsoft",
|
||||||
"preview": true,
|
"preview": true,
|
||||||
"license": "https://raw.githubusercontent.com/Microsoft/azuredatastudio/master/LICENSE.txt",
|
"license": "https://raw.githubusercontent.com/Microsoft/azuredatastudio/master/LICENSE.txt",
|
||||||
@@ -26,11 +26,10 @@
|
|||||||
"Microsoft.mssql"
|
"Microsoft.mssql"
|
||||||
],
|
],
|
||||||
"contributes": {
|
"contributes": {
|
||||||
|
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
"command": "profiler.newProfiler",
|
"command": "profiler.newProfiler",
|
||||||
"title": "New Profiler",
|
"title": "Launch Profiler",
|
||||||
"category": "Profiler"
|
"category": "Profiler"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -49,6 +48,15 @@
|
|||||||
"category": "Profiler"
|
"category": "Profiler"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"menus": {
|
||||||
|
"objectExplorer/item/context": [
|
||||||
|
{
|
||||||
|
"command": "profiler.newProfiler",
|
||||||
|
"when": "connectionProvider == MSSQL && nodeType && nodeType == Server",
|
||||||
|
"group": "profiler"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
"outputChannels": [
|
"outputChannels": [
|
||||||
"sqlprofiler"
|
"sqlprofiler"
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -6,17 +6,17 @@
|
|||||||
|
|
||||||
// base
|
// base
|
||||||
"foreground": "#fffffe",
|
"foreground": "#fffffe",
|
||||||
"focusBorder": "#0E639C",
|
"focusBorder": "#0078d7",
|
||||||
"selection.background": "#3062d6",
|
"selection.background": "#3062d6",
|
||||||
|
|
||||||
//text colors
|
//text colors
|
||||||
"textLinkForeground": "#30B4FF",
|
"textLinkForeground": "#30b4ff",
|
||||||
"textLinkActiveForeground": "#30B4FF",
|
"textLinkActiveForeground": "#30b4ff",
|
||||||
|
|
||||||
//Button control
|
//Button control
|
||||||
"button.background": "#00BCF2",
|
"button.background": "#0078d7cc",
|
||||||
"button.foreground": "#212121",
|
"button.foreground": "#ffffff",
|
||||||
"button.hoverBackground": "#0099BC",
|
"button.hoverBackground": "#0078d7",
|
||||||
|
|
||||||
// TODO add support for these
|
// TODO add support for these
|
||||||
// "button.secondaryBackground": "#c8c8c8",
|
// "button.secondaryBackground": "#c8c8c8",
|
||||||
@@ -25,6 +25,9 @@
|
|||||||
// "button.disabledBackground": "#444444" ,
|
// "button.disabledBackground": "#444444" ,
|
||||||
// "button.disabledForeground": "#888888" ,
|
// "button.disabledForeground": "#888888" ,
|
||||||
|
|
||||||
|
//Checkbox
|
||||||
|
"checkbox.disabled.foreground": "#888888",
|
||||||
|
|
||||||
//Dropdown Control
|
//Dropdown Control
|
||||||
"dropdown.background": "#212121",
|
"dropdown.background": "#212121",
|
||||||
"dropdown.foreground": "#fffffe",
|
"dropdown.foreground": "#fffffe",
|
||||||
@@ -35,24 +38,24 @@
|
|||||||
"input.border": "#888888",
|
"input.border": "#888888",
|
||||||
"input.disabled.background": "#444444",
|
"input.disabled.background": "#444444",
|
||||||
"input.disabled.foreground": "#888888",
|
"input.disabled.foreground": "#888888",
|
||||||
"inputOption.activeBorder": "#007ACC",
|
"inputOption.activeBorder": "#0078d7",
|
||||||
"input.placeholderForeground": "#888888",
|
"input.placeholderForeground": "#888888",
|
||||||
"inputValidation.errorBackground": "#D02E00",
|
"inputValidation.errorBackground": "#b62e00",
|
||||||
"inputValidation.errorBorder": "#D02E00",
|
"inputValidation.errorBorder": "#b62e00",
|
||||||
|
|
||||||
//List and trees
|
//List and trees
|
||||||
"list.activeSelectionBackground": "#3062d6",
|
"list.activeSelectionBackground": "#3062d6",
|
||||||
"list.hoverBackground": "#444444",
|
"list.hoverBackground": "#444444",
|
||||||
"pickerGroup.border": "#00BCF2",
|
"pickerGroup.border": "#0078d7",
|
||||||
"activityBar.background": "#444444",
|
"activityBar.background": "#444444",
|
||||||
"sideBar.background": "#333333",
|
"sideBar.background": "#333333",
|
||||||
"sideBarTitle.foreground": "#BBBBBB",
|
"sideBarTitle.foreground": "#bbbbbb",
|
||||||
"input.placeholderForeground": "#A6A6A6",
|
"input.placeholderForeground": "#a6a6a6",
|
||||||
"editorGroupHeader.tabsBackground": "#444444",
|
"editorGroupHeader.tabsBackground": "#444444",
|
||||||
"editor.background": "#212121",
|
"editor.background": "#212121",
|
||||||
"editor.foreground": "#ffffff",
|
"editor.foreground": "#ffffff",
|
||||||
"editorWidget.background": "#444444",
|
"editorWidget.background": "#444444",
|
||||||
"editorLink.activeForeground": "#30B4FF",
|
"editorLink.activeForeground": "#30b4ff",
|
||||||
"editorGroup.border": "#333333",
|
"editorGroup.border": "#333333",
|
||||||
"editorGroup.background": "#212121",
|
"editorGroup.background": "#212121",
|
||||||
"editorIndentGuide.activeBackground": "#707070",
|
"editorIndentGuide.activeBackground": "#707070",
|
||||||
@@ -64,7 +67,8 @@
|
|||||||
"panel.background": "#212121",
|
"panel.background": "#212121",
|
||||||
"panel.border": "#515151",
|
"panel.border": "#515151",
|
||||||
"panelTitle.activeForeground": "#ffffff",
|
"panelTitle.activeForeground": "#ffffff",
|
||||||
"panelTitle.inactiveForeground": "#888888"
|
"panelTitle.inactiveForeground": "#888888",
|
||||||
|
"panelTitle.activeBorder": "#026dc8"
|
||||||
},
|
},
|
||||||
"tokenColors": [
|
"tokenColors": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -5,18 +5,18 @@
|
|||||||
"colors": {
|
"colors": {
|
||||||
// base
|
// base
|
||||||
"foreground": "#4a4a4a",
|
"foreground": "#4a4a4a",
|
||||||
"focusBorder": "#00BCF2",
|
"focusBorder": "#0078d7",
|
||||||
"selection.background": "#C9D0D9",
|
"selection.background": "#c9d0d9",
|
||||||
"widget.shadow": "#666666",
|
"widget.shadow": "#666666",
|
||||||
|
|
||||||
// text colors
|
// text colors
|
||||||
"textLinkForeground": "#3062D6",
|
"textLinkForeground": "#3062d6",
|
||||||
"textLinkActiveForeground": "#3062D6",
|
"textLinkActiveForeground": "#3062d6",
|
||||||
|
|
||||||
//Button control
|
//Button control
|
||||||
"button.background": "#00BCF2",
|
"button.background": "#0078d7cc",
|
||||||
"button.foreground": "#212121",
|
"button.foreground": "#ffffff",
|
||||||
"button.hoverBackground": "#0099BC",
|
"button.hoverBackground": "#0078d7",
|
||||||
|
|
||||||
// TODO add support for these
|
// TODO add support for these
|
||||||
// "button.secondaryBackground": "#c8c8c8",
|
// "button.secondaryBackground": "#c8c8c8",
|
||||||
@@ -25,35 +25,38 @@
|
|||||||
// "button.disabledBackground": "#eaeaea",
|
// "button.disabledBackground": "#eaeaea",
|
||||||
// "button.disabledForeground": "#888888",
|
// "button.disabledForeground": "#888888",
|
||||||
|
|
||||||
|
//Checkbox
|
||||||
|
"checkbox.disabled.foreground": "#888888",
|
||||||
|
|
||||||
//Dropdown Control
|
//Dropdown Control
|
||||||
"dropdown.background": "#fffffe",
|
"dropdown.background": "#ffffff",
|
||||||
"dropdown.foreground": "#4a4a4a",
|
"dropdown.foreground": "#4a4a4a",
|
||||||
"dropdown.border": "#C8C8C8",
|
"dropdown.border": "#c8c8c8",
|
||||||
|
|
||||||
//badge
|
//badge
|
||||||
"badge.background": "#777777",
|
"badge.background": "#777777",
|
||||||
"badge.foreground": "#ffffff",
|
"badge.foreground": "#ffffff",
|
||||||
|
|
||||||
//Input Control
|
//Input Control
|
||||||
"input.background": "#fffffe",
|
"input.background": "#ffffff",
|
||||||
"input.border": "#c8c8c8",
|
"input.border": "#c8c8c8",
|
||||||
"input.disabled.background": "#dcdcdc",
|
"input.disabled.background": "#dcdcdc",
|
||||||
"input.disabled.foreground": "#888888",
|
"input.disabled.foreground": "#888888",
|
||||||
"inputOption.activeBorder": "#666666",
|
"inputOption.activeBorder": "#666666",
|
||||||
"input.placeholderForeground": "#767676",
|
"input.placeholderForeground": "#767676",
|
||||||
"inputValidation.errorBackground": "#ffeaea",
|
"inputValidation.errorBackground": "#ffeaea",
|
||||||
"inputValidation.errorBorder": "#f1897f",
|
"inputValidation.errorBorder": "#b62e00",
|
||||||
|
|
||||||
//List and tree
|
//List and tree
|
||||||
"list.activeSelectionBackground": "#3062d6",
|
"list.activeSelectionBackground": "#3062d6",
|
||||||
"list.hoverBackground": "#dcdcdc",
|
"list.hoverBackground": "#dcdcdc",
|
||||||
"pickerGroup.border": "#00BCF2",
|
"pickerGroup.border": "#0078d7",
|
||||||
|
|
||||||
// Workbench: Activity Bar
|
// Workbench: Activity Bar
|
||||||
"activityBar.background": "#212121",
|
"activityBar.background": "#212121",
|
||||||
|
|
||||||
// Workbench: Side Bar
|
// Workbench: Side Bar
|
||||||
"sideBar.background": "#EAEAEA",
|
"sideBar.background": "#eaeaea",
|
||||||
"editorGroupHeader.tabsBackground": "#f4f4f4",
|
"editorGroupHeader.tabsBackground": "#f4f4f4",
|
||||||
"editor.background": "#fffffe",
|
"editor.background": "#fffffe",
|
||||||
"editor.foreground": "#212121",
|
"editor.foreground": "#212121",
|
||||||
@@ -64,17 +67,18 @@
|
|||||||
"editorIndentGuide.activeBackground": "#939393",
|
"editorIndentGuide.activeBackground": "#939393",
|
||||||
|
|
||||||
// Workbench: Tabs
|
// Workbench: Tabs
|
||||||
"tab.activeBackground": "#FFFFFE",
|
"tab.activeBackground": "#ffffff",
|
||||||
"tab.activeForeground": "#4A4A4A",
|
"tab.activeForeground": "#4a4a4a",
|
||||||
"tab.inactiveBackground": "#f4f4f4",
|
"tab.inactiveBackground": "#f4f4f4",
|
||||||
"tab.inactiveForeground": "#707070",
|
"tab.inactiveForeground": "#707070",
|
||||||
"tab.border": "#EAEAEA",
|
"tab.border": "#eaeaea",
|
||||||
"tab.unfocusedInactiveForeground": "#888888",
|
"tab.unfocusedInactiveForeground": "#888888",
|
||||||
"tab.unfocusedActiveForeground": "#212121",
|
"tab.unfocusedActiveForeground": "#212121",
|
||||||
"panel.background": "#FFFFFE",
|
"panel.background": "#ffffff",
|
||||||
"panel.border": "#C8C8C8",
|
"panel.border": "#c8c8c8",
|
||||||
"panelTitle.activeForeground": "#212121",
|
"panelTitle.activeForeground": "#212121",
|
||||||
"panelTitle.inactiveForeground": "#757575"
|
"panelTitle.inactiveForeground": "#757575",
|
||||||
|
"panelTitle.activeBorder": "#026dc8"
|
||||||
},
|
},
|
||||||
"tokenColors": [
|
"tokenColors": [
|
||||||
{
|
{
|
||||||
|
|||||||
10
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "azuredatastudio",
|
"name": "azuredatastudio",
|
||||||
"version": "1.2.2",
|
"version": "1.3.3",
|
||||||
"distro": "8c3e97e3425cc9814496472ab73e076de2ba99ee",
|
"distro": "8c3e97e3425cc9814496472ab73e076de2ba99ee",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Microsoft Corporation"
|
"name": "Microsoft Corporation"
|
||||||
@@ -37,8 +37,10 @@
|
|||||||
"@angular/router": "~4.1.3",
|
"@angular/router": "~4.1.3",
|
||||||
"@angular/upgrade": "~4.1.3",
|
"@angular/upgrade": "~4.1.3",
|
||||||
"@types/chart.js": "^2.7.31",
|
"@types/chart.js": "^2.7.31",
|
||||||
|
"@types/htmlparser2": "^3.7.31",
|
||||||
"angular2-grid": "2.0.6",
|
"angular2-grid": "2.0.6",
|
||||||
"angular2-slickgrid": "github:Microsoft/angular2-slickgrid#1.4.6",
|
"angular2-slickgrid": "github:Microsoft/angular2-slickgrid#1.4.6",
|
||||||
|
"ansi_up": "^3.0.0",
|
||||||
"applicationinsights": "0.18.0",
|
"applicationinsights": "0.18.0",
|
||||||
"chart.js": "^2.6.0",
|
"chart.js": "^2.6.0",
|
||||||
"fast-plist": "0.1.2",
|
"fast-plist": "0.1.2",
|
||||||
@@ -64,8 +66,9 @@
|
|||||||
"pretty-data": "^0.40.0",
|
"pretty-data": "^0.40.0",
|
||||||
"reflect-metadata": "^0.1.8",
|
"reflect-metadata": "^0.1.8",
|
||||||
"rxjs": "5.4.0",
|
"rxjs": "5.4.0",
|
||||||
|
"sanitize-html": "^1.19.1",
|
||||||
"semver": "^5.5.0",
|
"semver": "^5.5.0",
|
||||||
"slickgrid": "github:anthonydresser/SlickGrid#2.3.28",
|
"slickgrid": "github:anthonydresser/SlickGrid#2.3.29",
|
||||||
"spdlog": "0.7.1",
|
"spdlog": "0.7.1",
|
||||||
"sudo-prompt": "8.2.0",
|
"sudo-prompt": "8.2.0",
|
||||||
"svg.js": "^2.2.5",
|
"svg.js": "^2.2.5",
|
||||||
@@ -85,6 +88,7 @@
|
|||||||
"@types/keytar": "4.0.1",
|
"@types/keytar": "4.0.1",
|
||||||
"@types/minimist": "1.2.0",
|
"@types/minimist": "1.2.0",
|
||||||
"@types/mocha": "2.2.39",
|
"@types/mocha": "2.2.39",
|
||||||
|
"@types/sanitize-html": "^1.18.2",
|
||||||
"@types/semver": "5.3.30",
|
"@types/semver": "5.3.30",
|
||||||
"@types/sinon": "1.16.34",
|
"@types/sinon": "1.16.34",
|
||||||
"@types/winreg": "^1.2.30",
|
"@types/winreg": "^1.2.30",
|
||||||
@@ -98,7 +102,7 @@
|
|||||||
"documentdb": "^1.5.1",
|
"documentdb": "^1.5.1",
|
||||||
"electron-mksnapshot": "~1.7.0",
|
"electron-mksnapshot": "~1.7.0",
|
||||||
"eslint": "^3.4.0",
|
"eslint": "^3.4.0",
|
||||||
"event-stream": "^3.1.7",
|
"event-stream": "^3.3.4",
|
||||||
"express": "^4.13.1",
|
"express": "^4.13.1",
|
||||||
"glob": "^5.0.13",
|
"glob": "^5.0.13",
|
||||||
"gulp": "^3.9.1",
|
"gulp": "^3.9.1",
|
||||||
|
|||||||
@@ -611,7 +611,7 @@
|
|||||||
</body></file>
|
</body></file>
|
||||||
<file original="src/sql/parts/connection/common/connectionActions" source-language="en" datatype="plaintext"><body>
|
<file original="src/sql/parts/connection/common/connectionActions" source-language="en" datatype="plaintext"><body>
|
||||||
<trans-unit id="ClearRecentlyUsedLabel">
|
<trans-unit id="ClearRecentlyUsedLabel">
|
||||||
<source xml:lang="en">Clear Recent Connections List</source>
|
<source xml:lang="en">Clear List</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="ClearedRecentConnections">
|
<trans-unit id="ClearedRecentConnections">
|
||||||
<source xml:lang="en">Recent connections list cleared</source>
|
<source xml:lang="en">Recent connections list cleared</source>
|
||||||
@@ -1039,10 +1039,10 @@
|
|||||||
<source xml:lang="en">Connection</source>
|
<source xml:lang="en">Connection</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="recentConnectionTitle">
|
<trans-unit id="recentConnectionTitle">
|
||||||
<source xml:lang="en">Recent connections</source>
|
<source xml:lang="en">Recent Connections</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="savedConnectionTitle">
|
<trans-unit id="savedConnectionTitle">
|
||||||
<source xml:lang="en">Saved connections</source>
|
<source xml:lang="en">Saved Connections</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="connectType">
|
<trans-unit id="connectType">
|
||||||
<source xml:lang="en">Connection type</source>
|
<source xml:lang="en">Connection type</source>
|
||||||
@@ -1520,9 +1520,6 @@
|
|||||||
</trans-unit>
|
</trans-unit>
|
||||||
</body></file>
|
</body></file>
|
||||||
<file original="src/sql/parts/profiler/contrib/profilerActions" source-language="en" datatype="plaintext"><body>
|
<file original="src/sql/parts/profiler/contrib/profilerActions" source-language="en" datatype="plaintext"><body>
|
||||||
<trans-unit id="profiler.connect">
|
|
||||||
<source xml:lang="en">Connect</source>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="profilerAction.disconnect">
|
<trans-unit id="profilerAction.disconnect">
|
||||||
<source xml:lang="en">Disconnect</source>
|
<source xml:lang="en">Disconnect</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -1533,16 +1530,13 @@
|
|||||||
<source xml:lang="en">Start</source>
|
<source xml:lang="en">Start</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="create">
|
<trans-unit id="create">
|
||||||
<source xml:lang="en">Create</source>
|
<source xml:lang="en">New Session</source>
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="profiler.capture">
|
|
||||||
<source xml:lang="en">Pause Capture</source>
|
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="profilerAction.resumeCapture">
|
<trans-unit id="profilerAction.resumeCapture">
|
||||||
<source xml:lang="en">Resume Capture</source>
|
<source xml:lang="en">Resume</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="profilerAction.pauseCapture">
|
<trans-unit id="profilerAction.pauseCapture">
|
||||||
<source xml:lang="en">Pause Capture</source>
|
<source xml:lang="en">Pause</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="profilerStop.stop">
|
<trans-unit id="profilerStop.stop">
|
||||||
<source xml:lang="en">Stop</source>
|
<source xml:lang="en">Stop</source>
|
||||||
@@ -1550,9 +1544,6 @@
|
|||||||
<trans-unit id="profiler.clear">
|
<trans-unit id="profiler.clear">
|
||||||
<source xml:lang="en">Clear Data</source>
|
<source xml:lang="en">Clear Data</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="profiler.autoscrollOn">
|
|
||||||
<source xml:lang="en">Auto Scroll: On</source>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="profilerAction.autoscrollOn">
|
<trans-unit id="profilerAction.autoscrollOn">
|
||||||
<source xml:lang="en">Auto Scroll: On</source>
|
<source xml:lang="en">Auto Scroll: On</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -1572,7 +1563,7 @@
|
|||||||
<source xml:lang="en">Find Previous String</source>
|
<source xml:lang="en">Find Previous String</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="profilerAction.newProfiler">
|
<trans-unit id="profilerAction.newProfiler">
|
||||||
<source xml:lang="en">New Profiler</source>
|
<source xml:lang="en">Launch Profiler</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
</body></file>
|
</body></file>
|
||||||
<file original="src/sql/base/browser/ui/selectBox/selectBox" source-language="en" datatype="plaintext"><body>
|
<file original="src/sql/base/browser/ui/selectBox/selectBox" source-language="en" datatype="plaintext"><body>
|
||||||
@@ -1644,7 +1635,7 @@
|
|||||||
</body></file>
|
</body></file>
|
||||||
<file original="src/sql/parts/connection/connectionDialog/advancedPropertiesController" source-language="en" datatype="plaintext"><body>
|
<file original="src/sql/parts/connection/connectionDialog/advancedPropertiesController" source-language="en" datatype="plaintext"><body>
|
||||||
<trans-unit id="connectionAdvancedProperties">
|
<trans-unit id="connectionAdvancedProperties">
|
||||||
<source xml:lang="en">Advanced properties</source>
|
<source xml:lang="en">Advanced Properties</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="advancedProperties.discard">
|
<trans-unit id="advancedProperties.discard">
|
||||||
<source xml:lang="en">Discard</source>
|
<source xml:lang="en">Discard</source>
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
<file original="extensions/profiler/client\out/dialogs/profilerCreateSessionDialog" source-language="en" datatype="plaintext"><body>
|
<file original="extensions/profiler/client\out/dialogs/profilerCreateSessionDialog" source-language="en" datatype="plaintext"><body>
|
||||||
<trans-unit id="createSessionDialog.newSession">
|
|
||||||
<source xml:lang="en">New Session</source>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="createSessionDialog.cancel">
|
<trans-unit id="createSessionDialog.cancel">
|
||||||
<source xml:lang="en">Cancel</source>
|
<source xml:lang="en">Cancel</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -12,12 +12,18 @@ set CODE=".build\electron\%NAMESHORT%"
|
|||||||
|
|
||||||
rem TFS Builds
|
rem TFS Builds
|
||||||
if not "%BUILD_BUILDID%" == "" (
|
if not "%BUILD_BUILDID%" == "" (
|
||||||
|
if not "%ADD_REPORTER%" == "" (
|
||||||
|
%CODE% .\node_modules\mocha\bin\_mocha --reporter mocha-junit-reporter %*
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%ADD_REPORTER%" == "" (
|
||||||
%CODE% .\node_modules\mocha\bin\_mocha %*
|
%CODE% .\node_modules\mocha\bin\_mocha %*
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|
||||||
rem Otherwise
|
rem Otherwise
|
||||||
if "%BUILD_BUILDID%" == "" (
|
if "%BUILD_BUILDID%" == "" (
|
||||||
%CODE% .\node_modules\mocha\bin\_mocha --reporter dot %*
|
%CODE% .\node_modules\mocha\bin\_mocha --reporter mocha-junit-reporter %*
|
||||||
)
|
)
|
||||||
popd
|
popd
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
|
||||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
if [[ "$OSTYPE" == "darwin"* ]] || [[ "$AGENT_OS" == "Darwin"* ]]; then
|
||||||
realpath() { [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"; }
|
realpath() { [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"; }
|
||||||
ROOT=$(dirname $(dirname $(realpath "$0")))
|
ROOT=$(dirname $(dirname $(realpath "$0")))
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@ fi
|
|||||||
|
|
||||||
cd $ROOT
|
cd $ROOT
|
||||||
|
|
||||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
if [[ "$OSTYPE" == "darwin"* ]] || [[ "$AGENT_OS" == "Darwin"* ]]; then
|
||||||
NAME=`node -p "require('./product.json').nameLong"`
|
NAME=`node -p "require('./product.json').nameLong"`
|
||||||
CODE="./.build/electron/$NAME.app/Contents/MacOS/Electron"
|
CODE="./.build/electron/$NAME.app/Contents/MacOS/Electron"
|
||||||
else
|
else
|
||||||
@@ -30,7 +30,7 @@ node build/lib/electron.js || ./node_modules/.bin/gulp electron
|
|||||||
|
|
||||||
# Unit Tests
|
# Unit Tests
|
||||||
export ELECTRON_RUN_AS_NODE=1
|
export ELECTRON_RUN_AS_NODE=1
|
||||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
if [[ "$OSTYPE" == "darwin"* ]] || [[ "$AGENT_OS" == "Darwin"* ]]; then
|
||||||
cd $ROOT ; ulimit -n 4096 ; \
|
cd $ROOT ; ulimit -n 4096 ; \
|
||||||
"$CODE" \
|
"$CODE" \
|
||||||
node_modules/mocha/bin/_mocha "$@"
|
node_modules/mocha/bin/_mocha "$@"
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
import { Color } from 'vs/base/common/color';
|
||||||
import { Event, Emitter } from 'vs/base/common/event';
|
import { Event, Emitter } from 'vs/base/common/event';
|
||||||
import { KeyCode } from 'vs/base/common/keyCodes';
|
import { KeyCode } from 'vs/base/common/keyCodes';
|
||||||
import { Widget } from 'vs/base/browser/ui/widget';
|
import { Widget } from 'vs/base/browser/ui/widget';
|
||||||
@@ -15,9 +16,14 @@ export interface ICheckboxOptions {
|
|||||||
ariaLabel?: string;
|
ariaLabel?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface ICheckboxStyles {
|
||||||
|
disabledCheckboxForeground?: Color;
|
||||||
|
}
|
||||||
|
|
||||||
export class Checkbox extends Widget {
|
export class Checkbox extends Widget {
|
||||||
private _el: HTMLInputElement;
|
private _el: HTMLInputElement;
|
||||||
private _label: HTMLSpanElement;
|
private _label: HTMLSpanElement;
|
||||||
|
private disabledCheckboxForeground: Color;
|
||||||
|
|
||||||
private _onChange = new Emitter<boolean>();
|
private _onChange = new Emitter<boolean>();
|
||||||
public readonly onChange: Event<boolean> = this._onChange.event;
|
public readonly onChange: Event<boolean> = this._onChange.event;
|
||||||
@@ -65,6 +71,7 @@ export class Checkbox extends Widget {
|
|||||||
|
|
||||||
public set enabled(val: boolean) {
|
public set enabled(val: boolean) {
|
||||||
this._el.disabled = !val;
|
this._el.disabled = !val;
|
||||||
|
this.updateStyle();
|
||||||
}
|
}
|
||||||
|
|
||||||
public get enabled(): boolean {
|
public get enabled(): boolean {
|
||||||
@@ -90,4 +97,13 @@ export class Checkbox extends Widget {
|
|||||||
public enable(): void {
|
public enable(): void {
|
||||||
this.enabled = true;
|
this.enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public style(styles: ICheckboxStyles): void {
|
||||||
|
this.disabledCheckboxForeground = styles.disabledCheckboxForeground;
|
||||||
|
this.updateStyle();
|
||||||
|
}
|
||||||
|
|
||||||
|
private updateStyle(): void {
|
||||||
|
this._label.style.color = !this.enabled && this.disabledCheckboxForeground ? this.disabledCheckboxForeground.toString() : 'inherit';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,6 +56,7 @@
|
|||||||
|
|
||||||
.modal .modal-title {
|
.modal .modal-title {
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
.modal .modal-title-icon {
|
.modal .modal-title-icon {
|
||||||
@@ -66,14 +67,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.monaco-shell .modal.flyout-dialog .modal-body,
|
.monaco-shell .modal.flyout-dialog .modal-body,
|
||||||
.monaco-shell .modal.flyout-dialog .angular-modal-body {
|
.monaco-shell .modal.flyout-dialog .angular-modal-body,
|
||||||
margin-bottom: auto;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Style for body and footer in modal dialog. This should be applied to dialog created with angular component. */
|
/* Style for body and footer in modal dialog. This should be applied to dialog created with angular component. */
|
||||||
.monaco-shell .modal.flyout-dialog .modal-body-and-footer {
|
.monaco-shell .modal.flyout-dialog .modal-body-and-footer {
|
||||||
height: 100%;
|
flex: 1 1;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* modl body content style(excluding dialogErrorMessage section) for angulr component dialog */
|
/* modl body content style(excluding dialogErrorMessage section) for angulr component dialog */
|
||||||
@@ -85,6 +83,8 @@
|
|||||||
|
|
||||||
.modal.flyout-dialog .angular-form {
|
.modal.flyout-dialog .angular-form {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
.modal.flyout-dialog .dialog-label {
|
.modal.flyout-dialog .dialog-label {
|
||||||
@@ -105,10 +105,6 @@
|
|||||||
padding-left: 4px;
|
padding-left: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.modal.flyout-dialog .modal-body {
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.vs-dark.monaco-shell .modal.flyout-dialog .input {
|
.vs-dark.monaco-shell .modal.flyout-dialog .input {
|
||||||
background-color: #3C3C3C;
|
background-color: #3C3C3C;
|
||||||
}
|
}
|
||||||
@@ -152,7 +148,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.modal .footer-button {
|
.modal .footer-button {
|
||||||
margin-right: 5px;
|
margin-left: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.modal .right-footer .footer-button:last-of-type {
|
.modal .right-footer .footer-button:last-of-type {
|
||||||
@@ -187,7 +183,6 @@
|
|||||||
|
|
||||||
.modal.flyout-dialog .dialog-message-header {
|
.modal.flyout-dialog .dialog-message-header {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
overflow-y: hidden;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
}
|
}
|
||||||
@@ -241,8 +236,8 @@
|
|||||||
|
|
||||||
.modal.flyout-dialog .dialog-message-detail {
|
.modal.flyout-dialog .dialog-message-detail {
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
white-space: normal;
|
white-space: pre-wrap;
|
||||||
-webkit-user-select: text;
|
user-select: text;
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,11 +20,34 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.optionsDialog-options-groups {
|
.optionsDialog-options-groups {
|
||||||
padding: 15px;
|
margin-top: 10px;
|
||||||
height: calc(100% - 150px);
|
flex: 1 1;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.optionsDialog-options-groups {
|
||||||
|
margin: 10px 0px;
|
||||||
|
flex: 1 1;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vs .optionsDialog-options-groups {
|
||||||
|
box-shadow: 0 1px 4px 1px rgba(220, 220, 220, 0.71);
|
||||||
|
}
|
||||||
|
|
||||||
|
.vs-dark .optionsDialog-options-groups {
|
||||||
|
box-shadow: 0 4px 5px 0px rgba(0, 0, 0, 0.71);
|
||||||
|
}
|
||||||
|
|
||||||
|
.optionsDialog-options-groups .split-view-view .header {
|
||||||
|
padding-left: 28px !important;
|
||||||
|
background-position-x: 8px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.optionsDialog-options-groups .split-view-view .body {
|
||||||
|
padding-left: 5px !important;
|
||||||
|
}
|
||||||
|
|
||||||
.backButtonIcon {
|
.backButtonIcon {
|
||||||
content: url('back.svg');
|
content: url('back.svg');
|
||||||
width: 20px;
|
width: 20px;
|
||||||
@@ -33,21 +56,42 @@
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.vs-dark.monaco-shell .backButtonIcon {
|
.hc-black .backButtonIcon,
|
||||||
|
.vs-dark .backButtonIcon {
|
||||||
content: url('back_inverse.svg');
|
content: url('back_inverse.svg');
|
||||||
}
|
}
|
||||||
|
|
||||||
.optionsDialog-description {
|
.optionsDialog-description {
|
||||||
padding: 15px;
|
height: 90px;
|
||||||
|
margin: 15px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.optionsDialog-description .modal-title {
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 2px center;
|
||||||
|
padding-left: 25px;
|
||||||
|
background-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vs .optionsDialog-description .modal-title {
|
||||||
|
background-image: url('info_notification.svg')
|
||||||
|
}
|
||||||
|
|
||||||
|
.vs-dark .optionsDialog-description .modal-title,
|
||||||
|
.hc-black .optionsDialog-description .modal-title {
|
||||||
|
background-image: url('info_notification_inverse.svg')
|
||||||
|
}
|
||||||
|
|
||||||
.optionsDialog-options {
|
.optionsDialog-options {
|
||||||
height: calc(100% - 30px);
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
.optionsDialog-description-content {
|
.optionsDialog-description-content {
|
||||||
padding: 10px;
|
padding-top: 10px;
|
||||||
|
padding-left: 25px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.optionsDialog-table{
|
.optionsDialog-table{
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import { IThemeService } from 'vs/platform/theme/common/themeService';
|
|||||||
|
|
||||||
export const MODAL_SHOWING_KEY = 'modalShowing';
|
export const MODAL_SHOWING_KEY = 'modalShowing';
|
||||||
export const MODAL_SHOWING_CONTEXT = new RawContextKey<Array<string>>(MODAL_SHOWING_KEY, []);
|
export const MODAL_SHOWING_CONTEXT = new RawContextKey<Array<string>>(MODAL_SHOWING_KEY, []);
|
||||||
const INFO_ALT_TEXT = localize('infoAltText', 'Infomation');
|
const INFO_ALT_TEXT = localize('infoAltText', 'Information');
|
||||||
const WARNING_ALT_TEXT = localize('warningAltText', 'Warning');
|
const WARNING_ALT_TEXT = localize('warningAltText', 'Warning');
|
||||||
const ERROR_ALT_TEXT = localize('errorAltText', 'Error');
|
const ERROR_ALT_TEXT = localize('errorAltText', 'Error');
|
||||||
const SHOW_DETAILS_TEXT = localize('showMessageDetails', 'Show Details');
|
const SHOW_DETAILS_TEXT = localize('showMessageDetails', 'Show Details');
|
||||||
@@ -72,8 +72,8 @@ const defaultOptions: IModalOptions = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export abstract class Modal extends Disposable implements IThemable {
|
export abstract class Modal extends Disposable implements IThemable {
|
||||||
|
protected _useDefaultMessageBoxLocation: boolean = true;
|
||||||
private _messageElement: HTMLElement;
|
protected _messageElement: HTMLElement;
|
||||||
private _messageIcon: HTMLElement;
|
private _messageIcon: HTMLElement;
|
||||||
private _messageSeverity: Builder;
|
private _messageSeverity: Builder;
|
||||||
private _messageSummary: Builder;
|
private _messageSummary: Builder;
|
||||||
@@ -253,8 +253,10 @@ export abstract class Modal extends Disposable implements IThemable {
|
|||||||
this._messageElement = this._modalMessageSection.getHTMLElement();
|
this._messageElement = this._modalMessageSection.getHTMLElement();
|
||||||
this.updateElementVisibility(this._messageElement, false);
|
this.updateElementVisibility(this._messageElement, false);
|
||||||
|
|
||||||
|
if (this._useDefaultMessageBoxLocation) {
|
||||||
parts.push(this._messageElement);
|
parts.push(this._messageElement);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// This modal body section refers to the body of of the dialog
|
// This modal body section refers to the body of of the dialog
|
||||||
let body: Builder;
|
let body: Builder;
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ export class OptionsDialog extends Modal {
|
|||||||
});
|
});
|
||||||
|
|
||||||
let builder = new Builder(this._body);
|
let builder = new Builder(this._body);
|
||||||
builder.div({ class: 'Connection-divider' }, (dividerContainer) => {
|
builder.div({}, (dividerContainer) => {
|
||||||
this._dividerBuilder = dividerContainer;
|
this._dividerBuilder = dividerContainer;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -46,9 +46,9 @@ panel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.tabbedPanel .tabList .tab .tabLabel {
|
.tabbedPanel .tabList .tab .tabLabel {
|
||||||
text-transform: uppercase;
|
font-size: 14px;
|
||||||
font-size: 13px;
|
|
||||||
padding-bottom: 4px;
|
padding-bottom: 4px;
|
||||||
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tabbedPanel.vertical .tabList .tab .tabLabel {
|
.tabbedPanel.vertical .tabList .tab .tabLabel {
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ export interface IPanelTab {
|
|||||||
interface IInternalPanelTab extends IPanelTab {
|
interface IInternalPanelTab extends IPanelTab {
|
||||||
header: HTMLElement;
|
header: HTMLElement;
|
||||||
label: HTMLElement;
|
label: HTMLElement;
|
||||||
dispose(): void;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultOptions: IPanelOptions = {
|
const defaultOptions: IPanelOptions = {
|
||||||
@@ -143,8 +142,6 @@ export class TabbedPanel extends Disposable implements IThemable {
|
|||||||
this.tabList.appendChild(tabHeaderElement);
|
this.tabList.appendChild(tabHeaderElement);
|
||||||
tab.header = tabHeaderElement;
|
tab.header = tabHeaderElement;
|
||||||
tab.label = tabLabel;
|
tab.label = tabLabel;
|
||||||
tab.dispose = () => { };
|
|
||||||
this._register(tab);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public showTab(id: PanelTabIdentifier): void {
|
public showTab(id: PanelTabIdentifier): void {
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ registerThemingParticipant((theme: ITheme, collector: ICssStyleCollector) => {
|
|||||||
.tabbedPanel > .title .tabList .tab .tabLabel.active {
|
.tabbedPanel > .title .tabList .tab .tabLabel.active {
|
||||||
color: ${titleActive};
|
color: ${titleActive};
|
||||||
border-bottom-color: ${titleActiveBorder};
|
border-bottom-color: ${titleActiveBorder};
|
||||||
|
border-bottom-width: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tabbedPanel > .title .tabList .tab-header.active {
|
.tabbedPanel > .title .tabList .tab-header.active {
|
||||||
|
|||||||
@@ -28,8 +28,11 @@ export class RadioButton extends Widget {
|
|||||||
super();
|
super();
|
||||||
this.inputElement = document.createElement('input');
|
this.inputElement = document.createElement('input');
|
||||||
this.inputElement.type = 'radio';
|
this.inputElement.type = 'radio';
|
||||||
|
this.inputElement.style.verticalAlign = 'middle';
|
||||||
|
this.inputElement.style.margin = '3px';
|
||||||
|
|
||||||
this._label = document.createElement('span');
|
this._label = document.createElement('span');
|
||||||
|
this._label.style.verticalAlign = 'middle';
|
||||||
|
|
||||||
this.label = opts.label;
|
this.label = opts.label;
|
||||||
this.enabled = opts.enabled || true;
|
this.enabled = opts.enabled || true;
|
||||||
|
|||||||
@@ -17,11 +17,13 @@ import { ScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElemen
|
|||||||
import { HeightMap, IView as HeightIView, IViewItem as HeightIViewItem } from './heightMap';
|
import { HeightMap, IView as HeightIView, IViewItem as HeightIViewItem } from './heightMap';
|
||||||
import { ArrayIterator } from 'vs/base/common/iterator';
|
import { ArrayIterator } from 'vs/base/common/iterator';
|
||||||
import { mixin } from 'vs/base/common/objects';
|
import { mixin } from 'vs/base/common/objects';
|
||||||
|
import { ScrollbarVisibility } from 'vs/base/common/scrollable';
|
||||||
export { Orientation } from 'vs/base/browser/ui/sash/sash';
|
export { Orientation } from 'vs/base/browser/ui/sash/sash';
|
||||||
|
|
||||||
export interface ISplitViewOptions {
|
export interface ISplitViewOptions {
|
||||||
orientation?: Orientation; // default Orientation.VERTICAL
|
orientation?: Orientation; // default Orientation.VERTICAL
|
||||||
enableResizing?: boolean;
|
enableResizing?: boolean;
|
||||||
|
verticalScrollbarVisibility?: ScrollbarVisibility;
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultOptions: ISplitViewOptions = {
|
const defaultOptions: ISplitViewOptions = {
|
||||||
@@ -127,7 +129,7 @@ export class ScrollableSplitView extends HeightMap implements IDisposable {
|
|||||||
this.options = mixin(options, defaultOptions, false);
|
this.options = mixin(options, defaultOptions, false);
|
||||||
|
|
||||||
this.el = document.createElement('div');
|
this.el = document.createElement('div');
|
||||||
this.scrollable = new ScrollableElement(this.el, {});
|
this.scrollable = new ScrollableElement(this.el, { vertical: options.verticalScrollbarVisibility });
|
||||||
debounceEvent(this.scrollable.onScroll, (l, e) => e, 25)(e => {
|
debounceEvent(this.scrollable.onScroll, (l, e) => e, 25)(e => {
|
||||||
this.render(e.scrollTop, e.height);
|
this.render(e.scrollTop, e.height);
|
||||||
this.relayout();
|
this.relayout();
|
||||||
|
|||||||
10
src/sql/base/browser/ui/selectBox/media/selectBox.css
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
.labelOnTopContainer {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.labelOnLeftContainer {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
@@ -4,6 +4,8 @@
|
|||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
import 'vs/css!./media/selectBox';
|
||||||
|
|
||||||
import { SelectBox as vsSelectBox, ISelectBoxStyles as vsISelectBoxStyles, ISelectBoxOptions } from 'vs/base/browser/ui/selectBox/selectBox';
|
import { SelectBox as vsSelectBox, ISelectBoxStyles as vsISelectBoxStyles, ISelectBoxOptions } from 'vs/base/browser/ui/selectBox/selectBox';
|
||||||
import { Color } from 'vs/base/common/color';
|
import { Color } from 'vs/base/common/color';
|
||||||
import { IContextViewProvider, AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview';
|
import { IContextViewProvider, AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview';
|
||||||
@@ -30,6 +32,7 @@ export class SelectBox extends vsSelectBox {
|
|||||||
private _optionsDictionary;
|
private _optionsDictionary;
|
||||||
private _dialogOptions: string[];
|
private _dialogOptions: string[];
|
||||||
private _selectedOption: string;
|
private _selectedOption: string;
|
||||||
|
private _selectBoxOptions: ISelectBoxOptions;
|
||||||
private enabledSelectBackground: Color;
|
private enabledSelectBackground: Color;
|
||||||
private enabledSelectForeground: Color;
|
private enabledSelectForeground: Color;
|
||||||
private enabledSelectBorder: Color;
|
private enabledSelectBorder: Color;
|
||||||
@@ -72,6 +75,7 @@ export class SelectBox extends vsSelectBox {
|
|||||||
|
|
||||||
// explicitly set the accessible role so that the screen readers can read the control type properly
|
// explicitly set the accessible role so that the screen readers can read the control type properly
|
||||||
this.selectElement.setAttribute('role', 'combobox');
|
this.selectElement.setAttribute('role', 'combobox');
|
||||||
|
this._selectBoxOptions = selectBoxOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
public style(styles: ISelectBoxStyles): void {
|
public style(styles: ISelectBoxStyles): void {
|
||||||
@@ -118,6 +122,10 @@ export class SelectBox extends vsSelectBox {
|
|||||||
return this._selectedOption;
|
return this._selectedOption;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public get values(): string[] {
|
||||||
|
return this._dialogOptions;
|
||||||
|
}
|
||||||
|
|
||||||
public enable(): void {
|
public enable(): void {
|
||||||
this.selectElement.disabled = false;
|
this.selectElement.disabled = false;
|
||||||
this.selectBackground = this.enabledSelectBackground;
|
this.selectBackground = this.enabledSelectBackground;
|
||||||
@@ -226,4 +234,34 @@ export class SelectBox extends vsSelectBox {
|
|||||||
default: return { border: this.inputValidationErrorBorder, background: this.inputValidationErrorBackground };
|
default: return { border: this.inputValidationErrorBorder, background: this.inputValidationErrorBackground };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public render(container: HTMLElement): void {
|
||||||
|
let selectOptions: ISelectBoxOptionsWithLabel = this._selectBoxOptions as ISelectBoxOptionsWithLabel;
|
||||||
|
|
||||||
|
if (selectOptions && selectOptions.labelText && selectOptions.labelText !== undefined) {
|
||||||
|
let outerContainer = document.createElement('div');
|
||||||
|
let selectContainer = document.createElement('div');
|
||||||
|
|
||||||
|
outerContainer.className = selectOptions.labelOnTop ? 'labelOnTopContainer' : 'labelOnLeftContainer';
|
||||||
|
|
||||||
|
let labelText = document.createElement('div');
|
||||||
|
labelText.className = 'action-item-label';
|
||||||
|
labelText.innerHTML = selectOptions.labelText;
|
||||||
|
|
||||||
|
container.appendChild(outerContainer);
|
||||||
|
outerContainer.appendChild(labelText);
|
||||||
|
outerContainer.appendChild(selectContainer);
|
||||||
|
|
||||||
|
super.render(selectContainer);
|
||||||
|
this.selectElement.classList.add('action-item-label');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
super.render(container);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ISelectBoxOptionsWithLabel extends ISelectBoxOptions {
|
||||||
|
labelText?: string;
|
||||||
|
labelOnTop?: boolean;
|
||||||
}
|
}
|
||||||
@@ -89,10 +89,6 @@
|
|||||||
-moz-transition-property: width;
|
-moz-transition-property: width;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hc-black .split-view-view .action-label {
|
|
||||||
background: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hc-black .split-view-view > .header .action-label:before {
|
.hc-black .split-view-view > .header .action-label:before {
|
||||||
top: 4px !important;
|
top: 4px !important;
|
||||||
}
|
}
|
||||||
@@ -3,67 +3,64 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
import { IDisposableDataProvider } from 'sql/base/browser/ui/table/interfaces';
|
||||||
|
|
||||||
export interface IObservableCollection<T> {
|
export interface IObservableCollection<T> {
|
||||||
getLength(): number;
|
getLength(): number;
|
||||||
at(index: number): T;
|
at(index: number): T;
|
||||||
getRange(start: number, end: number): T[];
|
getRange(start: number, end: number): T[];
|
||||||
setCollectionChangedCallback(callback: (change: CollectionChange, startIndex: number, count: number) => void): void;
|
setCollectionChangedCallback(callback: (startIndex: number, count: number) => void): void;
|
||||||
}
|
setLength(number): void;
|
||||||
|
dispose(): void;
|
||||||
export interface IGridDataRow {
|
|
||||||
row?: number;
|
|
||||||
values: any[];
|
|
||||||
}
|
|
||||||
|
|
||||||
export enum CollectionChange {
|
|
||||||
ItemsReplaced
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class LoadCancellationToken {
|
class LoadCancellationToken {
|
||||||
isCancelled: boolean;
|
isCancelled: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
class DataWindow<TData> {
|
class DataWindow<T> {
|
||||||
private _dataSourceLength: number;
|
private _data: T[];
|
||||||
private _data: TData[];
|
|
||||||
private _length: number = 0;
|
private _length: number = 0;
|
||||||
private _offsetFromDataSource: number = -1;
|
private _offsetFromDataSource: number = -1;
|
||||||
|
|
||||||
private loadFunction: (offset: number, count: number) => Thenable<TData[]>;
|
|
||||||
private lastLoadCancellationToken: LoadCancellationToken;
|
private lastLoadCancellationToken: LoadCancellationToken;
|
||||||
private loadCompleteCallback: (start: number, end: number) => void;
|
|
||||||
private placeholderItemGenerator: (index: number) => TData;
|
|
||||||
|
|
||||||
constructor(dataSourceLength: number,
|
constructor(
|
||||||
loadFunction: (offset: number, count: number) => Thenable<TData[]>,
|
private loadFunction: (offset: number, count: number) => Thenable<T[]>,
|
||||||
placeholderItemGenerator: (index: number) => TData,
|
private placeholderItemGenerator: (index: number) => T,
|
||||||
loadCompleteCallback: (start: number, end: number) => void) {
|
private loadCompleteCallback: (start: number, end: number) => void
|
||||||
this._dataSourceLength = dataSourceLength;
|
) { }
|
||||||
this.loadFunction = loadFunction;
|
|
||||||
this.placeholderItemGenerator = placeholderItemGenerator;
|
dispose() {
|
||||||
this.loadCompleteCallback = loadCompleteCallback;
|
this._data = undefined;
|
||||||
|
this.loadFunction = undefined;
|
||||||
|
this.placeholderItemGenerator = undefined;
|
||||||
|
this.loadCompleteCallback = undefined;
|
||||||
|
if (this.lastLoadCancellationToken) {
|
||||||
|
this.lastLoadCancellationToken.isCancelled = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getStartIndex(): number {
|
public getStartIndex(): number {
|
||||||
return this._offsetFromDataSource;
|
return this._offsetFromDataSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
getEndIndex(): number {
|
public getEndIndex(): number {
|
||||||
return this._offsetFromDataSource + this._length;
|
return this._offsetFromDataSource + this._length;
|
||||||
}
|
}
|
||||||
|
|
||||||
contains(dataSourceIndex: number): boolean {
|
public contains(dataSourceIndex: number): boolean {
|
||||||
return dataSourceIndex >= this.getStartIndex() && dataSourceIndex < this.getEndIndex();
|
return dataSourceIndex >= this.getStartIndex() && dataSourceIndex < this.getEndIndex();
|
||||||
}
|
}
|
||||||
|
|
||||||
getItem(index: number): TData {
|
public getItem(index: number): T {
|
||||||
if (!this._data) {
|
if (!this._data) {
|
||||||
return this.placeholderItemGenerator(index);
|
return this.placeholderItemGenerator(index);
|
||||||
}
|
}
|
||||||
return this._data[index - this._offsetFromDataSource];
|
return this._data[index - this._offsetFromDataSource];
|
||||||
}
|
}
|
||||||
|
|
||||||
positionWindow(offset: number, length: number): void {
|
public positionWindow(offset: number, length: number): void {
|
||||||
this._offsetFromDataSource = offset;
|
this._offsetFromDataSource = offset;
|
||||||
this._length = length;
|
this._length = length;
|
||||||
this._data = undefined;
|
this._data = undefined;
|
||||||
@@ -76,10 +73,9 @@ class DataWindow<TData> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let cancellationToken = new LoadCancellationToken();
|
this.lastLoadCancellationToken = new LoadCancellationToken();
|
||||||
this.lastLoadCancellationToken = cancellationToken;
|
|
||||||
this.loadFunction(offset, length).then(data => {
|
this.loadFunction(offset, length).then(data => {
|
||||||
if (!cancellationToken.isCancelled) {
|
if (!this.lastLoadCancellationToken.isCancelled) {
|
||||||
this._data = data;
|
this._data = data;
|
||||||
this.loadCompleteCallback(this._offsetFromDataSource, this._offsetFromDataSource + this._length);
|
this.loadCompleteCallback(this._offsetFromDataSource, this._offsetFromDataSource + this._length);
|
||||||
}
|
}
|
||||||
@@ -87,47 +83,53 @@ class DataWindow<TData> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class VirtualizedCollection<TData> implements IObservableCollection<TData> {
|
export class VirtualizedCollection<T extends Slick.SlickData> implements IObservableCollection<T> {
|
||||||
|
private _bufferWindowBefore: DataWindow<T>;
|
||||||
|
private _window: DataWindow<T>;
|
||||||
|
private _bufferWindowAfter: DataWindow<T>;
|
||||||
|
|
||||||
private _length: number;
|
private collectionChangedCallback: (startIndex: number, count: number) => void;
|
||||||
private _windowSize: number;
|
|
||||||
private _bufferWindowBefore: DataWindow<TData>;
|
|
||||||
private _window: DataWindow<TData>;
|
|
||||||
private _bufferWindowAfter: DataWindow<TData>;
|
|
||||||
|
|
||||||
private collectionChangedCallback: (change: CollectionChange, startIndex: number, count: number) => void;
|
|
||||||
|
|
||||||
constructor(windowSize: number,
|
|
||||||
length: number,
|
|
||||||
loadFn: (offset: number, count: number) => Thenable<TData[]>,
|
|
||||||
private _placeHolderGenerator: (index: number) => TData) {
|
|
||||||
this._windowSize = windowSize;
|
|
||||||
this._length = length;
|
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private readonly windowSize: number,
|
||||||
|
private placeHolderGenerator: (index: number) => T,
|
||||||
|
private length: number,
|
||||||
|
loadFn: (offset: number, count: number) => Thenable<T[]>
|
||||||
|
) {
|
||||||
let loadCompleteCallback = (start: number, end: number) => {
|
let loadCompleteCallback = (start: number, end: number) => {
|
||||||
if (this.collectionChangedCallback) {
|
if (this.collectionChangedCallback) {
|
||||||
this.collectionChangedCallback(CollectionChange.ItemsReplaced, start, end - start);
|
this.collectionChangedCallback(start, end - start);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this._bufferWindowBefore = new DataWindow(length, loadFn, _placeHolderGenerator, loadCompleteCallback);
|
this._bufferWindowBefore = new DataWindow(loadFn, placeHolderGenerator, loadCompleteCallback);
|
||||||
this._window = new DataWindow(length, loadFn, _placeHolderGenerator, loadCompleteCallback);
|
this._window = new DataWindow(loadFn, placeHolderGenerator, loadCompleteCallback);
|
||||||
this._bufferWindowAfter = new DataWindow(length, loadFn, _placeHolderGenerator, loadCompleteCallback);
|
this._bufferWindowAfter = new DataWindow(loadFn, placeHolderGenerator, loadCompleteCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
setCollectionChangedCallback(callback: (change: CollectionChange, startIndex: number, count: number) => void): void {
|
dispose() {
|
||||||
|
this._bufferWindowAfter.dispose();
|
||||||
|
this._bufferWindowBefore.dispose();
|
||||||
|
this._window.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public setCollectionChangedCallback(callback: (startIndex: number, count: number) => void): void {
|
||||||
this.collectionChangedCallback = callback;
|
this.collectionChangedCallback = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
getLength(): number {
|
public getLength(): number {
|
||||||
return this._length;
|
return this.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
at(index: number): TData {
|
setLength(number: any): void {
|
||||||
|
this.length = number;
|
||||||
|
}
|
||||||
|
|
||||||
|
public at(index: number): T {
|
||||||
return this.getRange(index, index + 1)[0];
|
return this.getRange(index, index + 1)[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
getRange(start: number, end: number): TData[] {
|
public getRange(start: number, end: number): T[] {
|
||||||
|
|
||||||
// current data may contain placeholders
|
// current data may contain placeholders
|
||||||
let currentData = this.getRangeFromCurrent(start, end);
|
let currentData = this.getRangeFromCurrent(start, end);
|
||||||
@@ -142,7 +144,7 @@ export class VirtualizedCollection<TData> implements IObservableCollection<TData
|
|||||||
this._bufferWindowAfter = this._window;
|
this._bufferWindowAfter = this._window;
|
||||||
this._window = this._bufferWindowBefore;
|
this._window = this._bufferWindowBefore;
|
||||||
this._bufferWindowBefore = windowToRecycle;
|
this._bufferWindowBefore = windowToRecycle;
|
||||||
let newWindowOffset = Math.max(0, this._window.getStartIndex() - this._windowSize);
|
let newWindowOffset = Math.max(0, this._window.getStartIndex() - this.windowSize);
|
||||||
|
|
||||||
this._bufferWindowBefore.positionWindow(newWindowOffset, this._window.getStartIndex() - newWindowOffset);
|
this._bufferWindowBefore.positionWindow(newWindowOffset, this._window.getStartIndex() - newWindowOffset);
|
||||||
} else if (start >= this._bufferWindowAfter.getStartIndex()) {
|
} else if (start >= this._bufferWindowAfter.getStartIndex()) {
|
||||||
@@ -151,8 +153,8 @@ export class VirtualizedCollection<TData> implements IObservableCollection<TData
|
|||||||
this._bufferWindowBefore = this._window;
|
this._bufferWindowBefore = this._window;
|
||||||
this._window = this._bufferWindowAfter;
|
this._window = this._bufferWindowAfter;
|
||||||
this._bufferWindowAfter = windowToRecycle;
|
this._bufferWindowAfter = windowToRecycle;
|
||||||
let newWindowOffset = Math.min(this._window.getStartIndex() + this._windowSize, this._length);
|
let newWindowOffset = Math.min(this._window.getStartIndex() + this.windowSize, this.length);
|
||||||
let newWindowLength = Math.min(this._length - newWindowOffset, this._windowSize);
|
let newWindowLength = Math.min(this.length - newWindowOffset, this.windowSize);
|
||||||
|
|
||||||
this._bufferWindowAfter.positionWindow(newWindowOffset, newWindowLength);
|
this._bufferWindowAfter.positionWindow(newWindowOffset, newWindowLength);
|
||||||
}
|
}
|
||||||
@@ -160,7 +162,7 @@ export class VirtualizedCollection<TData> implements IObservableCollection<TData
|
|||||||
return currentData;
|
return currentData;
|
||||||
}
|
}
|
||||||
|
|
||||||
private getRangeFromCurrent(start: number, end: number): TData[] {
|
private getRangeFromCurrent(start: number, end: number): T[] {
|
||||||
let currentData = [];
|
let currentData = [];
|
||||||
for (let i = 0; i < end - start; i++) {
|
for (let i = 0; i < end - start; i++) {
|
||||||
currentData.push(this.getDataFromCurrent(start + i));
|
currentData.push(this.getDataFromCurrent(start + i));
|
||||||
@@ -169,7 +171,7 @@ export class VirtualizedCollection<TData> implements IObservableCollection<TData
|
|||||||
return currentData;
|
return currentData;
|
||||||
}
|
}
|
||||||
|
|
||||||
private getDataFromCurrent(index: number): TData {
|
private getDataFromCurrent(index: number): T {
|
||||||
if (this._bufferWindowBefore.contains(index)) {
|
if (this._bufferWindowBefore.contains(index)) {
|
||||||
return this._bufferWindowBefore.getItem(index);
|
return this._bufferWindowBefore.getItem(index);
|
||||||
} else if (this._bufferWindowAfter.contains(index)) {
|
} else if (this._bufferWindowAfter.contains(index)) {
|
||||||
@@ -178,38 +180,50 @@ export class VirtualizedCollection<TData> implements IObservableCollection<TData
|
|||||||
return this._window.getItem(index);
|
return this._window.getItem(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
return this._placeHolderGenerator(index);
|
return this.placeHolderGenerator(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
private resetWindowsAroundIndex(index: number): void {
|
private resetWindowsAroundIndex(index: number): void {
|
||||||
|
|
||||||
let bufferWindowBeforeStart = Math.max(0, index - this._windowSize * 1.5);
|
let bufferWindowBeforeStart = Math.max(0, index - this.windowSize * 1.5);
|
||||||
let bufferWindowBeforeEnd = Math.max(0, index - this._windowSize / 2);
|
let bufferWindowBeforeEnd = Math.max(0, index - this.windowSize / 2);
|
||||||
this._bufferWindowBefore.positionWindow(bufferWindowBeforeStart, bufferWindowBeforeEnd - bufferWindowBeforeStart);
|
this._bufferWindowBefore.positionWindow(bufferWindowBeforeStart, bufferWindowBeforeEnd - bufferWindowBeforeStart);
|
||||||
|
|
||||||
let mainWindowStart = bufferWindowBeforeEnd;
|
let mainWindowStart = bufferWindowBeforeEnd;
|
||||||
let mainWindowEnd = Math.min(mainWindowStart + this._windowSize, this._length);
|
let mainWindowEnd = Math.min(mainWindowStart + this.windowSize, this.length);
|
||||||
this._window.positionWindow(mainWindowStart, mainWindowEnd - mainWindowStart);
|
this._window.positionWindow(mainWindowStart, mainWindowEnd - mainWindowStart);
|
||||||
|
|
||||||
let bufferWindowAfterStart = mainWindowEnd;
|
let bufferWindowAfterStart = mainWindowEnd;
|
||||||
let bufferWindowAfterEnd = Math.min(bufferWindowAfterStart + this._windowSize, this._length);
|
let bufferWindowAfterEnd = Math.min(bufferWindowAfterStart + this.windowSize, this.length);
|
||||||
this._bufferWindowAfter.positionWindow(bufferWindowAfterStart, bufferWindowAfterEnd - bufferWindowAfterStart);
|
this._bufferWindowAfter.positionWindow(bufferWindowAfterStart, bufferWindowAfterEnd - bufferWindowAfterStart);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class AsyncDataProvider<TData extends IGridDataRow> implements Slick.DataProvider<TData> {
|
export class AsyncDataProvider<T extends Slick.SlickData> implements IDisposableDataProvider<T> {
|
||||||
|
|
||||||
constructor(private dataRows: IObservableCollection<TData>) { }
|
constructor(public dataRows: IObservableCollection<T>) { }
|
||||||
|
|
||||||
public getLength(): number {
|
public getLength(): number {
|
||||||
return this.dataRows ? this.dataRows.getLength() : 0;
|
return this.dataRows.getLength();
|
||||||
}
|
}
|
||||||
|
|
||||||
public getItem(index: number): TData {
|
public getItem(index: number): T {
|
||||||
return !this.dataRows ? undefined : this.dataRows.at(index);
|
return this.dataRows.at(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
public getRange(start: number, end: number): TData[] {
|
public getRange(start: number, end: number): T[] {
|
||||||
return !this.dataRows ? undefined : this.dataRows.getRange(start, end);
|
return this.dataRows.getRange(start, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public set length(length: number) {
|
||||||
|
this.dataRows.setLength(length);
|
||||||
|
}
|
||||||
|
|
||||||
|
public get length(): number {
|
||||||
|
return this.dataRows.getLength();
|
||||||
|
}
|
||||||
|
|
||||||
|
dispose() {
|
||||||
|
this.dataRows.dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
31
src/sql/base/browser/ui/table/interfaces.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
import { IListStyles } from 'vs/base/browser/ui/list/listWidget';
|
||||||
|
import { Color } from 'vs/base/common/color';
|
||||||
|
|
||||||
|
export interface IDisposableDataProvider<T> extends Slick.DataProvider<T> {
|
||||||
|
dispose(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ITableMouseEvent {
|
||||||
|
anchor: HTMLElement | { x: number, y: number };
|
||||||
|
cell?: { row: number, cell: number };
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ITableStyles extends IListStyles {
|
||||||
|
tableHeaderBackground?: Color;
|
||||||
|
tableHeaderForeground?: Color;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ITableSorter<T> {
|
||||||
|
sort(args: Slick.OnSortEventArgs<T>);
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ITableConfiguration<T> {
|
||||||
|
dataProvider?: IDisposableDataProvider<T> | Array<T>;
|
||||||
|
columns?: Slick.Column<T>[];
|
||||||
|
sorter?: ITableSorter<T>;
|
||||||
|
}
|
||||||
@@ -5,8 +5,6 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { range } from 'vs/base/common/arrays';
|
|
||||||
|
|
||||||
export interface IRowNumberColumnOptions {
|
export interface IRowNumberColumnOptions {
|
||||||
numberOfRows: number;
|
numberOfRows: number;
|
||||||
cssClass?: string;
|
cssClass?: string;
|
||||||
@@ -17,7 +15,7 @@ const sizePerDigit = 15;
|
|||||||
export class RowNumberColumn<T> implements Slick.Plugin<T> {
|
export class RowNumberColumn<T> implements Slick.Plugin<T> {
|
||||||
private handler = new Slick.EventHandler();
|
private handler = new Slick.EventHandler();
|
||||||
private grid: Slick.Grid<T>;
|
private grid: Slick.Grid<T>;
|
||||||
|
private currentColumnWidth: number;
|
||||||
|
|
||||||
constructor(private options: IRowNumberColumnOptions) {
|
constructor(private options: IRowNumberColumnOptions) {
|
||||||
}
|
}
|
||||||
@@ -52,19 +50,25 @@ export class RowNumberColumn<T> implements Slick.Plugin<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public updateRowCount(rowNum: number) {
|
||||||
|
this.options.numberOfRows = rowNum;
|
||||||
|
let columnWidth = Math.max(this.options.numberOfRows.toString().length * sizePerDigit, 22);
|
||||||
|
if (columnWidth !== this.currentColumnWidth) {
|
||||||
|
this.grid.setColumnWidths([this.getColumnDefinition()]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public getColumnDefinition(): Slick.Column<T> {
|
public getColumnDefinition(): Slick.Column<T> {
|
||||||
// that smallest we can make it is 22 due to padding and margins in the cells
|
// that smallest we can make it is 22 due to padding and margins in the cells
|
||||||
let columnWidth = Math.max(this.options.numberOfRows.toString().length * sizePerDigit, 22);
|
this.currentColumnWidth = Math.max(this.options.numberOfRows.toString().length * sizePerDigit, 22);
|
||||||
return {
|
return {
|
||||||
id: 'rowNumber',
|
id: 'rowNumber',
|
||||||
name: '',
|
name: '',
|
||||||
field: 'rowNumber',
|
field: 'rowNumber',
|
||||||
width: columnWidth,
|
width: this.currentColumnWidth,
|
||||||
minWidth: columnWidth,
|
|
||||||
maxWidth: columnWidth,
|
|
||||||
resizable: false,
|
resizable: false,
|
||||||
cssClass: this.options.cssClass,
|
cssClass: this.options.cssClass,
|
||||||
focusable: false,
|
focusable: true,
|
||||||
selectable: false,
|
selectable: false,
|
||||||
formatter: (r, c, v, cd, dc) => this.formatter(r, c, v, cd, dc)
|
formatter: (r, c, v, cd, dc) => this.formatter(r, c, v, cd, dc)
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -5,28 +5,18 @@
|
|||||||
|
|
||||||
import 'vs/css!./media/table';
|
import 'vs/css!./media/table';
|
||||||
import { TableDataView } from './tableDataView';
|
import { TableDataView } from './tableDataView';
|
||||||
|
import { IDisposableDataProvider, ITableSorter, ITableMouseEvent, ITableConfiguration, ITableStyles } from 'sql/base/browser/ui/table/interfaces';
|
||||||
|
|
||||||
import { IThemable } from 'vs/platform/theme/common/styler';
|
import { IThemable } from 'vs/platform/theme/common/styler';
|
||||||
import { IListStyles } from 'vs/base/browser/ui/list/listWidget';
|
|
||||||
import * as DOM from 'vs/base/browser/dom';
|
import * as DOM from 'vs/base/browser/dom';
|
||||||
import { Color } from 'vs/base/common/color';
|
|
||||||
import { mixin } from 'vs/base/common/objects';
|
import { mixin } from 'vs/base/common/objects';
|
||||||
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||||
import { Orientation } from 'vs/base/browser/ui/splitview/splitview';
|
import { Orientation } from 'vs/base/browser/ui/splitview/splitview';
|
||||||
import { Widget } from 'vs/base/browser/ui/widget';
|
import { Widget } from 'vs/base/browser/ui/widget';
|
||||||
import { isArray, isBoolean } from 'vs/base/common/types';
|
import { isArray, isBoolean } from 'vs/base/common/types';
|
||||||
import { Event, Emitter } from 'vs/base/common/event';
|
import { Event, Emitter } from 'vs/base/common/event';
|
||||||
import { range } from 'vs/base/common/arrays';
|
import { range } from 'vs/base/common/arrays';
|
||||||
|
import { $ } from 'vs/base/browser/builder';
|
||||||
export interface ITableMouseEvent {
|
|
||||||
anchor: HTMLElement | { x: number, y: number };
|
|
||||||
cell?: { row: number, cell: number };
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ITableStyles extends IListStyles {
|
|
||||||
tableHeaderBackground?: Color;
|
|
||||||
tableHeaderForeground?: Color;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getDefaultOptions<T>(): Slick.GridOptions<T> {
|
function getDefaultOptions<T>(): Slick.GridOptions<T> {
|
||||||
return <Slick.GridOptions<T>>{
|
return <Slick.GridOptions<T>>{
|
||||||
@@ -35,23 +25,13 @@ function getDefaultOptions<T>(): Slick.GridOptions<T> {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ITableSorter<T> {
|
|
||||||
sort(args: Slick.OnSortEventArgs<T>);
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ITableConfiguration<T> {
|
|
||||||
dataProvider?: Slick.DataProvider<T> | Array<T>;
|
|
||||||
columns?: Slick.Column<T>[];
|
|
||||||
sorter?: ITableSorter<T>;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class Table<T extends Slick.SlickData> extends Widget implements IThemable, IDisposable {
|
export class Table<T extends Slick.SlickData> extends Widget implements IThemable, IDisposable {
|
||||||
private styleElement: HTMLStyleElement;
|
private styleElement: HTMLStyleElement;
|
||||||
private idPrefix: string;
|
private idPrefix: string;
|
||||||
|
|
||||||
private _grid: Slick.Grid<T>;
|
private _grid: Slick.Grid<T>;
|
||||||
private _columns: Slick.Column<T>[];
|
private _columns: Slick.Column<T>[];
|
||||||
private _data: Slick.DataProvider<T>;
|
private _data: IDisposableDataProvider<T>;
|
||||||
private _sorter: ITableSorter<T>;
|
private _sorter: ITableSorter<T>;
|
||||||
|
|
||||||
private _autoscroll: boolean;
|
private _autoscroll: boolean;
|
||||||
@@ -60,8 +40,6 @@ export class Table<T extends Slick.SlickData> extends Widget implements IThemabl
|
|||||||
|
|
||||||
private _classChangeTimeout: number;
|
private _classChangeTimeout: number;
|
||||||
|
|
||||||
private _disposables: IDisposable[] = [];
|
|
||||||
|
|
||||||
private _onContextMenu = new Emitter<ITableMouseEvent>();
|
private _onContextMenu = new Emitter<ITableMouseEvent>();
|
||||||
public readonly onContextMenu: Event<ITableMouseEvent> = this._onContextMenu.event;
|
public readonly onContextMenu: Event<ITableMouseEvent> = this._onContextMenu.event;
|
||||||
|
|
||||||
@@ -76,6 +54,8 @@ export class Table<T extends Slick.SlickData> extends Widget implements IThemabl
|
|||||||
this._data = configuration.dataProvider;
|
this._data = configuration.dataProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this._register(this._data);
|
||||||
|
|
||||||
if (configuration && configuration.columns) {
|
if (configuration && configuration.columns) {
|
||||||
this._columns = configuration.columns;
|
this._columns = configuration.columns;
|
||||||
} else {
|
} else {
|
||||||
@@ -117,6 +97,12 @@ export class Table<T extends Slick.SlickData> extends Widget implements IThemabl
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this._register({
|
||||||
|
dispose: () => {
|
||||||
|
this._grid.destroy();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
this.mapMouseEvent(this._grid.onContextMenu, this._onContextMenu);
|
this.mapMouseEvent(this._grid.onContextMenu, this._onContextMenu);
|
||||||
this.mapMouseEvent(this._grid.onClick, this._onClick);
|
this.mapMouseEvent(this._grid.onClick, this._onClick);
|
||||||
}
|
}
|
||||||
@@ -131,7 +117,8 @@ export class Table<T extends Slick.SlickData> extends Widget implements IThemabl
|
|||||||
}
|
}
|
||||||
|
|
||||||
public dispose() {
|
public dispose() {
|
||||||
dispose(this._disposables);
|
$(this._container).dispose();
|
||||||
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
public invalidateRows(rows: number[], keepEditor: boolean) {
|
public invalidateRows(rows: number[], keepEditor: boolean) {
|
||||||
@@ -166,7 +153,7 @@ export class Table<T extends Slick.SlickData> extends Widget implements IThemabl
|
|||||||
this._grid.setData(this._data, true);
|
this._grid.setData(this._data, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
getData(): Slick.DataProvider<T> {
|
getData(): IDisposableDataProvider<T> {
|
||||||
return this._data;
|
return this._data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ import { Event, Emitter } from 'vs/base/common/event';
|
|||||||
import { TPromise } from 'vs/base/common/winjs.base';
|
import { TPromise } from 'vs/base/common/winjs.base';
|
||||||
import * as types from 'vs/base/common/types';
|
import * as types from 'vs/base/common/types';
|
||||||
|
|
||||||
|
import { IDisposableDataProvider } from 'sql/base/browser/ui/table/interfaces';
|
||||||
|
|
||||||
export interface IFindPosition {
|
export interface IFindPosition {
|
||||||
col: number;
|
col: number;
|
||||||
row: number;
|
row: number;
|
||||||
@@ -20,7 +22,7 @@ function defaultSort<T>(args: Slick.OnSortEventArgs<T>, data: Array<T>): Array<T
|
|||||||
return data.sort((a, b) => (a[field] === b[field] ? 0 : (a[field] > b[field] ? 1 : -1)) * sign);
|
return data.sort((a, b) => (a[field] === b[field] ? 0 : (a[field] > b[field] ? 1 : -1)) * sign);
|
||||||
}
|
}
|
||||||
|
|
||||||
export class TableDataView<T extends Slick.SlickData> implements Slick.DataProvider<T> {
|
export class TableDataView<T extends Slick.SlickData> implements IDisposableDataProvider<T> {
|
||||||
private _data: Array<T>;
|
private _data: Array<T>;
|
||||||
private _findArray: Array<IFindPosition>;
|
private _findArray: Array<IFindPosition>;
|
||||||
private _findObs: Observable<IFindPosition>;
|
private _findObs: Observable<IFindPosition>;
|
||||||
@@ -154,4 +156,10 @@ export class TableDataView<T extends Slick.SlickData> implements Slick.DataProvi
|
|||||||
get findCount(): number {
|
get findCount(): number {
|
||||||
return types.isUndefinedOrNull(this._findArray) ? 0 : this._findArray.length;
|
return types.isUndefinedOrNull(this._findArray) ? 0 : this._findArray.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dispose() {
|
||||||
|
this._data = undefined;
|
||||||
|
this._findArray = undefined;
|
||||||
|
this._findObs = undefined;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
.carbon-taskbar {
|
.carbon-taskbar {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
margin: 2px 0px 2px 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.carbon-taskbar.monaco-toolbar .monaco-action-bar.animated .actions-container {
|
.carbon-taskbar.monaco-toolbar .monaco-action-bar.animated .actions-container {
|
||||||
@@ -39,11 +40,6 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.carbon-taskbar {
|
|
||||||
margin-top: 2px;
|
|
||||||
margin-bottom: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.carbon-taskbar .action-item {
|
.carbon-taskbar .action-item {
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
}
|
}
|
||||||
@@ -54,6 +50,11 @@
|
|||||||
padding-left: 15px;
|
padding-left: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.carbon-taskbar .action-item-label {
|
||||||
|
display: flex;
|
||||||
|
padding-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
.listDatabasesSelectBox {
|
.listDatabasesSelectBox {
|
||||||
padding-left: 2px;
|
padding-left: 2px;
|
||||||
min-width: 100px;
|
min-width: 100px;
|
||||||
|
|||||||
@@ -146,4 +146,5 @@ export class Taskbar {
|
|||||||
public dispose(): void {
|
public dispose(): void {
|
||||||
this.actionBar.dispose();
|
this.actionBar.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ export const tableHeaderForeground = registerColor('table.headerForeground', { d
|
|||||||
export const disabledInputBackground = registerColor('input.disabled.background', { dark: '#444444', light: '#dcdcdc', hc: Color.black }, nls.localize('disabledInputBoxBackground', "Disabled Input box background."));
|
export const disabledInputBackground = registerColor('input.disabled.background', { dark: '#444444', light: '#dcdcdc', hc: Color.black }, nls.localize('disabledInputBoxBackground', "Disabled Input box background."));
|
||||||
export const disabledInputForeground = registerColor('input.disabled.foreground', { dark: '#888888', light: '#888888', hc: foreground }, nls.localize('disabledInputBoxForeground', "Disabled Input box foreground."));
|
export const disabledInputForeground = registerColor('input.disabled.foreground', { dark: '#888888', light: '#888888', hc: foreground }, nls.localize('disabledInputBoxForeground', "Disabled Input box foreground."));
|
||||||
export const buttonFocusOutline = registerColor('button.focusOutline', { dark: '#eaeaea', light: '#666666', hc: null }, nls.localize('buttonFocusOutline', "Button outline color when focused."));
|
export const buttonFocusOutline = registerColor('button.focusOutline', { dark: '#eaeaea', light: '#666666', hc: null }, nls.localize('buttonFocusOutline', "Button outline color when focused."));
|
||||||
|
export const disabledCheckboxForeground = registerColor('checkbox.disabled.foreground', { dark: '#888888', light: '#888888', hc: Color.black }, nls.localize('disabledCheckboxforeground', "Disabled checkbox foreground."));
|
||||||
|
|
||||||
export const listFocusAndSelectionBackground = registerColor('list.focusAndSelectionBackground', { dark: '#2c3295', light: '#2c3295', hc: null }, nls.localize('listFocusAndSelectionBackground', "List/Table background color for the selected and focus item when the list/table is active"));
|
export const listFocusAndSelectionBackground = registerColor('list.focusAndSelectionBackground', { dark: '#2c3295', light: '#2c3295', hc: null }, nls.localize('listFocusAndSelectionBackground', "List/Table background color for the selected and focus item when the list/table is active"));
|
||||||
|
|
||||||
|
|||||||
@@ -255,3 +255,10 @@ export function attachButtonStyler(widget: IThemable, themeService: IThemeServic
|
|||||||
buttonFocusOutline: (style && style.buttonFocusOutline) || sqlcolors.buttonFocusOutline
|
buttonFocusOutline: (style && style.buttonFocusOutline) || sqlcolors.buttonFocusOutline
|
||||||
}, widget);
|
}, widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function attachCheckboxStyler(widget: IThemable, themeService: IThemeService, style?: { disabledCheckboxForeground?: cr.ColorIdentifier })
|
||||||
|
: IDisposable {
|
||||||
|
return attachStyler(themeService, {
|
||||||
|
disabledCheckboxForeground: (style && style.disabledCheckboxForeground) || sqlcolors.disabledCheckboxForeground
|
||||||
|
}, widget);
|
||||||
|
}
|
||||||
|
|||||||
1
src/sql/media/icons/check.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="-2 -2 16 16" enable-background="new -2 -2 16 16"><polygon fill="#424242" points="9,0 4.5,9 3,6 0,6 3,12 6,12 12,0"/></svg>
|
||||||
|
After Width: | Height: | Size: 194 B |
1
src/sql/media/icons/check_inverse.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="-2 -2 16 16" enable-background="new -2 -2 16 16"><polygon fill="#C5C5C5" points="9,0 4.5,9 3,6 0,6 3,12 6,12 12,0"/></svg>
|
||||||
|
After Width: | Height: | Size: 194 B |
@@ -227,6 +227,51 @@
|
|||||||
background: url('unpin.svg') center center no-repeat;
|
background: url('unpin.svg') center center no-repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.vs .sql.icon.pause {
|
||||||
|
background-image: url('pause.svg')
|
||||||
|
}
|
||||||
|
|
||||||
|
.vs-dark .sql.icon.pause,
|
||||||
|
.hc-black .sql.icon.pause {
|
||||||
|
background-image: url('pause_inverse.svg')
|
||||||
|
}
|
||||||
|
|
||||||
|
.vs .sql.icon.continue {
|
||||||
|
background-image: url('continue.svg')
|
||||||
|
}
|
||||||
|
|
||||||
|
.vs-dark .sql.icon.continue,
|
||||||
|
.hc-black .sql.icon.continue {
|
||||||
|
background-image: url('continue_inverse.svg')
|
||||||
|
}
|
||||||
|
|
||||||
|
.vs .sql.icon.checked {
|
||||||
|
background-image: url('check.svg')
|
||||||
|
}
|
||||||
|
|
||||||
|
.vs-dark .sql.icon.checked,
|
||||||
|
.hc-black .sql.icon.checked {
|
||||||
|
background-image: url('check_inverse.svg')
|
||||||
|
}
|
||||||
|
|
||||||
|
.vs .sql.icon.start {
|
||||||
|
background-image: url('start.svg')
|
||||||
|
}
|
||||||
|
|
||||||
|
.vs-dark .sql.icon.start,
|
||||||
|
.hc-black .sql.icon.start {
|
||||||
|
background-image: url('start_inverse.svg')
|
||||||
|
}
|
||||||
|
|
||||||
|
.vs .sql.icon.stop {
|
||||||
|
background-image: url('stop.svg')
|
||||||
|
}
|
||||||
|
|
||||||
|
.vs-dark .sql.icon.stop,
|
||||||
|
.hc-black .sql.icon.stop {
|
||||||
|
background-image: url('stop_inverse.svg')
|
||||||
|
}
|
||||||
|
|
||||||
.small {
|
.small {
|
||||||
width: 16px;
|
width: 16px;
|
||||||
height: 16px;
|
height: 16px;
|
||||||
|
|||||||
1
src/sql/media/icons/continue.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><defs><style>.icon-canvas-transparent,.icon-vs-out{fill:#f6f6f6;}.icon-canvas-transparent{opacity:0;}.icon-vs-action-blue{fill:#00539c;}</style></defs><title>continue</title><g id="canvas"><path class="icon-canvas-transparent" d="M16,0V16H0V0Z"/></g><g id="outline" style="display: none;"><path class="icon-vs-out" d="M15.64,8l-7.8,6H2V2H7.84Z"/></g><g id="iconBg"><path class="icon-vs-action-blue" d="M3,3H5V13H3ZM7.5,3V13L14,8Z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 502 B |
1
src/sql/media/icons/continue_inverse.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><defs><style>.icon-canvas-transparent,.icon-vs-out{fill:#252526;}.icon-canvas-transparent{opacity:0;}.icon-vs-action-blue{fill:#75beff;}</style></defs><title>continue</title><g id="canvas"><path class="icon-canvas-transparent" d="M16,0V16H0V0Z"/></g><g id="outline" style="display: none;"><path class="icon-vs-out" d="M15.64,8l-7.8,6H2V2H7.84Z"/></g><g id="iconBg"><path class="icon-vs-action-blue" d="M3,3H5V13H3ZM7.5,3V13L14,8Z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 502 B |
1
src/sql/media/icons/pause.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><defs><style>.icon-canvas-transparent,.icon-vs-out{fill:#f6f6f6;}.icon-canvas-transparent{opacity:0;}.icon-vs-action-blue{fill:#00539c;}</style></defs><title>pause</title><g id="canvas"><path class="icon-canvas-transparent" d="M16,0V16H0V0Z"/></g><g id="outline" style="display: none;"><path class="icon-vs-out" d="M13,2V14H8.5V2ZM3,14H7.5V2H3Z"/></g><g id="iconBg"><path class="icon-vs-action-blue" d="M4,3H6.5V13H4ZM9.5,3V13H12V3Z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 505 B |
1
src/sql/media/icons/pause_inverse.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><defs><style>.icon-canvas-transparent,.icon-vs-out{fill:#252526;}.icon-canvas-transparent{opacity:0;}.icon-vs-action-blue{fill:#75beff;}</style></defs><title>pause</title><g id="canvas"><path class="icon-canvas-transparent" d="M16,0V16H0V0Z"/></g><g id="outline" style="display: none;"><path class="icon-vs-out" d="M13,2V14H8.5V2ZM3,14H7.5V2H3Z"/></g><g id="iconBg"><path class="icon-vs-action-blue" d="M4,3H6.5V13H4ZM9.5,3V13H12V3Z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 505 B |
1
src/sql/media/icons/start.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><defs><style>.icon-canvas-transparent,.icon-vs-out{fill:#f6f6f6;}.icon-canvas-transparent{opacity:0;}.icon-vs-action-green{fill:#388a34;}</style></defs><title>continue</title><g id="canvas"><path class="icon-canvas-transparent" d="M16,0V16H0V0Z"/></g><g id="outline" style="display: none;"><path class="icon-vs-out" d="M14.334,8,3.667,16H3V0h.667Z"/></g><g id="iconBg"><path class="icon-vs-action-green" d="M4,1.5v13L12.667,8,4,1.5Z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 505 B |
1
src/sql/media/icons/start_inverse.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><defs><style>.icon-canvas-transparent,.icon-vs-out{fill:#252526;}.icon-canvas-transparent{opacity:0;}.icon-vs-action-green{fill:#89d185;}</style></defs><title>continue</title><g id="canvas"><path class="icon-canvas-transparent" d="M16,0V16H0V0Z"/></g><g id="outline" style="display: none;"><path class="icon-vs-out" d="M14.334,8,3.667,16H3V0h.667Z"/></g><g id="iconBg"><path class="icon-vs-action-green" d="M4,1.5v13L12.667,8,4,1.5Z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 505 B |
1
src/sql/media/icons/stop.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><defs><style>.icon-canvas-transparent,.icon-vs-out{fill:#f6f6f6;}.icon-canvas-transparent{opacity:0;}.icon-vs-action-red{fill:#a1260d;}</style></defs><title>stop</title><g id="canvas"><path class="icon-canvas-transparent" d="M16,0V16H0V0Z"/></g><g id="outline" style="display: none;"><path class="icon-vs-out" d="M14,2V14H2V2Z"/></g><g id="iconBg"><path class="icon-vs-action-red" d="M13,3V13H3V3Z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 470 B |
1
src/sql/media/icons/stop_inverse.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><defs><style>.icon-canvas-transparent,.icon-vs-out{fill:#252526;}.icon-canvas-transparent{opacity:0;}.icon-vs-action-red{fill:#f48771;}</style></defs><title>stop</title><g id="canvas"><path class="icon-canvas-transparent" d="M16,0V16H0V0Z"/></g><g id="outline" style="display: none;"><path class="icon-vs-out" d="M14,2V14H2V2Z"/></g><g id="iconBg"><path class="icon-vs-action-red" d="M13,3V13H3V3Z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 470 B |
17
src/sql/parts/commandLine/common/commandLine.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
||||||
|
export interface ICommandLineProcessing {
|
||||||
|
_serviceBrand: any;
|
||||||
|
/**
|
||||||
|
* Interprets the various Azure Data Studio-specific command line switches and
|
||||||
|
* performs the requisite tasks such as connecting to a server
|
||||||
|
*/
|
||||||
|
processCommandLine() : void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const ICommandLineProcessing = createDecorator<ICommandLineProcessing>('commandLineService');
|
||||||
75
src/sql/parts/commandLine/common/commandLineService.ts
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
'use strict';
|
||||||
|
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
|
||||||
|
import { ICommandLineProcessing } from 'sql/parts/commandLine/common/commandLine';
|
||||||
|
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
|
||||||
|
import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesService';
|
||||||
|
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
|
||||||
|
import * as Constants from 'sql/parts/connection/common/constants';
|
||||||
|
import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService';
|
||||||
|
import * as platform from 'vs/platform/registry/common/platform';
|
||||||
|
import { ConnectionProviderProperties, IConnectionProviderRegistry, Extensions as ConnectionProviderExtensions } from 'sql/workbench/parts/connection/common/connectionProviderExtension';
|
||||||
|
import * as TaskUtilities from 'sql/workbench/common/taskUtilities';
|
||||||
|
import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
|
||||||
|
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||||
|
|
||||||
|
export class CommandLineService implements ICommandLineProcessing {
|
||||||
|
private _connectionProfile: ConnectionProfile;
|
||||||
|
private _showConnectionDialog: boolean;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
@IConnectionManagementService private _connectionManagementService: IConnectionManagementService,
|
||||||
|
@ICapabilitiesService private _capabilitiesService: ICapabilitiesService,
|
||||||
|
@IEnvironmentService private _environmentService: IEnvironmentService,
|
||||||
|
@IQueryEditorService private _queryEditorService: IQueryEditorService,
|
||||||
|
@IObjectExplorerService private _objectExplorerService: IObjectExplorerService,
|
||||||
|
@IEditorService private _editorService: IEditorService,
|
||||||
|
) {
|
||||||
|
let profile = null;
|
||||||
|
if (this._environmentService && this._environmentService.args.server) {
|
||||||
|
profile = new ConnectionProfile(_capabilitiesService, null);
|
||||||
|
// We want connection store to use any matching password it finds
|
||||||
|
profile.savePassword = true;
|
||||||
|
profile.providerName = Constants.mssqlProviderName;
|
||||||
|
profile.serverName = _environmentService.args.server;
|
||||||
|
profile.databaseName = _environmentService.args.database ? _environmentService.args.database : '';
|
||||||
|
profile.userName = _environmentService.args.user ? _environmentService.args.user : '';
|
||||||
|
profile.authenticationType = _environmentService.args.integrated ? 'Integrated' : 'SqlLogin';
|
||||||
|
profile.connectionName = '';
|
||||||
|
profile.setOptionValue('applicationName', Constants.applicationName);
|
||||||
|
profile.setOptionValue('databaseDisplayName', profile.databaseName);
|
||||||
|
profile.setOptionValue('groupId', profile.groupId);
|
||||||
|
}
|
||||||
|
this._connectionProfile = profile;
|
||||||
|
const registry = platform.Registry.as<IConnectionProviderRegistry>(ConnectionProviderExtensions.ConnectionProviderContributions);
|
||||||
|
let sqlProvider = registry.getProperties(Constants.mssqlProviderName);
|
||||||
|
// We can't connect to object explorer until the MSSQL connection provider is registered
|
||||||
|
if (sqlProvider) {
|
||||||
|
this.processCommandLine();
|
||||||
|
} else {
|
||||||
|
registry.onNewProvider(e => {
|
||||||
|
if (e.id === Constants.mssqlProviderName) {
|
||||||
|
this.processCommandLine();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public _serviceBrand: any;
|
||||||
|
public processCommandLine(): void {
|
||||||
|
if (!this._connectionProfile && !this._connectionManagementService.hasRegisteredServers()) {
|
||||||
|
// prompt the user for a new connection on startup if no profiles are registered
|
||||||
|
this._connectionManagementService.showConnectionDialog();
|
||||||
|
} else if (this._connectionProfile) {
|
||||||
|
this._connectionManagementService.connectIfNotConnected(this._connectionProfile, 'connection')
|
||||||
|
.then(result => TaskUtilities.newQuery(this._connectionProfile,
|
||||||
|
this._connectionManagementService,
|
||||||
|
this._queryEditorService,
|
||||||
|
this._objectExplorerService,
|
||||||
|
this._editorService))
|
||||||
|
.catch(() => { });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,15 +3,22 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
import * as path from 'path';
|
||||||
|
|
||||||
|
import { Registry } from 'vs/platform/registry/common/platform';
|
||||||
import { EditorInput, IEditorInput } from 'vs/workbench/common/editor';
|
import { EditorInput, IEditorInput } from 'vs/workbench/common/editor';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { UntitledEditorInput } from 'vs/workbench/common/editor/untitledEditorInput';
|
import { UntitledEditorInput } from 'vs/workbench/common/editor/untitledEditorInput';
|
||||||
import { FileEditorInput } from 'vs/workbench/parts/files/common/editors/fileEditorInput';
|
import { FileEditorInput } from 'vs/workbench/parts/files/common/editors/fileEditorInput';
|
||||||
|
import URI from 'vs/base/common/uri';
|
||||||
|
|
||||||
import { QueryResultsInput } from 'sql/parts/query/common/queryResultsInput';
|
import { QueryResultsInput } from 'sql/parts/query/common/queryResultsInput';
|
||||||
import { QueryInput } from 'sql/parts/query/common/queryInput';
|
import { QueryInput } from 'sql/parts/query/common/queryInput';
|
||||||
import URI from 'vs/base/common/uri';
|
|
||||||
import { IQueryEditorOptions } from 'sql/parts/query/common/queryEditorService';
|
import { IQueryEditorOptions } from 'sql/parts/query/common/queryEditorService';
|
||||||
import { QueryPlanInput } from 'sql/parts/queryPlan/queryPlanInput';
|
import { QueryPlanInput } from 'sql/parts/queryPlan/queryPlanInput';
|
||||||
|
import { NotebookInput, NotebookInputModel, NotebookInputValidator } from 'sql/parts/notebook/notebookInput';
|
||||||
|
import { Extensions, INotebookProviderRegistry } from 'sql/services/notebook/notebookRegistry';
|
||||||
|
import { DEFAULT_NOTEBOOK_PROVIDER } from 'sql/services/notebook/notebookService';
|
||||||
|
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|
||||||
@@ -28,7 +35,7 @@ export const sqlModeId = 'sql';
|
|||||||
* to that type.
|
* to that type.
|
||||||
* @param input The input to check for conversion
|
* @param input The input to check for conversion
|
||||||
* @param options Editor options for controlling the conversion
|
* @param options Editor options for controlling the conversion
|
||||||
* @param instantiationService The instatianation service to use to create the new input types
|
* @param instantiationService The instantiation service to use to create the new input types
|
||||||
*/
|
*/
|
||||||
export function convertEditorInput(input: EditorInput, options: IQueryEditorOptions, instantiationService: IInstantiationService): EditorInput {
|
export function convertEditorInput(input: EditorInput, options: IQueryEditorOptions, instantiationService: IInstantiationService): EditorInput {
|
||||||
let denyQueryEditor = options && options.denyQueryEditor;
|
let denyQueryEditor = options && options.denyQueryEditor;
|
||||||
@@ -48,8 +55,25 @@ export function convertEditorInput(input: EditorInput, options: IQueryEditorOpti
|
|||||||
let queryPlanInput: QueryPlanInput = instantiationService.createInstance(QueryPlanInput, queryPlanXml, 'aaa', undefined);
|
let queryPlanInput: QueryPlanInput = instantiationService.createInstance(QueryPlanInput, queryPlanXml, 'aaa', undefined);
|
||||||
return queryPlanInput;
|
return queryPlanInput;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
//Notebook
|
||||||
|
let notebookValidator = instantiationService.createInstance(NotebookInputValidator);
|
||||||
|
uri = getNotebookEditorUri(input);
|
||||||
|
if(uri && notebookValidator.isNotebookEnabled()){
|
||||||
|
//TODO: We need to pass in notebook data either through notebook input or notebook service
|
||||||
|
let fileName: string = 'untitled';
|
||||||
|
let providerId: string = DEFAULT_NOTEBOOK_PROVIDER;
|
||||||
|
if (input) {
|
||||||
|
fileName = input.getName();
|
||||||
|
providerId = getProviderForFileName(fileName);
|
||||||
|
}
|
||||||
|
let notebookInputModel = new NotebookInputModel(uri, undefined, false, undefined);
|
||||||
|
notebookInputModel.providerId = providerId;
|
||||||
|
//TO DO: Second parameter has to be the content.
|
||||||
|
let notebookInput: NotebookInput = instantiationService.createInstance(NotebookInput, fileName, notebookInputModel);
|
||||||
|
return notebookInput;
|
||||||
|
}
|
||||||
|
}
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,6 +153,47 @@ function getQueryPlanEditorUri(input: EditorInput): URI {
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If input is a supported notebook editor file (.ipynb), return it's URI. Otherwise return undefined.
|
||||||
|
* @param input The EditorInput to get the URI of.
|
||||||
|
*/
|
||||||
|
function getNotebookEditorUri(input: EditorInput): URI {
|
||||||
|
if (!input || !input.getName()) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// If this editor is not already of type notebook input
|
||||||
|
if (!(input instanceof NotebookInput)) {
|
||||||
|
let uri: URI = getSupportedInputResource(input);
|
||||||
|
if (uri) {
|
||||||
|
if (hasFileExtension(getNotebookFileExtensions(), input, false)) {
|
||||||
|
return uri;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNotebookFileExtensions() {
|
||||||
|
let notebookRegistry = Registry.as<INotebookProviderRegistry>(Extensions.NotebookProviderContribution);
|
||||||
|
return notebookRegistry.getSupportedFileExtensions();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getProviderForFileName(fileName: string) {
|
||||||
|
let fileExt = path.extname(fileName);
|
||||||
|
if (fileExt && fileExt.startsWith('.')) {
|
||||||
|
fileExt = fileExt.slice(1,fileExt.length);
|
||||||
|
let notebookRegistry = Registry.as<INotebookProviderRegistry>(Extensions.NotebookProviderContribution);
|
||||||
|
return notebookRegistry.getProviderForFileType(fileExt);
|
||||||
|
}
|
||||||
|
return DEFAULT_NOTEBOOK_PROVIDER;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the given EditorInput is set to either undefined or sql mode
|
* Checks whether the given EditorInput is set to either undefined or sql mode
|
||||||
* @param input The EditorInput to check the mode of
|
* @param input The EditorInput to check the mode of
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService
|
|||||||
export class ClearRecentConnectionsAction extends Action {
|
export class ClearRecentConnectionsAction extends Action {
|
||||||
|
|
||||||
public static ID = 'clearRecentConnectionsAction';
|
public static ID = 'clearRecentConnectionsAction';
|
||||||
public static LABEL = nls.localize('ClearRecentlyUsedLabel', 'Clear Recent Connections List');
|
public static LABEL = nls.localize('ClearRecentlyUsedLabel', 'Clear List');
|
||||||
public static ICON = 'search-action clear-search-results';
|
public static ICON = 'search-action clear-search-results';
|
||||||
|
|
||||||
private _onRecentConnectionsRemoved = new Emitter<void>();
|
private _onRecentConnectionsRemoved = new Emitter<void>();
|
||||||
@@ -83,7 +83,7 @@ export class ClearRecentConnectionsAction extends Action {
|
|||||||
{ key: nls.localize('connectionAction.no', 'No'), value: false }
|
{ key: nls.localize('connectionAction.no', 'No'), value: false }
|
||||||
];
|
];
|
||||||
|
|
||||||
self._quickOpenService.pick(choices.map(x => x.key), { placeHolder: nls.localize('ClearRecentlyUsedLabel', 'Clear Recent Connections List'), ignoreFocusLost: true }).then((choice) => {
|
self._quickOpenService.pick(choices.map(x => x.key), { placeHolder: nls.localize('ClearRecentlyUsedLabel', 'Clear List'), ignoreFocusLost: true }).then((choice) => {
|
||||||
let confirm = choices.find(x => x.key === choice);
|
let confirm = choices.find(x => x.key === choice);
|
||||||
resolve(confirm && confirm.value);
|
resolve(confirm && confirm.value);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -77,7 +77,6 @@ export class ConnectionManagementService extends Disposable implements IConnecti
|
|||||||
private _onConnectRequestSent = new Emitter<void>();
|
private _onConnectRequestSent = new Emitter<void>();
|
||||||
private _onConnectionChanged = new Emitter<IConnectionParams>();
|
private _onConnectionChanged = new Emitter<IConnectionParams>();
|
||||||
private _onLanguageFlavorChanged = new Emitter<sqlops.DidChangeLanguageFlavorParams>();
|
private _onLanguageFlavorChanged = new Emitter<sqlops.DidChangeLanguageFlavorParams>();
|
||||||
|
|
||||||
private _connectionGlobalStatus = new ConnectionGlobalStatus(this._statusBarService);
|
private _connectionGlobalStatus = new ConnectionGlobalStatus(this._statusBarService);
|
||||||
|
|
||||||
private _configurationEditService: ConfigurationEditingService;
|
private _configurationEditService: ConfigurationEditingService;
|
||||||
@@ -124,16 +123,6 @@ export class ConnectionManagementService extends Disposable implements IConnecti
|
|||||||
100 /* High Priority */
|
100 /* High Priority */
|
||||||
));
|
));
|
||||||
|
|
||||||
if (_capabilitiesService && Object.keys(_capabilitiesService.providers).length > 0 && !this.hasRegisteredServers()) {
|
|
||||||
// prompt the user for a new connection on startup if no profiles are registered
|
|
||||||
this.showConnectionDialog();
|
|
||||||
} else if (_capabilitiesService && !this.hasRegisteredServers()) {
|
|
||||||
_capabilitiesService.onCapabilitiesRegistered(e => {
|
|
||||||
// prompt the user for a new connection on startup if no profiles are registered
|
|
||||||
this.showConnectionDialog();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const registry = platform.Registry.as<IConnectionProviderRegistry>(ConnectionProviderExtensions.ConnectionProviderContributions);
|
const registry = platform.Registry.as<IConnectionProviderRegistry>(ConnectionProviderExtensions.ConnectionProviderContributions);
|
||||||
|
|
||||||
let providerRegistration = (p: { id: string, properties: ConnectionProviderProperties }) => {
|
let providerRegistration = (p: { id: string, properties: ConnectionProviderProperties }) => {
|
||||||
@@ -282,29 +271,30 @@ export class ConnectionManagementService extends Disposable implements IConnecti
|
|||||||
* @param options to use after the connection is complete
|
* @param options to use after the connection is complete
|
||||||
*/
|
*/
|
||||||
private tryConnect(connection: IConnectionProfile, owner: IConnectableInput, options?: IConnectionCompletionOptions): Promise<IConnectionResult> {
|
private tryConnect(connection: IConnectionProfile, owner: IConnectableInput, options?: IConnectionCompletionOptions): Promise<IConnectionResult> {
|
||||||
|
let self = this;
|
||||||
return new Promise<IConnectionResult>((resolve, reject) => {
|
return new Promise<IConnectionResult>((resolve, reject) => {
|
||||||
// Load the password if it's not already loaded
|
// Load the password if it's not already loaded
|
||||||
this._connectionStore.addSavedPassword(connection).then(result => {
|
self._connectionStore.addSavedPassword(connection).then(result => {
|
||||||
let newConnection = result.profile;
|
let newConnection = result.profile;
|
||||||
let foundPassword = result.savedCred;
|
let foundPassword = result.savedCred;
|
||||||
|
|
||||||
// If there is no password, try to load it from an existing connection
|
// If there is no password, try to load it from an existing connection
|
||||||
if (!foundPassword && this._connectionStore.isPasswordRequired(newConnection)) {
|
if (!foundPassword && self._connectionStore.isPasswordRequired(newConnection)) {
|
||||||
let existingConnection = this._connectionStatusManager.findConnectionProfile(connection);
|
let existingConnection = self._connectionStatusManager.findConnectionProfile(connection);
|
||||||
if (existingConnection && existingConnection.connectionProfile) {
|
if (existingConnection && existingConnection.connectionProfile) {
|
||||||
newConnection.password = existingConnection.connectionProfile.password;
|
newConnection.password = existingConnection.connectionProfile.password;
|
||||||
foundPassword = true;
|
foundPassword = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// If the password is required and still not loaded show the dialog
|
// If the password is required and still not loaded show the dialog
|
||||||
if (!foundPassword && this._connectionStore.isPasswordRequired(newConnection) && !newConnection.password) {
|
if (!foundPassword && self._connectionStore.isPasswordRequired(newConnection) && !newConnection.password) {
|
||||||
resolve(this.showConnectionDialogOnError(connection, owner, { connected: false, errorMessage: undefined, callStack: undefined, errorCode: undefined }, options));
|
resolve(self.showConnectionDialogOnError(connection, owner, { connected: false, errorMessage: undefined, callStack: undefined, errorCode: undefined }, options));
|
||||||
} else {
|
} else {
|
||||||
// Try to connect
|
// Try to connect
|
||||||
this.connectWithOptions(newConnection, owner.uri, options, owner).then(connectionResult => {
|
self.connectWithOptions(newConnection, owner.uri, options, owner).then(connectionResult => {
|
||||||
if (!connectionResult.connected && !connectionResult.errorHandled) {
|
if (!connectionResult.connected && !connectionResult.errorHandled) {
|
||||||
// If connection fails show the dialog
|
// If connection fails show the dialog
|
||||||
resolve(this.showConnectionDialogOnError(connection, owner, connectionResult, options));
|
resolve(self.showConnectionDialogOnError(connection, owner, connectionResult, options));
|
||||||
} else {
|
} else {
|
||||||
//Resolve with the connection result
|
//Resolve with the connection result
|
||||||
resolve(connectionResult);
|
resolve(connectionResult);
|
||||||
@@ -390,7 +380,14 @@ export class ConnectionManagementService extends Disposable implements IConnecti
|
|||||||
if (this._connectionStatusManager.isConnected(ownerUri)) {
|
if (this._connectionStatusManager.isConnected(ownerUri)) {
|
||||||
resolve(this._connectionStatusManager.getOriginalOwnerUri(ownerUri));
|
resolve(this._connectionStatusManager.getOriginalOwnerUri(ownerUri));
|
||||||
} else {
|
} else {
|
||||||
this.connect(connection, ownerUri).then(connectionResult => {
|
const options: IConnectionCompletionOptions = {
|
||||||
|
saveTheConnection: false,
|
||||||
|
showConnectionDialogOnError: true,
|
||||||
|
showDashboard: purpose === 'dashboard',
|
||||||
|
params: undefined,
|
||||||
|
showFirewallRuleOnError: true,
|
||||||
|
};
|
||||||
|
this.connect(connection, ownerUri, options).then(connectionResult => {
|
||||||
if (connectionResult && connectionResult.connected) {
|
if (connectionResult && connectionResult.connected) {
|
||||||
resolve(this._connectionStatusManager.getOriginalOwnerUri(ownerUri));
|
resolve(this._connectionStatusManager.getOriginalOwnerUri(ownerUri));
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -23,9 +23,7 @@ export class ConnectionStatusbarItem implements IStatusbarItem {
|
|||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@IConnectionManagementService private _connectionManagementService: IConnectionManagementService,
|
@IConnectionManagementService private _connectionManagementService: IConnectionManagementService,
|
||||||
@IEditorGroupsService private _editorGroupService: IEditorGroupsService,
|
|
||||||
@IEditorService private _editorService: EditorServiceImpl,
|
@IEditorService private _editorService: EditorServiceImpl,
|
||||||
@ICapabilitiesService private _capabilitiesService: ICapabilitiesService,
|
|
||||||
@IObjectExplorerService private _objectExplorerService: IObjectExplorerService,
|
@IObjectExplorerService private _objectExplorerService: IObjectExplorerService,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ export function parseTimeString(value: string): number | boolean {
|
|||||||
* @param value The number of milliseconds to convert to a timespan string
|
* @param value The number of milliseconds to convert to a timespan string
|
||||||
* @returns A properly formatted timespan string.
|
* @returns A properly formatted timespan string.
|
||||||
*/
|
*/
|
||||||
export function parseNumAsTimeString(value: number): string {
|
export function parseNumAsTimeString(value: number, includeFraction: boolean = true): string {
|
||||||
let tempVal = value;
|
let tempVal = value;
|
||||||
let h = Math.floor(tempVal / msInH);
|
let h = Math.floor(tempVal / msInH);
|
||||||
tempVal %= msInH;
|
tempVal %= msInH;
|
||||||
@@ -85,7 +85,7 @@ export function parseNumAsTimeString(value: number): string {
|
|||||||
|
|
||||||
let rs = hs + ':' + ms + ':' + ss;
|
let rs = hs + ':' + ms + ':' + ss;
|
||||||
|
|
||||||
return tempVal > 0 ? rs + '.' + mss : rs;
|
return tempVal > 0 && includeFraction ? rs + '.' + mss : rs;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function generateUri(connection: IConnectionProfile, purpose?: 'dashboard' | 'insights' | 'connection'): string {
|
export function generateUri(connection: IConnectionProfile, purpose?: 'dashboard' | 'insights' | 'connection'): string {
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ export class AdvancedPropertiesController {
|
|||||||
public get advancedDialog() {
|
public get advancedDialog() {
|
||||||
if (!this._advancedDialog) {
|
if (!this._advancedDialog) {
|
||||||
this._advancedDialog = this._instantiationService.createInstance(
|
this._advancedDialog = this._instantiationService.createInstance(
|
||||||
OptionsDialog, localize('connectionAdvancedProperties', 'Advanced properties'), TelemetryKeys.ConnectionAdvancedProperties, { hasBackButton: true });
|
OptionsDialog, localize('connectionAdvancedProperties', 'Advanced Properties'), TelemetryKeys.ConnectionAdvancedProperties, { hasBackButton: true });
|
||||||
this._advancedDialog.cancelLabel = localize('advancedProperties.discard', 'Discard');
|
this._advancedDialog.cancelLabel = localize('advancedProperties.discard', 'Discard');
|
||||||
this._advancedDialog.onCloseEvent(() => this._onCloseAdvancedProperties());
|
this._advancedDialog.onCloseEvent(() => this._onCloseAdvancedProperties());
|
||||||
this._advancedDialog.onOk(() => this.handleOnOk());
|
this._advancedDialog.onOk(() => this.handleOnOk());
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ import * as styler from 'vs/platform/theme/common/styler';
|
|||||||
import * as DOM from 'vs/base/browser/dom';
|
import * as DOM from 'vs/base/browser/dom';
|
||||||
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
|
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
|
||||||
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
|
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
|
||||||
|
import { SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme';
|
||||||
|
|
||||||
export interface OnShowUIResponse {
|
export interface OnShowUIResponse {
|
||||||
selectedProviderType: string;
|
selectedProviderType: string;
|
||||||
@@ -49,7 +50,7 @@ export class ConnectionDialogWidget extends Modal {
|
|||||||
private _noRecentConnectionBuilder: Builder;
|
private _noRecentConnectionBuilder: Builder;
|
||||||
private _savedConnectionBuilder: Builder;
|
private _savedConnectionBuilder: Builder;
|
||||||
private _noSavedConnectionBuilder: Builder;
|
private _noSavedConnectionBuilder: Builder;
|
||||||
private _dividerBuilder: Builder;
|
private _connectionDetailTitle: Builder;
|
||||||
private _connectButton: Button;
|
private _connectButton: Button;
|
||||||
private _closeButton: Button;
|
private _closeButton: Button;
|
||||||
private _providerTypeSelectBox: SelectBox;
|
private _providerTypeSelectBox: SelectBox;
|
||||||
@@ -82,6 +83,8 @@ export class ConnectionDialogWidget extends Modal {
|
|||||||
private _onResetConnection = new Emitter<void>();
|
private _onResetConnection = new Emitter<void>();
|
||||||
public onResetConnection: Event<void> = this._onResetConnection.event;
|
public onResetConnection: Event<void> = this._onResetConnection.event;
|
||||||
|
|
||||||
|
private _connecting = false;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private providerTypeOptions: string[],
|
private providerTypeOptions: string[],
|
||||||
private selectedProviderType: string,
|
private selectedProviderType: string,
|
||||||
@@ -143,7 +146,7 @@ export class ConnectionDialogWidget extends Modal {
|
|||||||
this._panel = new TabbedPanel(connectionContainer.getHTMLElement());
|
this._panel = new TabbedPanel(connectionContainer.getHTMLElement());
|
||||||
this._recentConnectionTabId = this._panel.pushTab({
|
this._recentConnectionTabId = this._panel.pushTab({
|
||||||
identifier: 'recent_connection',
|
identifier: 'recent_connection',
|
||||||
title: localize('recentConnectionTitle', 'Recent connections'),
|
title: localize('recentConnectionTitle', 'Recent Connections'),
|
||||||
view: {
|
view: {
|
||||||
render: c => {
|
render: c => {
|
||||||
recentConnectionTab.appendTo(c);
|
recentConnectionTab.appendTo(c);
|
||||||
@@ -154,7 +157,7 @@ export class ConnectionDialogWidget extends Modal {
|
|||||||
|
|
||||||
let savedConnectionTabId = this._panel.pushTab({
|
let savedConnectionTabId = this._panel.pushTab({
|
||||||
identifier: 'saved_connection',
|
identifier: 'saved_connection',
|
||||||
title: localize('savedConnectionTitle', 'Saved connections'),
|
title: localize('savedConnectionTitle', 'Saved Connections'),
|
||||||
view: {
|
view: {
|
||||||
layout: () => { },
|
layout: () => { },
|
||||||
render: c => {
|
render: c => {
|
||||||
@@ -179,8 +182,9 @@ export class ConnectionDialogWidget extends Modal {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this._bodyBuilder.div({ class: 'Connection-divider' }, (dividerContainer) => {
|
this._bodyBuilder.div({ class: 'connection-details-title' }, (dividerContainer) => {
|
||||||
this._dividerBuilder = dividerContainer;
|
this._connectionDetailTitle = dividerContainer;
|
||||||
|
this._connectionDetailTitle.text(localize('connectionDetailsTitle', 'Connection Details'));
|
||||||
});
|
});
|
||||||
|
|
||||||
this._bodyBuilder.div({ class: 'connection-type' }, (modelTableContent) => {
|
this._bodyBuilder.div({ class: 'connection-type' }, (modelTableContent) => {
|
||||||
@@ -217,10 +221,12 @@ export class ConnectionDialogWidget extends Modal {
|
|||||||
private updateTheme(theme: IColorTheme): void {
|
private updateTheme(theme: IColorTheme): void {
|
||||||
let borderColor = theme.getColor(contrastBorder);
|
let borderColor = theme.getColor(contrastBorder);
|
||||||
let border = borderColor ? borderColor.toString() : null;
|
let border = borderColor ? borderColor.toString() : null;
|
||||||
if (this._dividerBuilder) {
|
let backgroundColor = theme.getColor(SIDE_BAR_BACKGROUND);
|
||||||
this._dividerBuilder.style('border-top-width', border ? '1px' : null);
|
if (this._connectionDetailTitle) {
|
||||||
this._dividerBuilder.style('border-top-style', border ? 'solid' : null);
|
this._connectionDetailTitle.style('border-width', border ? '1px 0px' : null);
|
||||||
this._dividerBuilder.style('border-top-color', border);
|
this._connectionDetailTitle.style('border-style', border ? 'solid none' : null);
|
||||||
|
this._connectionDetailTitle.style('border-color', border);
|
||||||
|
this._connectionDetailTitle.style('background-color', backgroundColor ? backgroundColor.toString() : null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -244,6 +250,7 @@ export class ConnectionDialogWidget extends Modal {
|
|||||||
|
|
||||||
private connect(element?: IConnectionProfile): void {
|
private connect(element?: IConnectionProfile): void {
|
||||||
if (this._connectButton.enabled) {
|
if (this._connectButton.enabled) {
|
||||||
|
this._connecting = true;
|
||||||
this._connectButton.enabled = false;
|
this._connectButton.enabled = false;
|
||||||
this._providerTypeSelectBox.disable();
|
this._providerTypeSelectBox.disable();
|
||||||
this.showSpinner();
|
this.showSpinner();
|
||||||
@@ -264,8 +271,9 @@ export class ConnectionDialogWidget extends Modal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private cancel() {
|
private cancel() {
|
||||||
|
let wasConnecting = this._connecting;
|
||||||
this._onCancel.fire();
|
this._onCancel.fire();
|
||||||
if (!this._databaseDropdownExpanded) {
|
if (!this._databaseDropdownExpanded && !wasConnecting) {
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -277,17 +285,13 @@ export class ConnectionDialogWidget extends Modal {
|
|||||||
|
|
||||||
private createRecentConnectionList(): void {
|
private createRecentConnectionList(): void {
|
||||||
this._recentConnectionBuilder.div({ class: 'connection-recent-content' }, (recentConnectionContainer) => {
|
this._recentConnectionBuilder.div({ class: 'connection-recent-content' }, (recentConnectionContainer) => {
|
||||||
let recentHistoryLabel = localize('recentHistory', 'Recent history');
|
|
||||||
recentConnectionContainer.div({ class: 'recent-titles-container' }, (container) => {
|
recentConnectionContainer.div({ class: 'recent-titles-container' }, (container) => {
|
||||||
container.div({ class: 'connection-history-label' }, (recentTitle) => {
|
|
||||||
recentTitle.text(recentHistoryLabel);
|
|
||||||
});
|
|
||||||
container.div({ class: 'connection-history-actions' }, (actionsContainer) => {
|
container.div({ class: 'connection-history-actions' }, (actionsContainer) => {
|
||||||
this._actionbar = this._register(new ActionBar(actionsContainer.getHTMLElement(), { animated: false }));
|
this._actionbar = this._register(new ActionBar(actionsContainer.getHTMLElement(), { animated: false }));
|
||||||
let clearAction = this._instantiationService.createInstance(ClearRecentConnectionsAction, ClearRecentConnectionsAction.ID, ClearRecentConnectionsAction.LABEL);
|
let clearAction = this._instantiationService.createInstance(ClearRecentConnectionsAction, ClearRecentConnectionsAction.ID, ClearRecentConnectionsAction.LABEL);
|
||||||
clearAction.useConfirmationMessage = true;
|
clearAction.useConfirmationMessage = true;
|
||||||
clearAction.onRecentConnectionsRemoved(() => this.open(false));
|
clearAction.onRecentConnectionsRemoved(() => this.open(false));
|
||||||
this._actionbar.push(clearAction, { icon: true, label: false });
|
this._actionbar.push(clearAction, { icon: true, label: true });
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
recentConnectionContainer.div({ class: 'server-explorer-viewlet' }, (divContainer: Builder) => {
|
recentConnectionContainer.div({ class: 'server-explorer-viewlet' }, (divContainer: Builder) => {
|
||||||
@@ -426,6 +430,7 @@ export class ConnectionDialogWidget extends Modal {
|
|||||||
this._connectButton.enabled = true;
|
this._connectButton.enabled = true;
|
||||||
this._providerTypeSelectBox.enable();
|
this._providerTypeSelectBox.enable();
|
||||||
this._onResetConnection.fire();
|
this._onResetConnection.fire();
|
||||||
|
this._connecting = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public get newConnectionParams(): INewConnectionParams {
|
public get newConnectionParams(): INewConnectionParams {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
|||||||
import { ConnectionOptionSpecialType } from 'sql/workbench/api/common/sqlExtHostTypes';
|
import { ConnectionOptionSpecialType } from 'sql/workbench/api/common/sqlExtHostTypes';
|
||||||
import * as Constants from 'sql/parts/connection/common/constants';
|
import * as Constants from 'sql/parts/connection/common/constants';
|
||||||
import { ConnectionProfileGroup, IConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup';
|
import { ConnectionProfileGroup, IConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup';
|
||||||
import { attachInputBoxStyler, attachButtonStyler, attachEditableDropdownStyler } from 'sql/common/theme/styler';
|
import { attachButtonStyler, attachCheckboxStyler, attachEditableDropdownStyler, attachInputBoxStyler } from 'sql/common/theme/styler';
|
||||||
import { Dropdown } from 'sql/base/browser/ui/editableDropdown/dropdown';
|
import { Dropdown } from 'sql/base/browser/ui/editableDropdown/dropdown';
|
||||||
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
|
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
|
||||||
import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesService';
|
import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesService';
|
||||||
@@ -83,7 +83,7 @@ export class ConnectionWidget {
|
|||||||
};
|
};
|
||||||
public NoneServerGroup: IConnectionProfileGroup = {
|
public NoneServerGroup: IConnectionProfileGroup = {
|
||||||
id: '',
|
id: '',
|
||||||
name: localize('noneServerGroup', '<None>'),
|
name: localize('noneServerGroup', '<Do not save>'),
|
||||||
parentId: undefined,
|
parentId: undefined,
|
||||||
color: undefined,
|
color: undefined,
|
||||||
description: undefined,
|
description: undefined,
|
||||||
@@ -274,6 +274,7 @@ export class ConnectionWidget {
|
|||||||
this._toDispose.push(attachInputBoxStyler(this._passwordInputBox, this._themeService));
|
this._toDispose.push(attachInputBoxStyler(this._passwordInputBox, this._themeService));
|
||||||
this._toDispose.push(styler.attachSelectBoxStyler(this._serverGroupSelectBox, this._themeService));
|
this._toDispose.push(styler.attachSelectBoxStyler(this._serverGroupSelectBox, this._themeService));
|
||||||
this._toDispose.push(attachButtonStyler(this._advancedButton, this._themeService));
|
this._toDispose.push(attachButtonStyler(this._advancedButton, this._themeService));
|
||||||
|
this._toDispose.push(attachCheckboxStyler(this._rememberPasswordCheckBox, this._themeService));
|
||||||
|
|
||||||
if (this._authTypeSelectBox) {
|
if (this._authTypeSelectBox) {
|
||||||
// Theme styler
|
// Theme styler
|
||||||
|
|||||||
@@ -9,25 +9,35 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.connection-input {
|
.connection-input {
|
||||||
padding-right:8px;
|
|
||||||
width: 200px;
|
width: 200px;
|
||||||
padding-bottom: 5px;
|
padding-bottom: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.connection-dialog {
|
.connection-dialog {
|
||||||
height: calc(100% - 20px);
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.connection-dialog .tabbedPanel {
|
.connection-dialog .tabbedPanel {
|
||||||
border-top-color: transparent;
|
border-top-color: transparent;
|
||||||
height: calc(100% - 350px);
|
flex: 1 1;
|
||||||
display: block;
|
|
||||||
min-height: 120px;
|
min-height: 120px;
|
||||||
|
overflow: hidden;
|
||||||
|
margin: 0px 11px;
|
||||||
|
}
|
||||||
|
.connection-dialog .tabBody {
|
||||||
|
overflow: hidden;
|
||||||
|
flex: 1 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
.connection-recent, .connection-saved {
|
.connection-recent, .connection-saved {
|
||||||
margin: 15px;
|
margin: 5px;
|
||||||
height: calc(100% - 60px);
|
flex: 1 1;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,6 +55,8 @@
|
|||||||
.recent-titles-container {
|
.recent-titles-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
margin: 5px;
|
||||||
|
flex: 0 0 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.connection-provider-info {
|
.connection-provider-info {
|
||||||
@@ -53,7 +65,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.connection-recent-content {
|
.connection-recent-content {
|
||||||
height: calc(100% - 20px);
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.connection-recent-content .server-explorer-viewlet {
|
||||||
|
flex: 1 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.connection-table-content {
|
.connection-table-content {
|
||||||
@@ -66,8 +84,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.connection-type {
|
.connection-type {
|
||||||
margin: 15px;
|
flex: 0 0 auto;
|
||||||
overflow-y: hidden;
|
overflow: hidden;
|
||||||
|
margin: 0px 13px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.connection-dialog .connection-history-actions .action-label.icon {
|
.connection-dialog .connection-history-actions .action-label.icon {
|
||||||
@@ -76,8 +95,9 @@
|
|||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
min-width: 20px;
|
min-width: 20px;
|
||||||
background-size: 16px;
|
background-size: 16px;
|
||||||
background-position: center center;
|
background-position: 2px center;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
|
padding-left: 25px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.search-action.clear-search-results {
|
.search-action.clear-search-results {
|
||||||
@@ -88,3 +108,10 @@
|
|||||||
.hc-black .search-action.clear-search-results {
|
.hc-black .search-action.clear-search-results {
|
||||||
background: url('clear-search-results-dark.svg');
|
background: url('clear-search-results-dark.svg');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.connection-details-title {
|
||||||
|
font-size: 14px;
|
||||||
|
margin: 5px 0px;
|
||||||
|
padding: 5px 15px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
@@ -5,6 +5,5 @@
|
|||||||
|
|
||||||
.advanced-button {
|
.advanced-button {
|
||||||
width: 100px;
|
width: 100px;
|
||||||
padding-right:8px;
|
|
||||||
padding-bottom: 5px;
|
padding-bottom: 5px;
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,7 @@ import { ModalFooterStyle } from 'sql/base/browser/ui/modal/modal';
|
|||||||
import { CategoryView } from 'sql/base/browser/ui/modal/optionsDialog';
|
import { CategoryView } from 'sql/base/browser/ui/modal/optionsDialog';
|
||||||
import { SelectBox } from 'sql/base/browser/ui/selectBox/selectBox';
|
import { SelectBox } from 'sql/base/browser/ui/selectBox/selectBox';
|
||||||
import { SplitView } from 'sql/base/browser/ui/splitview/splitview';
|
import { SplitView } from 'sql/base/browser/ui/splitview/splitview';
|
||||||
import { attachButtonStyler, attachListBoxStyler, attachInputBoxStyler, attachSelectBoxStyler } from 'sql/common/theme/styler';
|
import { attachButtonStyler, attachListBoxStyler, attachInputBoxStyler, attachSelectBoxStyler, attachCheckboxStyler } from 'sql/common/theme/styler';
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
||||||
import * as BackupConstants from 'sql/parts/disasterRecovery/backup/constants';
|
import * as BackupConstants from 'sql/parts/disasterRecovery/backup/constants';
|
||||||
import { IBackupService, IBackupUiService, TaskExecutionMode } from 'sql/parts/disasterRecovery/backup/common/backupService';
|
import { IBackupService, IBackupUiService, TaskExecutionMode } from 'sql/parts/disasterRecovery/backup/common/backupService';
|
||||||
@@ -523,6 +523,11 @@ export class BackupComponent {
|
|||||||
this._toDispose.push(attachInputBoxStyler(this.mediaNameBox, this.themeService));
|
this._toDispose.push(attachInputBoxStyler(this.mediaNameBox, this.themeService));
|
||||||
this._toDispose.push(attachInputBoxStyler(this.mediaDescriptionBox, this.themeService));
|
this._toDispose.push(attachInputBoxStyler(this.mediaDescriptionBox, this.themeService));
|
||||||
this._toDispose.push(attachInputBoxStyler(this.backupRetainDaysBox, this.themeService));
|
this._toDispose.push(attachInputBoxStyler(this.backupRetainDaysBox, this.themeService));
|
||||||
|
this._toDispose.push(attachCheckboxStyler(this.copyOnlyCheckBox, this.themeService));
|
||||||
|
this._toDispose.push(attachCheckboxStyler(this.encryptCheckBox, this.themeService));
|
||||||
|
this._toDispose.push(attachCheckboxStyler(this.verifyCheckBox, this.themeService));
|
||||||
|
this._toDispose.push(attachCheckboxStyler(this.checksumCheckBox, this.themeService));
|
||||||
|
this._toDispose.push(attachCheckboxStyler(this.continueOnErrorCheckBox, this.themeService));
|
||||||
|
|
||||||
this._toDispose.push(this.backupTypeSelectBox.onDidSelect(selected => this.onBackupTypeChanged()));
|
this._toDispose.push(this.backupTypeSelectBox.onDidSelect(selected => this.onBackupTypeChanged()));
|
||||||
this.addButtonClickHandler(this.addPathButton, () => this.onAddClick());
|
this.addButtonClickHandler(this.addPathButton, () => this.onAddClick());
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.backup-dialog {
|
.backup-dialog {
|
||||||
height: calc(100% - 15px)
|
height: 100%
|
||||||
}
|
}
|
||||||
|
|
||||||
.backup-dialog .advanced-main-header {
|
.backup-dialog .advanced-main-header {
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ import { Table } from 'sql/base/browser/ui/table/table';
|
|||||||
import { TableDataView } from 'sql/base/browser/ui/table/tableDataView';
|
import { TableDataView } from 'sql/base/browser/ui/table/tableDataView';
|
||||||
import * as DialogHelper from 'sql/base/browser/ui/modal/dialogHelper';
|
import * as DialogHelper from 'sql/base/browser/ui/modal/dialogHelper';
|
||||||
import { Modal } from 'sql/base/browser/ui/modal/modal';
|
import { Modal } from 'sql/base/browser/ui/modal/modal';
|
||||||
import { attachButtonStyler, attachModalDialogStyler, attachTableStyler, attachInputBoxStyler, attachSelectBoxStyler, attachEditableDropdownStyler } from 'sql/common/theme/styler';
|
import { attachButtonStyler, attachModalDialogStyler, attachTableStyler, attachInputBoxStyler, attachSelectBoxStyler, attachEditableDropdownStyler, attachCheckboxStyler } from 'sql/common/theme/styler';
|
||||||
import * as TelemetryKeys from 'sql/common/telemetryKeys';
|
import * as TelemetryKeys from 'sql/common/telemetryKeys';
|
||||||
import * as BackupConstants from 'sql/parts/disasterRecovery/backup/constants';
|
import * as BackupConstants from 'sql/parts/disasterRecovery/backup/constants';
|
||||||
import { RestoreViewModel, RestoreOptionParam, SouceDatabaseNamesParam } from 'sql/parts/disasterRecovery/restore/restoreViewModel';
|
import { RestoreViewModel, RestoreOptionParam, SouceDatabaseNamesParam } from 'sql/parts/disasterRecovery/restore/restoreViewModel';
|
||||||
@@ -532,6 +532,7 @@ export class RestoreDialog extends Modal {
|
|||||||
ariaLabel: label
|
ariaLabel: label
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
this._register(attachCheckboxStyler(checkbox, this._themeService));
|
||||||
return checkbox;
|
return checkbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
div.qp-node {
|
div.qp-node {
|
||||||
background-color: #FFFFCC;
|
|
||||||
margin: 2px;
|
margin: 2px;
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
border: 1px solid black;
|
border: 1px solid;
|
||||||
}
|
}
|
||||||
div.qp-statement-header {
|
div.qp-statement-header {
|
||||||
margin: 2px;
|
margin: 2px;
|
||||||
@@ -33,8 +32,7 @@ div[class|='qp-icon'] {
|
|||||||
.qp-tt {
|
.qp-tt {
|
||||||
top: 4em;
|
top: 4em;
|
||||||
left: 2em;
|
left: 2em;
|
||||||
border: 1px solid black;
|
border: 1px solid;
|
||||||
background-color: #FFFFEE;
|
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
width: 30em;
|
width: 30em;
|
||||||
}
|
}
|
||||||
@@ -56,7 +54,7 @@ div[class|='qp-icon'] {
|
|||||||
.qp-tt td,
|
.qp-tt td,
|
||||||
.qp-tt th {
|
.qp-tt th {
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
border-bottom: solid 1px Black;
|
border-bottom: solid 1px;
|
||||||
padding: 1px;
|
padding: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,8 +202,6 @@ div.qp-node:hover .qp-tt {
|
|||||||
.qp-root {
|
.qp-root {
|
||||||
display: table;
|
display: table;
|
||||||
position: relative;
|
position: relative;
|
||||||
background-color: #fff;
|
|
||||||
color: #000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.qp-root svg {
|
.qp-root svg {
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import { $ } from 'vs/base/browser/dom';
|
|
||||||
import { escape } from 'sql/base/common/strings';
|
import { escape } from 'sql/base/common/strings';
|
||||||
|
|
||||||
export class DBCellValue {
|
export class DBCellValue {
|
||||||
@@ -41,20 +40,24 @@ export function hyperLinkFormatter(row: number, cell: any, value: any, columnDef
|
|||||||
*/
|
*/
|
||||||
export function textFormatter(row: number, cell: any, value: any, columnDef: any, dataContext: any): string {
|
export function textFormatter(row: number, cell: any, value: any, columnDef: any, dataContext: any): string {
|
||||||
let cellClasses = 'grid-cell-value-container';
|
let cellClasses = 'grid-cell-value-container';
|
||||||
let valueToDisplay: string = '';
|
let valueToDisplay = '';
|
||||||
|
let titleValue = '';
|
||||||
|
|
||||||
if (DBCellValue.isDBCellValue(value)) {
|
if (DBCellValue.isDBCellValue(value)) {
|
||||||
valueToDisplay = 'NULL';
|
valueToDisplay = 'NULL';
|
||||||
if (!value.isNull) {
|
if (!value.isNull) {
|
||||||
valueToDisplay = escape(value.displayValue.replace(/(\r\n|\n|\r)/g, ' '));
|
valueToDisplay = value.displayValue.replace(/(\r\n|\n|\r)/g, ' ');
|
||||||
|
valueToDisplay = escape(valueToDisplay.length > 250 ? valueToDisplay.slice(0, 250) + '...' : valueToDisplay);
|
||||||
|
titleValue = value.displayValue;
|
||||||
} else {
|
} else {
|
||||||
cellClasses += ' missing-value';
|
cellClasses += ' missing-value';
|
||||||
}
|
}
|
||||||
} else if (typeof value === 'string') {
|
} else if (typeof value === 'string') {
|
||||||
valueToDisplay = escape(value);
|
valueToDisplay = escape(value.length > 250 ? value.slice(0, 250) + '...' : value);
|
||||||
|
titleValue = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
return `<span title="${valueToDisplay}" class="${cellClasses}">${valueToDisplay}</span>`;
|
return `<span title="${titleValue}" class="${cellClasses}">${valueToDisplay}</span>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The following code is a rewrite over the both formatter function using dom builder
|
/** The following code is a rewrite over the both formatter function using dom builder
|
||||||
|
|||||||
@@ -219,14 +219,10 @@ export class NewStepAction extends Action {
|
|||||||
|
|
||||||
public run(context: JobHistoryComponent): TPromise<boolean> {
|
public run(context: JobHistoryComponent): TPromise<boolean> {
|
||||||
let ownerUri = context.ownerUri;
|
let ownerUri = context.ownerUri;
|
||||||
let jobName = context.agentJobInfo.name;
|
|
||||||
let server = context.serverName;
|
let server = context.serverName;
|
||||||
let stepId = 0;
|
let jobInfo = context.agentJobInfo;
|
||||||
if (context.agentJobHistoryInfo && context.agentJobHistoryInfo.steps) {
|
|
||||||
stepId = context.agentJobHistoryInfo.steps.length + 1;
|
|
||||||
}
|
|
||||||
return new TPromise<boolean>((resolve, reject) => {
|
return new TPromise<boolean>((resolve, reject) => {
|
||||||
resolve(this._commandService.executeCommand('agent.openNewStepDialog', ownerUri, jobName, server, stepId));
|
resolve(this._commandService.executeCommand('agent.openNewStepDialog', ownerUri, server, jobInfo , null));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ export class JobManagementUtilities {
|
|||||||
case(4): return nls.localize('agentUtilities.idle', 'Idle');
|
case(4): return nls.localize('agentUtilities.idle', 'Idle');
|
||||||
case(5): return nls.localize('agentUtilities.suspended', 'Suspended');
|
case(5): return nls.localize('agentUtilities.suspended', 'Suspended');
|
||||||
case(6): return nls.localize('agentUtilities.obsolete', '[Obsolete]');
|
case(6): return nls.localize('agentUtilities.obsolete', '[Obsolete]');
|
||||||
case(7): return nls.localize('agentUtilities.performingCompletionActions', 'PerformingCompletionActions');
|
case(7): return 'PerformingCompletionActions';
|
||||||
default: return nls.localize('agentUtilities.statusUnknown', 'Status Unknown');
|
default: return nls.localize('agentUtilities.statusUnknown', 'Status Unknown');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -304,15 +304,15 @@ table.jobprevruns > tbody {
|
|||||||
background-image: url('refresh_inverse.svg');
|
background-image: url('refresh_inverse.svg');
|
||||||
}
|
}
|
||||||
|
|
||||||
.actionbar-container .monaco-action-bar > ul.actions-container {
|
.agent-actionbar-container .monaco-action-bar > ul.actions-container {
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
jobsview-component .actionbar-container {
|
jobsview-component .agent-actionbar-container {
|
||||||
height: 40px;
|
height: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.actionbar-container .monaco-action-bar > ul.actions-container > li.action-item {
|
.agent-actionbar-container .monaco-action-bar > ul.actions-container > li.action-item {
|
||||||
padding-left: 20px;
|
padding-left: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||