1
diff --git a/extensions/markdown/package.json b/extensions/markdown/package.json
index 36c6020d1fc..b4b372414fb 100644
--- a/extensions/markdown/package.json
+++ b/extensions/markdown/package.json
@@ -4,6 +4,7 @@
"description": "Markdown for VS Code",
"version": "0.2.0",
"publisher": "Microsoft",
+ "aiKey":"AIF-d9b70cd4-b9f9-4d70-929b-a071c400b217",
"engines": {
"vscode": "^1.0.0"
},
@@ -13,7 +14,8 @@
],
"activationEvents": [
"onCommand:markdown.showPreview",
- "onCommand:markdown.showPreviewToSide"
+ "onCommand:markdown.showPreviewToSide",
+ "onCommand:markdown.showSource"
],
"contributes": {
"languages": [
@@ -53,7 +55,7 @@
},
{
"command": "markdown.showSource",
- "title": "%markdown.previewMarkdown.title%",
+ "title": "%markdown.showSource.title%",
"category": "%markdown.category%",
"icon": {
"light": "./media/ViewSource.svg",
@@ -103,6 +105,7 @@
"dependencies": {
"highlight.js": "^9.3.0",
"markdown-it": "^6.0.1",
- "markdown-it-named-headers": "0.0.4"
+ "markdown-it-named-headers": "0.0.4",
+ "vscode-extension-telemetry": "^0.0.5"
}
}
\ No newline at end of file
diff --git a/extensions/markdown/package.nls.json b/extensions/markdown/package.nls.json
index 8c3b2a994bc..f5269c03855 100644
--- a/extensions/markdown/package.nls.json
+++ b/extensions/markdown/package.nls.json
@@ -1,6 +1,7 @@
{
"markdown.category" : "Markdown",
"markdown.openPreview" : "Open Preview",
- "markdown.previewMarkdown.title" : "Toggle Preview",
- "markdown.previewMarkdownSide.title" : "Open Preview to the Side"
+ "markdown.previewMarkdown.title" : "Show Preview",
+ "markdown.previewMarkdownSide.title" : "Open Preview to the Side",
+ "markdown.showSource.title" : "Show Source"
}
\ No newline at end of file
diff --git a/extensions/markdown/src/extension.ts b/extensions/markdown/src/extension.ts
index 99486ad5451..b2b8c42a4fb 100644
--- a/extensions/markdown/src/extension.ts
+++ b/extensions/markdown/src/extension.ts
@@ -7,23 +7,23 @@
import * as vscode from 'vscode';
import * as path from 'path';
-import { ExtensionContext, TextDocumentContentProvider, EventEmitter, Event, Uri, ViewColumn } from "vscode";
+import { ExtensionContext, TextDocumentContentProvider, EventEmitter, Event, Uri, ViewColumn } from 'vscode';
+import TelemetryReporter from 'vscode-extension-telemetry';
-const hljs = require('highlight.js');
-const mdnh = require('markdown-it-named-headers');
-const md = require('markdown-it')({
- html: true,
- highlight: function (str, lang) {
- if (lang && hljs.getLanguage(lang)) {
- try {
- return `${hljs.highlight(lang, str, true).value}
`;
- } catch (error) { }
- }
- return `${md.utils.escapeHtml(str)}
`;
- }
-}).use(mdnh, {});
+
+interface IPackageInfo {
+ name: string;
+ version: string;
+ aiKey: string;
+}
+
+var telemetryReporter: TelemetryReporter;
export function activate(context: ExtensionContext) {
+
+ let packageInfo = getPackageInfo(context);
+ telemetryReporter = packageInfo && new TelemetryReporter(packageInfo.name, packageInfo.version, packageInfo.aiKey);
+
let provider = new MDDocumentContentProvider(context);
let registration = vscode.workspace.registerTextDocumentContentProvider('markdown', provider);
@@ -66,8 +66,9 @@ function getMarkdownUri(uri: Uri) {
return uri.with({ scheme: 'markdown', path: uri.path + '.rendered', query: uri.toString() });
}
-function showPreview(resource?: Uri, sideBySide: boolean = false) {
+function showPreview(uri?: Uri, sideBySide: boolean = false) {
+ let resource = uri;
if (!(resource instanceof Uri)) {
if (vscode.window.activeTextEditor) {
// we are relaxed and don't check for markdown files
@@ -76,14 +77,25 @@ function showPreview(resource?: Uri, sideBySide: boolean = false) {
}
if (!(resource instanceof Uri)) {
- // nothing found that could be shown
+ if (!vscode.window.activeTextEditor) {
+ // this is most likely toggling the preview
+ return vscode.commands.executeCommand('markdown.showSource');
+ }
+ // nothing found that could be shown or toggled
return;
}
- return vscode.commands.executeCommand('vscode.previewHtml',
+ let thenable = vscode.commands.executeCommand('vscode.previewHtml',
getMarkdownUri(resource),
getViewColumn(sideBySide),
`Preview '${path.basename(resource.fsPath)}'`);
+
+ telemetryReporter.sendTelemetryEvent('openPreview', {
+ where : sideBySide ? 'sideBySide' : 'inPlace',
+ how : (uri instanceof Uri) ? 'action' : 'pallete'
+ });
+
+ return thenable;
}
function getViewColumn(sideBySide): ViewColumn {
@@ -107,6 +119,10 @@ function getViewColumn(sideBySide): ViewColumn {
}
function showSource(mdUri: Uri) {
+ if (!mdUri) {
+ return vscode.commands.executeCommand('workbench.action.navigateBack');
+ }
+
const docUri = Uri.parse(mdUri.query);
for (let editor of vscode.window.visibleTextEditors) {
@@ -120,14 +136,50 @@ function showSource(mdUri: Uri) {
});
}
+function getPackageInfo(context: ExtensionContext): IPackageInfo {
+ let extensionPackage = require(context.asAbsolutePath('./package.json'));
+ if (extensionPackage) {
+ return {
+ name: extensionPackage.name,
+ version: extensionPackage.version,
+ aiKey: extensionPackage.aiKey
+ };
+ }
+ return null;
+}
+
+
+interface IRenderer {
+ render(text: string) : string;
+}
+
class MDDocumentContentProvider implements TextDocumentContentProvider {
private _context: ExtensionContext;
private _onDidChange = new EventEmitter();
private _waiting : boolean;
+ private _renderer : IRenderer;
constructor(context: ExtensionContext) {
this._context = context;
this._waiting = false;
+ this._renderer = this.createRenderer();
+ }
+
+ private createRenderer() : IRenderer {
+ const hljs = require('highlight.js');
+ const mdnh = require('markdown-it-named-headers');
+ const md = require('markdown-it')({
+ html: true,
+ highlight: function (str, lang) {
+ if (lang && hljs.getLanguage(lang)) {
+ try {
+ return `${hljs.highlight(lang, str, true).value}
`;
+ } catch (error) { }
+ }
+ return `${md.utils.escapeHtml(str)}
`;
+ }
+ }).use(mdnh, {});
+ return md;
}
private getMediaPath(mediaFile) {
@@ -171,7 +223,7 @@ class MDDocumentContentProvider implements TextDocumentContentProvider {
''
).join('\n');
- const body = md.render(document.getText());
+ const body = this._renderer.render(document.getText());
const tail = [
'',
diff --git a/extensions/markdown/src/typings/vscode-extension-telemetry.d.ts b/extensions/markdown/src/typings/vscode-extension-telemetry.d.ts
new file mode 100644
index 00000000000..4b2981b9b24
--- /dev/null
+++ b/extensions/markdown/src/typings/vscode-extension-telemetry.d.ts
@@ -0,0 +1,6 @@
+declare module 'vscode-extension-telemetry' {
+ export default class TelemetryReporter {
+ constructor(extensionId: string,extensionVersion: string, key: string);
+ sendTelemetryEvent(eventName: string, properties?: { [key: string]: string }, measures?: { [key: string]: number }): void;
+ }
+}
\ No newline at end of file
diff --git a/extensions/node-debug/node-debug.azure.json b/extensions/node-debug/node-debug.azure.json
index 01d228a4a17..16f70569cb6 100644
--- a/extensions/node-debug/node-debug.azure.json
+++ b/extensions/node-debug/node-debug.azure.json
@@ -1,6 +1,6 @@
{
"account": "monacobuild",
"container": "debuggers",
- "zip": "f9803b8/node-debug.zip",
+ "zip": "c9a5762/node-debug.zip",
"output": ""
}
diff --git a/extensions/typescript/syntaxes/TypeScript.tmLanguage b/extensions/typescript/syntaxes/TypeScript.tmLanguage
index 890815f0e05..25e00f25b29 100644
--- a/extensions/typescript/syntaxes/TypeScript.tmLanguage
+++ b/extensions/typescript/syntaxes/TypeScript.tmLanguage
@@ -695,6 +695,48 @@
name
meta.indexer.parameter.ts
+