From 9e204b975361dbbcf6c908dd554c6be16c9c3e8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Malbr=C3=A1n?= Date: Fri, 22 Feb 2013 08:39:05 -0300 Subject: [PATCH 01/11] Adding the brackets contributor list to the about dialog --- src/brackets.config.json | 3 +- src/config.json | 3 +- src/help/HelpCommandHandlers.js | 91 +++++++++++++++++++++- src/htmlContent/about-dialog.html | 12 ++- src/nls/root/strings.js | 1 + src/styles/brackets_patterns_override.less | 4 + 6 files changed, 105 insertions(+), 9 deletions(-) diff --git a/src/brackets.config.json b/src/brackets.config.json index ad900960203..620b7fa6c36 100644 --- a/src/brackets.config.json +++ b/src/brackets.config.json @@ -13,6 +13,7 @@ "report_issue_url" : "https://github.com/adobe/brackets/wiki/How-to-Report-an-Issue", "twitter_url" : "https://twitter.com/brackets", "troubleshoot_url" : "https://github.com/adobe/brackets/wiki/Troubleshooting#wiki-livedev", - "twitter_name" : "@brackets" + "twitter_name" : "@brackets", + "contributors_url" : "https://api.github.com/repos/adobe/brackets/contributors" } } \ No newline at end of file diff --git a/src/config.json b/src/config.json index 239048cee94..17f5d68a03a 100644 --- a/src/config.json +++ b/src/config.json @@ -12,7 +12,8 @@ "report_issue_url": "https://github.com/adobe/brackets/wiki/How-to-Report-an-Issue", "twitter_url": "https://twitter.com/brackets", "troubleshoot_url": "https://github.com/adobe/brackets/wiki/Troubleshooting#wiki-livedev", - "twitter_name": "@brackets" + "twitter_name": "@brackets", + "contributors_url": "https://api.github.com/repos/adobe/brackets/contributors" }, "name": "Brackets", "version": "0.21.0-0", diff --git a/src/help/HelpCommandHandlers.js b/src/help/HelpCommandHandlers.js index 147261f7cf0..7d075383bd0 100644 --- a/src/help/HelpCommandHandlers.js +++ b/src/help/HelpCommandHandlers.js @@ -23,7 +23,7 @@ /*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50 */ -/*global define, $, brackets, window, Mustache */ +/*global define, $, brackets, window, PathUtils, Mustache */ define(function (require, exports, module) { "use strict"; @@ -38,11 +38,73 @@ define(function (require, exports, module) { UpdateNotification = require("utils/UpdateNotification"), FileUtils = require("file/FileUtils"), NativeApp = require("utils/NativeApp"), + PreferencesManager = require("preferences/PreferencesManager"), StringUtils = require("utils/StringUtils"), - AboutDialogTemplate = require("text!htmlContent/about-dialog.html"); + AboutDialogTemplate = require("text!htmlContent/about-dialog.html"), + ContributorsTemplate = require("text!htmlContent/contributors-list.html"); var buildInfo; - + + // PreferenceStorage + var _prefs = PreferencesManager.getPreferenceStorage(module.id); + + // Last time the contributorsInfo was fetched + var _lastContributorsFetchTime = _prefs.getValue("lastContributorsFetchTime"); + + + /** + * @private + * Gets a data structure that has information for all the contributors of Brackets. + * The information is fetched from brackets.config.contributors_url using github API. + * If more than 24 hours have passed since the last fetch, or if cached data can't be found, + * the data is fetched again. + * @return {$.Promise} jQuery Promise object that is resolved or rejected after the information is fetched. + */ + function _getContributorsInformation() { + var result = new $.Deferred(); + var fetchData = false; + var data; + + // If we don't have data saved in prefs, fetch + data = _prefs.getValue("contributorsInfo"); + if (!data) { + fetchData = true; + } + + // If more than 24 hours have passed since our last fetch, fetch again + if ((new Date()).getTime() > _lastContributorsFetchTime + (1000 * 60 * 60 * 24)) { + fetchData = true; + } + + if (fetchData) { + $.getJSON(brackets.config.contributors_url + "?callback=?", function (contributorsInfo) { + data = []; + + // Save only the required data for the template + $.each(contributorsInfo.data, function (index, element) { + data.push({ + GITHUB_URL : element.html_url, + AVATAR_URL : element.avatar_url, + NAME : element.login + }); + }); + _lastContributorsFetchTime = (new Date()).getTime(); + _prefs.setValue("lastContributorsFetchTime", _lastContributorsFetchTime); + _prefs.setValue("contributorsInfo", data); + + result.resolve(data); + + }).error(function () { + result.reject(); + }); + } else { + result.resolve(data); + } + + return result.promise(); + } + + function _handleCheckForUpdates() { UpdateNotification.checkForUpdate(true); } @@ -70,6 +132,29 @@ define(function (require, exports, module) { BUILD_INFO : buildInfo || "" }, Strings); Dialogs.showModalDialogUsingTemplate(Mustache.render(AboutDialogTemplate, templateVars)); + + + // Get all the project contributors and add them to the dialog + _getContributorsInformation().done(function (contributorsInfo) { + + // Populate the contributors data + var $dlg = $(".about-dialog.instance"); + var $updateList = $dlg.find(".about-contributors"); + + templateVars = $.extend({CONTRIBUTORS: contributorsInfo}, Strings); + $updateList.html(Mustache.to_html(ContributorsTemplate, templateVars)); + + $dlg.on("click", "img", function (e) { + var url = $(e.target).data("url"); + + if (url) { + // Make sure the URL has a domain that we know about + if (/(github\.com)$/i.test(PathUtils.parseUrl(url).hostname)) { + NativeApp.openURLInDefaultBrowser(url); + } + } + }); + }); } // Read "build number" SHAs off disk immediately at APP_READY, instead diff --git a/src/htmlContent/about-dialog.html b/src/htmlContent/about-dialog.html index 2e9cd84da1d..b7e34b41c8a 100644 --- a/src/htmlContent/about-dialog.html +++ b/src/htmlContent/about-dialog.html @@ -6,10 +6,14 @@

{{ABOUT}}

{{APP_NAME_ABOUT_BOX}}

-

{{ABOUT_TEXT_LINE1}} {{BUILD_INFO}}

-

Copyright 2012 - 2013 Adobe Systems Incorporated and its licensors. All rights reserved.

-

{{{ABOUT_TEXT_LINE3}}}

-

{{{ABOUT_TEXT_LINE4}}}

+
+

{{ABOUT_TEXT_LINE1}} {{BUILD_INFO}}

+

Copyright 2012 - 2013 Adobe Systems Incorporated and its licensors. All rights reserved.

+

{{{ABOUT_TEXT_LINE3}}}

+

{{{ABOUT_TEXT_LINE4}}}

+
+
+
diff --git a/src/htmlContent/contributors-list.html b/src/htmlContent/contributors-list.html index 4117bbdaabb..ea96ea73075 100644 --- a/src/htmlContent/contributors-list.html +++ b/src/htmlContent/contributors-list.html @@ -1,6 +1,3 @@ -

{{ABOUT_TEXT_LINE5}}

-
- {{#CONTRIBUTORS}} - {{NAME}} - {{/CONTRIBUTORS}} -
\ No newline at end of file +{{#CONTRIBUTORS}} +{{NAME}} +{{/CONTRIBUTORS}} \ No newline at end of file diff --git a/src/nls/root/strings.js b/src/nls/root/strings.js index 7e235267e5f..27399e493ed 100644 --- a/src/nls/root/strings.js +++ b/src/nls/root/strings.js @@ -278,7 +278,7 @@ define({ "ABOUT_TEXT_LINE1" : "sprint {VERSION_MINOR} {BUILD_TYPE} {VERSION}", "ABOUT_TEXT_LINE3" : "Notices, terms and conditions pertaining to third party software are located at http://www.adobe.com/go/thirdparty/ and incorporated by reference herein.", "ABOUT_TEXT_LINE4" : "Documentation and source at https://github.com/adobe/brackets/", - "ABOUT_TEXT_LINE5" : "Brackets Contributors:", + "ABOUT_TEXT_LINE5" : "Made with \u2764 and JavaScript by:", "UPDATE_NOTIFICATION_TOOLTIP" : "There's a new build of {APP_NAME} available! Click here for details.", "UPDATE_AVAILABLE_TITLE" : "Update Available", "UPDATE_MESSAGE" : "Hey, there's a new build of {APP_NAME} available. Here are some of the new features:", diff --git a/src/styles/brackets_patterns_override.less b/src/styles/brackets_patterns_override.less index edae34e71ee..5d3a393af7a 100644 --- a/src/styles/brackets_patterns_override.less +++ b/src/styles/brackets_patterns_override.less @@ -446,6 +446,18 @@ max-height: 300px; overflow: auto; } + .about-contributors { + min-width: 395px; + min-height: 100px; + background-color: whiteSmoke; + } + .about-contributors img { + opacity: 0; + -webkit-transition: opacity 1s; + -moz-transition: opacity 1s; + -o-transition: opacity 1s; + transition: opacity 1s; + } } h2 { From 0600c7fc2ac653b9b0e3d9f5bf1d38aa624418b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Malbr=C3=A1n?= Date: Mon, 25 Feb 2013 22:15:22 -0300 Subject: [PATCH 05/11] Fixing comments --- src/help/HelpCommandHandlers.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/help/HelpCommandHandlers.js b/src/help/HelpCommandHandlers.js index 41fd745223d..266cdcb4407 100644 --- a/src/help/HelpCommandHandlers.js +++ b/src/help/HelpCommandHandlers.js @@ -54,9 +54,9 @@ define(function (require, exports, module) { /** * @private - * Gets a data structure that has information for all the contributors of Brackets. - * The information is fetched from brackets.config.contributors_url using github API. - * If more than 24 hours have passed since the last fetch, or if cached data can't be found, + * Gets a data structure that has the information for all the contributors of Brackets. + * The information is fetched from brackets.config.contributors_url using the github API. + * If more than 2 weeks have passed since the last fetch, or if cached data can't be found, * the data is fetched again. * @return {$.Promise} jQuery Promise object that is resolved or rejected after the information is fetched. */ @@ -144,6 +144,7 @@ define(function (require, exports, module) { templateVars = $.extend({CONTRIBUTORS: contributorsInfo}, Strings); $contributors.html(Mustache.render(ContributorsTemplate, templateVars)); + // This is used to create an opacity transition when each image is loaded $dlg.find("img").one("load", function () { $(this).css("opacity", 1); }).each(function () { From d82c1124f0c256ac5fa01498b8fa527caadcb8ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Malbr=C3=A1n?= Date: Tue, 26 Feb 2013 00:08:21 -0300 Subject: [PATCH 06/11] Replacing $.each with forEach --- src/help/HelpCommandHandlers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/help/HelpCommandHandlers.js b/src/help/HelpCommandHandlers.js index 266cdcb4407..c81711772d8 100644 --- a/src/help/HelpCommandHandlers.js +++ b/src/help/HelpCommandHandlers.js @@ -81,7 +81,7 @@ define(function (require, exports, module) { data = []; // Save only the required data for the template - $.each(contributorsInfo.data, function (index, element) { + contributorsInfo.data.forEach(function (index, element) { data.push({ GITHUB_URL : element.html_url, AVATAR_URL : element.avatar_url, From 0365cb0432cd4cb5ac342cafffbb47109aeb6e35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Malbr=C3=A1n?= Date: Tue, 26 Feb 2013 03:48:32 -0300 Subject: [PATCH 07/11] Removed the unneeded Strings in the contributors template --- src/help/HelpCommandHandlers.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/help/HelpCommandHandlers.js b/src/help/HelpCommandHandlers.js index c81711772d8..9620c1abdc8 100644 --- a/src/help/HelpCommandHandlers.js +++ b/src/help/HelpCommandHandlers.js @@ -141,8 +141,7 @@ define(function (require, exports, module) { var $dlg = $(".about-dialog.instance"); var $contributors = $dlg.find(".about-contributors"); - templateVars = $.extend({CONTRIBUTORS: contributorsInfo}, Strings); - $contributors.html(Mustache.render(ContributorsTemplate, templateVars)); + $contributors.html(Mustache.render(ContributorsTemplate, {CONTRIBUTORS: contributorsInfo})); // This is used to create an opacity transition when each image is loaded $dlg.find("img").one("load", function () { @@ -155,7 +154,6 @@ define(function (require, exports, module) { $dlg.on("click", "img", function (e) { var url = $(e.target).data("url"); - if (url) { // Make sure the URL has a domain that we know about if (/(github\.com)$/i.test(PathUtils.parseUrl(url).hostname)) { From 5949dd4c03523e00db84ed0f81da5c3ddb755fb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Malbr=C3=A1n?= Date: Wed, 27 Feb 2013 20:20:03 -0300 Subject: [PATCH 08/11] forEach fixed. Grey background-color removed. Loading spinner added. Cache removed. --- src/help/HelpCommandHandlers.js | 69 ++++++++-------------- src/htmlContent/about-dialog.html | 5 +- src/styles/brackets_patterns_override.less | 12 +++- 3 files changed, 39 insertions(+), 47 deletions(-) diff --git a/src/help/HelpCommandHandlers.js b/src/help/HelpCommandHandlers.js index 9620c1abdc8..b3279e730f6 100644 --- a/src/help/HelpCommandHandlers.js +++ b/src/help/HelpCommandHandlers.js @@ -45,13 +45,7 @@ define(function (require, exports, module) { var buildInfo; - // PreferenceStorage - var _prefs = PreferencesManager.getPreferenceStorage(module.id); - - // Last time the contributorsInfo was fetched - var _lastContributorsFetchTime = _prefs.getValue("lastContributorsFetchTime"); - - + /** * @private * Gets a data structure that has the information for all the contributors of Brackets. @@ -62,44 +56,22 @@ define(function (require, exports, module) { */ function _getContributorsInformation() { var result = new $.Deferred(); - var fetchData = false; - var data; + var data = []; - // If we don't have data saved in prefs, fetch - data = _prefs.getValue("contributorsInfo"); - if (!data) { - fetchData = true; - } - - // If more than 2 weeks have passed since our last fetch, fetch again - if ((new Date()).getTime() > _lastContributorsFetchTime + (14 * 24 * 60 * 60 * 24)) { - fetchData = true; - } - - if (fetchData) { - $.getJSON(brackets.config.contributors_url + "?callback=?", function (contributorsInfo) { - data = []; - - // Save only the required data for the template - contributorsInfo.data.forEach(function (index, element) { - data.push({ - GITHUB_URL : element.html_url, - AVATAR_URL : element.avatar_url, - NAME : element.login - }); - }); - _lastContributorsFetchTime = (new Date()).getTime(); - _prefs.setValue("lastContributorsFetchTime", _lastContributorsFetchTime); - _prefs.setValue("contributorsInfo", data); - - result.resolve(data); - - }).error(function () { - result.reject(); - }); - } else { - result.resolve(data); - } + $.getJSON(brackets.config.contributors_url + "?callback=?", function (contributorsInfo) { + // Save only the required data for the template + contributorsInfo.data.forEach(function (contributor) { + data.push({ + GITHUB_URL : contributor.html_url, + AVATAR_URL : contributor.avatar_url, + NAME : contributor.login + }); + }); + result.resolve(data); + + }).error(function () { + result.reject(); + }); return result.promise(); } @@ -140,18 +112,27 @@ define(function (require, exports, module) { // Populate the contributors data var $dlg = $(".about-dialog.instance"); var $contributors = $dlg.find(".about-contributors"); + var totalContributors = contributorsInfo.length; + var contributorsCount = 0; $contributors.html(Mustache.render(ContributorsTemplate, {CONTRIBUTORS: contributorsInfo})); // This is used to create an opacity transition when each image is loaded $dlg.find("img").one("load", function () { $(this).css("opacity", 1); + + // Count the contributors loaded and hide the spinner once all are loaded + contributorsCount++; + if (contributorsCount >= totalContributors) { + $dlg.find(".about-spinner").css("display", "none"); + } }).each(function () { if (this.complete) { $(this).load(); } }); + // Create a link for each contributor image to their github account $dlg.on("click", "img", function (e) { var url = $(e.target).data("url"); if (url) { diff --git a/src/htmlContent/about-dialog.html b/src/htmlContent/about-dialog.html index 944f87e9bfc..05cb933e0aa 100644 --- a/src/htmlContent/about-dialog.html +++ b/src/htmlContent/about-dialog.html @@ -11,7 +11,10 @@

{{APP_NAME_ABOUT_BOX}}

Copyright 2012 - 2013 Adobe Systems Incorporated and its licensors. All rights reserved.

{{{ABOUT_TEXT_LINE3}}}

{{{ABOUT_TEXT_LINE4}}}

-

{{ABOUT_TEXT_LINE5}}

+

+ {{ABOUT_TEXT_LINE5}} + +

diff --git a/src/styles/brackets_patterns_override.less b/src/styles/brackets_patterns_override.less index 5d3a393af7a..577978955eb 100644 --- a/src/styles/brackets_patterns_override.less +++ b/src/styles/brackets_patterns_override.less @@ -447,9 +447,7 @@ overflow: auto; } .about-contributors { - min-width: 395px; min-height: 100px; - background-color: whiteSmoke; } .about-contributors img { opacity: 0; @@ -458,6 +456,16 @@ -o-transition: opacity 1s; transition: opacity 1s; } + .about-spinner { + display: inline-block; + vertical-align: middle; + margin-top: -2px; + margin-left: 10px; + width: 12px; + height: 12px; + background: url("images/small_spinner.svg") no-repeat; + -webkit-animation: rotating 1.5s linear infinite; + } } h2 { From 0f5c15cd8426c4fefdecce1c567a603a806aea3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Malbr=C3=A1n?= Date: Wed, 27 Feb 2013 20:23:41 -0300 Subject: [PATCH 09/11] I need an indentation preference per project/folder --- src/help/HelpCommandHandlers.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/help/HelpCommandHandlers.js b/src/help/HelpCommandHandlers.js index b3279e730f6..423c731f098 100644 --- a/src/help/HelpCommandHandlers.js +++ b/src/help/HelpCommandHandlers.js @@ -58,20 +58,20 @@ define(function (require, exports, module) { var result = new $.Deferred(); var data = []; - $.getJSON(brackets.config.contributors_url + "?callback=?", function (contributorsInfo) { - // Save only the required data for the template - contributorsInfo.data.forEach(function (contributor) { - data.push({ - GITHUB_URL : contributor.html_url, - AVATAR_URL : contributor.avatar_url, - NAME : contributor.login - }); - }); - result.resolve(data); - - }).error(function () { - result.reject(); - }); + $.getJSON(brackets.config.contributors_url + "?callback=?", function (contributorsInfo) { + // Save only the required data for the template + contributorsInfo.data.forEach(function (contributor) { + data.push({ + GITHUB_URL : contributor.html_url, + AVATAR_URL : contributor.avatar_url, + NAME : contributor.login + }); + }); + result.resolve(data); + + }).error(function () { + result.reject(); + }); return result.promise(); } From fa22529601545cfdb4f5588ece49e8cb0a121045 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Malbr=C3=A1n?= Date: Thu, 28 Feb 2013 00:56:20 -0300 Subject: [PATCH 10/11] Review comments fixed --- src/help/HelpCommandHandlers.js | 31 +++++++--------------- src/htmlContent/contributors-list.html | 6 ++--- src/styles/brackets_patterns_override.less | 1 - 3 files changed, 13 insertions(+), 25 deletions(-) diff --git a/src/help/HelpCommandHandlers.js b/src/help/HelpCommandHandlers.js index 423c731f098..c77868e85de 100644 --- a/src/help/HelpCommandHandlers.js +++ b/src/help/HelpCommandHandlers.js @@ -50,28 +50,17 @@ define(function (require, exports, module) { * @private * Gets a data structure that has the information for all the contributors of Brackets. * The information is fetched from brackets.config.contributors_url using the github API. - * If more than 2 weeks have passed since the last fetch, or if cached data can't be found, - * the data is fetched again. * @return {$.Promise} jQuery Promise object that is resolved or rejected after the information is fetched. */ function _getContributorsInformation() { var result = new $.Deferred(); - var data = []; - $.getJSON(brackets.config.contributors_url + "?callback=?", function (contributorsInfo) { - // Save only the required data for the template - contributorsInfo.data.forEach(function (contributor) { - data.push({ - GITHUB_URL : contributor.html_url, - AVATAR_URL : contributor.avatar_url, - NAME : contributor.login - }); + $.getJSON(brackets.config.contributors_url) + .done(function (data) { + result.resolve(data); + }).fail(function () { + result.reject(); }); - result.resolve(data); - - }).error(function () { - result.reject(); - }); return result.promise(); } @@ -115,10 +104,10 @@ define(function (require, exports, module) { var totalContributors = contributorsInfo.length; var contributorsCount = 0; - $contributors.html(Mustache.render(ContributorsTemplate, {CONTRIBUTORS: contributorsInfo})); + $contributors.html(Mustache.render(ContributorsTemplate, contributorsInfo)); // This is used to create an opacity transition when each image is loaded - $dlg.find("img").one("load", function () { + $contributors.find("img").one("load", function () { $(this).css("opacity", 1); // Count the contributors loaded and hide the spinner once all are loaded @@ -128,16 +117,16 @@ define(function (require, exports, module) { } }).each(function () { if (this.complete) { - $(this).load(); + $(this).trigger("load"); } }); // Create a link for each contributor image to their github account - $dlg.on("click", "img", function (e) { + $contributors.on("click", "img", function (e) { var url = $(e.target).data("url"); if (url) { // Make sure the URL has a domain that we know about - if (/(github\.com)$/i.test(PathUtils.parseUrl(url).hostname)) { + if (/(^|\.)github\.com$/i.test(PathUtils.parseUrl(url).hostname)) { NativeApp.openURLInDefaultBrowser(url); } } diff --git a/src/htmlContent/contributors-list.html b/src/htmlContent/contributors-list.html index ea96ea73075..afcb42c3b3f 100644 --- a/src/htmlContent/contributors-list.html +++ b/src/htmlContent/contributors-list.html @@ -1,3 +1,3 @@ -{{#CONTRIBUTORS}} -{{NAME}} -{{/CONTRIBUTORS}} \ No newline at end of file +{{#.}} +{{login}} +{{/.}} \ No newline at end of file diff --git a/src/styles/brackets_patterns_override.less b/src/styles/brackets_patterns_override.less index 577978955eb..deb61425627 100644 --- a/src/styles/brackets_patterns_override.less +++ b/src/styles/brackets_patterns_override.less @@ -460,7 +460,6 @@ display: inline-block; vertical-align: middle; margin-top: -2px; - margin-left: 10px; width: 12px; height: 12px; background: url("images/small_spinner.svg") no-repeat; From ea93581d59c1f5394d6008ad45d00c5dc629f0f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Malbr=C3=A1n?= Date: Thu, 28 Feb 2013 05:44:14 -0300 Subject: [PATCH 11/11] Removed unused dependency --- src/help/HelpCommandHandlers.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/help/HelpCommandHandlers.js b/src/help/HelpCommandHandlers.js index c77868e85de..4498d207939 100644 --- a/src/help/HelpCommandHandlers.js +++ b/src/help/HelpCommandHandlers.js @@ -38,7 +38,6 @@ define(function (require, exports, module) { UpdateNotification = require("utils/UpdateNotification"), FileUtils = require("file/FileUtils"), NativeApp = require("utils/NativeApp"), - PreferencesManager = require("preferences/PreferencesManager"), StringUtils = require("utils/StringUtils"), AboutDialogTemplate = require("text!htmlContent/about-dialog.html"), ContributorsTemplate = require("text!htmlContent/contributors-list.html");