diff --git a/Marketplace.md b/Marketplace.md index d2a8f4f..9127443 100644 --- a/Marketplace.md +++ b/Marketplace.md @@ -12,13 +12,13 @@ After setting the goal, the goal will be shown in the tab-label on every page wi ## Release notes -### Version 4.0 - 5-02-2019 +### Version 5.0 - 29-07-2019 -- Support for dark theme -- From Azure hosted to self contained (Azure DevOps hosted) package -- No more issues with SSL on TFS (Azure DevOps Server) On-Premises -- No more error when no initial goal is set -- Several bugfixes (see GitHub closed issues) +- Rich Text field for detailed goal description +- Toggle to set if goal was achieved +- Export all sprint goals to JSON +- Toggle in settings to disable all telemetry +- Warning that sprint goal in tab title does not update when using inline sprint-picker For details of older releases check [GitHub Releases](https://github.com/keesschollaart81/vsts-sprint-goal/releases) @@ -29,7 +29,11 @@ For details of older releases check [GitHub Releases](https://github.com/keessch ## Privacy -Sprint Goal uses Application Insights to track telemetry. When: 'sprint form page loaded', 'sprint saved', data: the id's (guids) of the account, project and user. +Sprint Goal uses Application Insights to track some telemetry. 3 events are tracked: 'sprint form page loaded', 'sprint goal saved', and 'sprint widget configuration saved'. Your sprint goal and details never leave your Azure DevOps tenant / are not included in the telemetry. + +Telemetry can be disabled on the settings page of Sprint Goal which can be found in the Azure DevOps project settings. + +When saving the sprint goal, we track if you're showing the goal in the tab title (yes/no) and if the detail text field is used (yes/no) (more than 10 characters). When updating the widget, the size and color of the widget. For every telemetry the id's (guids) of the account, project and user are included as metadata. ## Contact diff --git a/images/dist/screenshots-vsts-sprint-goal-2.png b/images/dist/screenshots-vsts-sprint-goal-2.png index 19f73c6..dd065f7 100644 Binary files a/images/dist/screenshots-vsts-sprint-goal-2.png and b/images/dist/screenshots-vsts-sprint-goal-2.png differ diff --git a/images/dist/sprint-goal-gif.gif b/images/dist/sprint-goal-gif.gif index 32e4aca..3ce0b90 100644 Binary files a/images/dist/sprint-goal-gif.gif and b/images/dist/sprint-goal-gif.gif differ diff --git a/script/sprint-goal.ts b/script/sprint-goal.ts index 2dd3488..b577375 100644 --- a/script/sprint-goal.ts +++ b/script/sprint-goal.ts @@ -12,7 +12,7 @@ import { RunningDocumentsTable } from "VSS/Events/Document"; export class SprintGoal { private iterationId: string; private teamId: string; - private storageUri: string; + private storageUri: HTMLAnchorElement; private waitControl: StatusIndicator.WaitControl; private editor: RoosterJs.Editor; private helpers: Helpers; @@ -22,7 +22,7 @@ export class SprintGoal { this.helpers = new Helpers(); var context = VSS.getExtensionContext(); - this.storageUri = this.getLocation(context.baseUri).hostname; + this.storageUri = this.getLocation(context.baseUri); var webContext = VSS.getWebContext(); this.log('TeamId:' + webContext.team.id); @@ -153,14 +153,18 @@ export class SprintGoal { this.log("getTabTitle: Sprint goal net yet loaded in cookie, getting it async..."); try { var settings = await this.getSettings(true); - return "Goal: " + settings.goal; + if (settings.goal && settings.goal != "") { + return "Goal: " + settings.goal; + } else { + return "Goal"; + } } catch{ return "Goal"; } } - if (sprintGoalCookie && sprintGoalCookie.sprintGoalInTabLabel && sprintGoalCookie.goal != null) { + if (sprintGoalCookie && sprintGoalCookie.sprintGoalInTabLabel && sprintGoalCookie.goal != null && sprintGoalCookie.goal != "") { this.log("getTabTitle: loaded title from cookie"); return "Goal: " + sprintGoalCookie.goal; } @@ -206,9 +210,10 @@ export class SprintGoal { }; if (this.ai) { - if (sprintConfig.goal.substr(0, 1) != "!") { - await this.ai.trackEvent("SaveSettings", sprintConfig); - } + await this.ai.trackEvent("SaveSettings", { + sprintGoalInTabLabel: sprintConfig.sprintGoalInTabLabel, + detailsUsed: `${this.editor.getTextContent()}`.length > 10 + }); } var configIdentifierWithTeam: string = this.helpers.getConfigKey(this.iterationId, this.teamId); @@ -306,7 +311,7 @@ export class SprintGoal { public setCookie = (key, value) => { var expires = new Date(); expires.setTime(expires.getTime() + (1 * 24 * 60 * 60 * 1000)); - document.cookie = key + '=' + value + ';expires=' + expires.toUTCString() + ';domain=' + this.storageUri + ';path=/'; + document.cookie = key + '=' + value + ';expires=' + expires.toUTCString() + ';domain=' + this.storageUri.hostname + ';path=/'; } public getCookie(key) { @@ -323,7 +328,7 @@ export class SprintGoal { private log = (message: string, object: any = null) => { if (!window.console) return; - if (this.storageUri.indexOf('dev') === -1 && this.storageUri.indexOf('acc') === -1) return; + if (this.storageUri.href.indexOf('dev') === -1 && this.storageUri.href.indexOf('acc') === -1) return; if (object) { console.log(message, object); diff --git a/static/SprintGoalAdmin.html b/static/SprintGoalAdmin.html index 807a3f2..da173db 100644 --- a/static/SprintGoalAdmin.html +++ b/static/SprintGoalAdmin.html @@ -84,7 +84,7 @@

Sprint Goal

- Some data is send to the monitoring backend of the developer to make this a better product. Turn this toggle to 'on' to disable this behaviour. + Some data is send to the monitoring backend of the developer to make this a better product. Turn this toggle to 'on' to disable this behaviour. More info about telemetry/private can be found on the Azure Marketplace / Privacy section.
@@ -94,8 +94,7 @@

Sprint Goal

- -

+
diff --git a/vss-extension.json b/vss-extension.json index 4fb89b7..e08ccdc 100644 --- a/vss-extension.json +++ b/vss-extension.json @@ -2,7 +2,7 @@ "manifestVersion": 1, "id": "sprint-goal-dev", "name": "Sprint Goal Dev", - "version": "4.1.33", + "version": "5.0.0", "publisher": "keesschollaart", "public": false, "helpMarkDown": "[More Information](https://github.com/keesschollaart81/vsts-sprint-goal)",