diff --git a/.gitignore b/.gitignore index 9672f5877..442f8578a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ packages # NPM packages +ngClient/npm-debug.log ngClient/node_modules # Bower packages diff --git a/CHANGELOG.md b/CHANGELOG.md index 85d551fc3..b6dc60f60 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ ### Changelog +**0.59.0** + +* Contributors page +https://github.com/forCrowd/WealthEconomy/issues/69 +* Sticky footer +* Disqus minor fix +* Menu minor layout fix +* npm jshint package missing fix +* Smtp settings initial port value fix +* DatabaseConfig InitializeDatabase fix + **0.58.0** * Description field for resource pool diff --git a/DataObjects/Migrations/201603261149481_Initial_Manual.Designer.cs b/DataObjects/Migrations/201603261149481_Initial_Manual.Designer.cs deleted file mode 100644 index b72b383af..000000000 --- a/DataObjects/Migrations/201603261149481_Initial_Manual.Designer.cs +++ /dev/null @@ -1,29 +0,0 @@ -// -namespace forCrowd.WealthEconomy.DataObjects.Migrations -{ - using System.CodeDom.Compiler; - using System.Data.Entity.Migrations; - using System.Data.Entity.Migrations.Infrastructure; - using System.Resources; - - [GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")] - public sealed partial class Initial_Manual : IMigrationMetadata - { - private readonly ResourceManager Resources = new ResourceManager(typeof(Initial_Manual)); - - string IMigrationMetadata.Id - { - get { return "201603261149481_Initial_Manual"; } - } - - string IMigrationMetadata.Source - { - get { return null; } - } - - string IMigrationMetadata.Target - { - get { return Resources.GetString("Target"); } - } - } -} diff --git a/DataObjects/Migrations/201603261149481_Initial_Manual.cs b/DataObjects/Migrations/201603261149481_Initial_Manual.cs deleted file mode 100644 index df21d43e8..000000000 --- a/DataObjects/Migrations/201603261149481_Initial_Manual.cs +++ /dev/null @@ -1,267 +0,0 @@ -namespace forCrowd.WealthEconomy.DataObjects.Migrations -{ - using System.Data.Entity.Migrations; - using System.Text; - - public partial class Initial_Manual : DbMigration - { - public override void Up() - { - // ResourcePool ResourcePoolRateTotal - Sql(PrepareDropFunctionBlock("ResourcePool", "ResourcePoolRateTotal", "getResourcePoolRateTotal")); - Sql(PrepareGetResourcePoolRateTotalFunctionBlock()); - Sql("ALTER TABLE dbo.ResourcePool DROP COLUMN ResourcePoolRateTotal;"); - Sql("ALTER TABLE dbo.ResourcePool ADD ResourcePoolRateTotal AS dbo.getResourcePoolRateTotal(Id);"); - - // ResourcePool ResourcePoolRateCount - Sql(PrepareDropFunctionBlock("ResourcePool", "ResourcePoolRateCount", "getResourcePoolRateCount")); - Sql(PrepareGetResourcePoolRateCountFunctionBlock()); - Sql("ALTER TABLE dbo.ResourcePool DROP COLUMN ResourcePoolRateCount;"); - Sql("ALTER TABLE dbo.ResourcePool ADD ResourcePoolRateCount AS dbo.getResourcePoolRateCount(Id);"); - - // ResourcePool RatingCount - Sql(PrepareDropFunctionBlock("ResourcePool", "RatingCount", "getResourcePoolRatingCount")); - Sql(PrepareGetResourcePoolRatingCountFunctionBlock()); - Sql("ALTER TABLE dbo.ResourcePool DROP COLUMN RatingCount;"); - Sql("ALTER TABLE dbo.ResourcePool ADD RatingCount AS dbo.getResourcePoolRatingCount(Id);"); - - // ElementField IndexRatingTotal - Sql(PrepareDropFunctionBlock("ElementField", "IndexRatingTotal", "getElementFieldIndexRatingTotal")); - Sql(PrepareGetElementFieldIndexRatingTotalFunctionBlock()); - Sql("ALTER TABLE dbo.ElementField DROP COLUMN IndexRatingTotal;"); - Sql("ALTER TABLE dbo.ElementField ADD IndexRatingTotal AS dbo.getElementFieldIndexRatingTotal(Id);"); - - // ElementField IndexRatingCount - Sql(PrepareDropFunctionBlock("ElementField", "IndexRatingCount", "getElementFieldIndexRatingCount")); - Sql(PrepareGetElementFieldIndexRatingCountFunctionBlock()); - Sql("ALTER TABLE dbo.ElementField DROP COLUMN IndexRatingCount;"); - Sql("ALTER TABLE dbo.ElementField ADD IndexRatingCount AS dbo.getElementFieldIndexRatingCount(Id);"); - - // ElementCell StringValue - Sql(PrepareDropFunctionBlock("ElementCell", "StringValue", "getElementCellStringValue")); - Sql(PrepareGetElementCellStringValueFunctionBlock()); - Sql("ALTER TABLE dbo.ElementCell DROP COLUMN StringValue;"); - Sql("ALTER TABLE dbo.ElementCell ADD StringValue AS dbo.getElementCellStringValue(Id);"); - - // ElementCell NumericValueTotal - Sql(PrepareDropFunctionBlock("ElementCell", "NumericValueTotal", "getElementCellNumericValueTotal")); - Sql(PrepareGetElementCellNumericValueTotalFunctionBlock()); - Sql("ALTER TABLE dbo.ElementCell DROP COLUMN NumericValueTotal;"); - Sql("ALTER TABLE dbo.ElementCell ADD NumericValueTotal AS dbo.getElementCellNumericValueTotal(Id);"); - - // ElementCell NumericValueCount - Sql(PrepareDropFunctionBlock("ElementCell", "NumericValueCount", "getElementCellNumericValueCount")); - Sql(PrepareGetElementCellNumericValueCountFunctionBlock()); - Sql("ALTER TABLE dbo.ElementCell DROP COLUMN NumericValueCount;"); - Sql("ALTER TABLE dbo.ElementCell ADD NumericValueCount AS dbo.getElementCellNumericValueCount(Id);"); - } - - public override void Down() - { - // ResourcePool ResourcePoolRateTotal - Sql("ALTER TABLE dbo.ResourcePool DROP COLUMN ResourcePoolRateTotal;"); - Sql("ALTER TABLE dbo.ResourcePool ADD ResourcePoolRateTotal [decimal](18,2);"); - Sql("DROP FUNCTION dbo.getResourcePoolRateTotal;"); - - // ResourcePool ResourcePoolRateCount - Sql("ALTER TABLE dbo.ResourcePool DROP COLUMN ResourcePoolRateCount;"); - Sql("ALTER TABLE dbo.ResourcePool ADD ResourcePoolRateCount int;"); - Sql("DROP FUNCTION dbo.getResourcePoolRateCount;"); - - // ResourcePool RatingCount - Sql("ALTER TABLE dbo.ResourcePool DROP COLUMN RatingCount;"); - Sql("ALTER TABLE dbo.ResourcePool ADD RatingCount int;"); - Sql("DROP FUNCTION dbo.getResourcePoolRatingCount;"); - - // ElementField IndexRatingTotal - Sql("ALTER TABLE dbo.ElementField DROP COLUMN IndexRatingTotal;"); - Sql("ALTER TABLE dbo.ElementField ADD IndexRatingTotal [decimal](18,2);"); - Sql("DROP FUNCTION dbo.getElementFieldIndexRatingTotal;"); - - // ElementField IndexRatingCount - Sql("ALTER TABLE dbo.ElementField DROP COLUMN IndexRatingCount;"); - Sql("ALTER TABLE dbo.ElementField ADD IndexRatingCount int;"); - Sql("DROP FUNCTION dbo.getElementFieldIndexRatingCount;"); - - // ElementCell StringValue - Sql("ALTER TABLE dbo.ElementCell DROP COLUMN StringValue;"); - Sql("ALTER TABLE dbo.ElementCell ADD StringValue [nvarchar](MAX);"); - Sql("DROP FUNCTION dbo.getElementCellStringValue;"); - - // ElementCell NumericValueTotal - Sql("ALTER TABLE dbo.ElementCell DROP COLUMN NumericValueTotal;"); - Sql("ALTER TABLE dbo.ElementCell ADD NumericValueTotal [decimal](18,2);"); - Sql("DROP FUNCTION dbo.getElementCellNumericValueTotal;"); - - // ElementCell NumericValueCount - Sql("ALTER TABLE dbo.ElementCell DROP COLUMN NumericValueCount;"); - Sql("ALTER TABLE dbo.ElementCell ADD NumericValueCount int;"); - Sql("DROP FUNCTION dbo.getElementCellNumericValueCount;"); - } - - string PrepareGetResourcePoolRateTotalFunctionBlock() - { - var sbOutput = new StringBuilder(); - sbOutput.AppendLine("CREATE FUNCTION dbo.getResourcePoolRateTotal(@resourcePoolId int)"); - sbOutput.AppendLine("RETURNS decimal"); - sbOutput.AppendLine("AS"); - sbOutput.AppendLine("BEGIN"); - sbOutput.AppendLine(" DECLARE @result decimal"); - sbOutput.AppendLine(" SELECT @result = ISNULL(SUM(ResourcePoolRate), 0) FROM UserResourcePool WHERE ResourcePoolId = @resourcePoolId AND DeletedOn IS NULL"); - sbOutput.AppendLine(" RETURN @result"); - sbOutput.AppendLine("END"); - return sbOutput.ToString(); - } - - string PrepareGetResourcePoolRateCountFunctionBlock() - { - var sbOutput = new StringBuilder(); - sbOutput.AppendLine("CREATE FUNCTION dbo.getResourcePoolRateCount(@resourcePoolId int)"); - sbOutput.AppendLine("RETURNS int"); - sbOutput.AppendLine("AS"); - sbOutput.AppendLine("BEGIN"); - sbOutput.AppendLine(" DECLARE @result int"); - sbOutput.AppendLine(" SELECT @result = COUNT(ResourcePoolRate) FROM UserResourcePool WHERE ResourcePoolId = @resourcePoolId AND DeletedOn IS NULL"); - sbOutput.AppendLine(" RETURN @result"); - sbOutput.AppendLine("END"); - return sbOutput.ToString(); - } - - string PrepareGetResourcePoolRatingCountFunctionBlock() - { - var sbOutput = new StringBuilder(); - sbOutput.AppendLine("CREATE FUNCTION dbo.getResourcePoolRatingCount(@resourcePoolId int)"); - sbOutput.AppendLine("RETURNS int"); - sbOutput.AppendLine("AS"); - sbOutput.AppendLine("BEGIN"); - sbOutput.AppendLine(" DECLARE @result int"); - sbOutput.AppendLine(" SELECT @result = COUNT(Id) FROM [User] WHERE DeletedOn IS NULL AND Id IN ("); - sbOutput.AppendLine(" SELECT T1.UserId"); - sbOutput.AppendLine(" FROM UserElementCell T1"); - sbOutput.AppendLine(" JOIN ElementCell T2 ON T1.ElementCellId = T2.Id"); - sbOutput.AppendLine(" JOIN ElementField T3 ON T2.ElementFieldId = T3.Id"); - sbOutput.AppendLine(" JOIN Element T4 ON T3.ElementId = T4.Id"); - sbOutput.AppendLine(" WHERE T4.ResourcePoolId = @ResourcePoolId"); - sbOutput.AppendLine(" AND T3.IndexEnabled = 1"); - sbOutput.AppendLine(" AND T1.DeletedOn IS NULL"); - sbOutput.AppendLine(" UNION ALL"); - sbOutput.AppendLine(" SELECT T1.UserId"); - sbOutput.AppendLine(" FROM UserElementField T1"); - sbOutput.AppendLine(" JOIN ElementField T2 ON T1.ElementFieldId = T2.Id"); - sbOutput.AppendLine(" JOIN Element T3 ON T2.ElementId = T3.Id"); - sbOutput.AppendLine(" WHERE T3.ResourcePoolId = @ResourcePoolId"); - sbOutput.AppendLine(" AND T1.DeletedOn IS NULL"); - sbOutput.AppendLine(" UNION ALL"); - sbOutput.AppendLine(" SELECT T1.UserId"); - sbOutput.AppendLine(" FROM UserResourcePool T1"); - sbOutput.AppendLine(" JOIN ResourcePool T2 ON T1.ResourcePoolId = T2.Id"); - sbOutput.AppendLine(" WHERE T1.ResourcePoolId = @ResourcePoolId"); - sbOutput.AppendLine(" AND T2.UseFixedResourcePoolRate = 0"); - sbOutput.AppendLine(" AND T1.DeletedOn IS NULL"); - sbOutput.AppendLine(" )"); - sbOutput.AppendLine(" RETURN @result"); - sbOutput.AppendLine("END"); - return sbOutput.ToString(); - } - - string PrepareGetElementFieldIndexRatingTotalFunctionBlock() - { - var sbOutput = new StringBuilder(); - sbOutput.AppendLine("CREATE FUNCTION dbo.getElementFieldIndexRatingTotal(@elementFieldId int)"); - sbOutput.AppendLine("RETURNS decimal"); - sbOutput.AppendLine("AS"); - sbOutput.AppendLine("BEGIN"); - sbOutput.AppendLine(" DECLARE @result decimal"); - sbOutput.AppendLine(" SELECT @result = ISNULL(SUM(Rating), 0) FROM UserElementField WHERE ElementFieldId = @elementFieldId AND DeletedOn IS NULL"); - sbOutput.AppendLine(" RETURN @result"); - sbOutput.AppendLine("END"); - return sbOutput.ToString(); - } - - string PrepareGetElementFieldIndexRatingCountFunctionBlock() - { - var sbOutput = new StringBuilder(); - sbOutput.AppendLine("CREATE FUNCTION dbo.getElementFieldIndexRatingCount(@elementFieldId int)"); - sbOutput.AppendLine("RETURNS int"); - sbOutput.AppendLine("AS"); - sbOutput.AppendLine("BEGIN"); - sbOutput.AppendLine(" DECLARE @result int"); - sbOutput.AppendLine(" SELECT @result = COUNT(Rating) FROM UserElementField WHERE ElementFieldId = @elementFieldId AND DeletedOn IS NULL"); - sbOutput.AppendLine(" RETURN @result"); - sbOutput.AppendLine("END"); - return sbOutput.ToString(); - } - - string PrepareGetElementCellStringValueFunctionBlock() - { - var sbOutput = new StringBuilder(); - sbOutput.AppendLine("CREATE FUNCTION dbo.getElementCellStringValue(@elementCellId int)"); - sbOutput.AppendLine("RETURNS nvarchar(MAX)"); - sbOutput.AppendLine("AS"); - sbOutput.AppendLine("BEGIN"); - sbOutput.AppendLine(" DECLARE @result nvarchar(MAX)"); - sbOutput.AppendLine(" SELECT @result = StringValue FROM UserElementCell WHERE ElementCellId = @elementCellId AND NOT StringValue IS NULL AND DeletedOn IS NULL"); - sbOutput.AppendLine(" RETURN @result"); - sbOutput.AppendLine("END"); - return sbOutput.ToString(); - } - - string PrepareGetElementCellNumericValueTotalFunctionBlock() - { - var sbOutput = new StringBuilder(); - sbOutput.AppendLine("CREATE FUNCTION dbo.getElementCellNumericValueTotal(@elementCellId int)"); - sbOutput.AppendLine("RETURNS decimal"); - sbOutput.AppendLine("AS"); - sbOutput.AppendLine("BEGIN"); - sbOutput.AppendLine(" DECLARE @result decimal"); - sbOutput.AppendLine(" SELECT @result = "); - sbOutput.AppendLine(" CASE T3.DataType"); - sbOutput.AppendLine(" WHEN 1 THEN NULL -- String"); - sbOutput.AppendLine(" WHEN 2 THEN ISNULL(SUM(CAST(T1.BooleanValue AS decimal)), 0) -- Boolean"); - sbOutput.AppendLine(" WHEN 3 THEN ISNULL(SUM(CAST(T1.IntegerValue AS decimal)), 0) -- Integer"); - sbOutput.AppendLine(" WHEN 4 THEN ISNULL(SUM(T1.DecimalValue), 0) -- Decimal"); - sbOutput.AppendLine(" WHEN 5 THEN ISNULL(SUM(CAST(T1.DateTimeValue AS decimal)), 0) -- DateTime"); - sbOutput.AppendLine(" WHEN 6 THEN NULL -- Element"); - sbOutput.AppendLine(" WHEN 11 THEN ISNULL(SUM(T1.DecimalValue), 0) -- DirectIncome"); - sbOutput.AppendLine(" WHEN 12 THEN NULL -- Multiplier"); - sbOutput.AppendLine(" END"); - sbOutput.AppendLine(" FROM UserElementCell T1"); - sbOutput.AppendLine(" JOIN ElementCell T2 ON T1.ElementCellId = T2.Id"); - sbOutput.AppendLine(" JOIN ElementField T3 ON T2.ElementFieldId = T3.Id"); - sbOutput.AppendLine(" WHERE T1.ElementCellId = @elementCellId AND T1.DeletedOn IS NULL"); - sbOutput.AppendLine(" GROUP By T3.DataType"); - sbOutput.AppendLine(" RETURN @result"); - sbOutput.AppendLine("END"); - return sbOutput.ToString(); - } - - string PrepareGetElementCellNumericValueCountFunctionBlock() - { - var sbOutput = new StringBuilder(); - sbOutput.AppendLine("CREATE FUNCTION dbo.getElementCellNumericValueCount(@elementCellId int)"); - sbOutput.AppendLine("RETURNS int"); - sbOutput.AppendLine("AS"); - sbOutput.AppendLine("BEGIN"); - sbOutput.AppendLine(" DECLARE @result int"); - sbOutput.AppendLine(" SELECT @result = COUNT(DecimalValue) FROM UserElementCell WHERE ElementCellId = @elementCellId AND NOT DecimalValue IS NULL AND DeletedOn IS NULL"); - sbOutput.AppendLine(" RETURN @result"); - sbOutput.AppendLine("END"); - return sbOutput.ToString(); - } - - string PrepareDropFunctionBlock(string tableName, string columnName, string functionName) - { - var sbOutput = new StringBuilder(); - sbOutput.AppendFormat("IF object_id(N'{0}', N'FN') IS NOT NULL", functionName).AppendLine(); - sbOutput.AppendLine("BEGIN"); - sbOutput.AppendFormat(" IF COLUMNPROPERTY(object_id('{0}'), '{1}', 'IsComputed') = 1", tableName, columnName).AppendLine(); - sbOutput.AppendLine(" BEGIN"); - sbOutput.AppendFormat(" ALTER TABLE dbo.{0} DROP COLUMN {1};", tableName, columnName).AppendLine(); - sbOutput.AppendFormat(" ALTER TABLE dbo.{0} ADD {1} [decimal](18,2);", tableName, columnName).AppendLine(); - sbOutput.AppendLine(" END"); - sbOutput.AppendFormat(" DROP FUNCTION {0}", functionName).AppendLine(); - sbOutput.AppendLine("END"); - return sbOutput.ToString(); - } - } -} diff --git a/DataObjects/Migrations/201603261149481_Initial_Manual.resx b/DataObjects/Migrations/201603261149481_Initial_Manual.resx deleted file mode 100644 index debe35231..000000000 --- a/DataObjects/Migrations/201603261149481_Initial_Manual.resx +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 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 - - - dbo - - \ No newline at end of file diff --git a/SolutionItems/Properties/AssemblyInfo.cs b/SolutionItems/Properties/AssemblyInfo.cs index fe716ca86..bdd41d9a0 100644 --- a/SolutionItems/Properties/AssemblyInfo.cs +++ b/SolutionItems/Properties/AssemblyInfo.cs @@ -30,5 +30,5 @@ // // AssemblyFileVersion is not in use for the moment // -[assembly: AssemblyVersion("0.58.0")] +[assembly: AssemblyVersion("0.59.0")] [assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/WebApi/App_Start/DatabaseConfig.cs b/WebApi/App_Start/DatabaseConfig.cs index e120e6740..69bbe0d02 100644 --- a/WebApi/App_Start/DatabaseConfig.cs +++ b/WebApi/App_Start/DatabaseConfig.cs @@ -6,7 +6,7 @@ public static class DatabaseConfig { public static void Initialize() { - //DbUtility.InitializeDatabase(); + DbUtility.InitializeDatabase(); } } } diff --git a/WebApi/Configs/Setup/system.net.mailSettings.smtp.config b/WebApi/Configs/Setup/system.net.mailSettings.smtp.config index c448efebb..598326f51 100644 --- a/WebApi/Configs/Setup/system.net.mailSettings.smtp.config +++ b/WebApi/Configs/Setup/system.net.mailSettings.smtp.config @@ -1,4 +1,4 @@  - + diff --git a/ngClient/_system/css/main.css b/ngClient/_system/css/main.css index c26f5015f..0665bd6fa 100644 --- a/ngClient/_system/css/main.css +++ b/ngClient/_system/css/main.css @@ -1,5 +1,11 @@ -body { - font-size: 15px; +html { + position: relative; + min-height: 100%; +} + +body { + /* Margin bottom by footer height */ + margin-bottom: 90px; padding-top: 50px; padding-bottom: 20px; } @@ -11,6 +17,23 @@ textarea { max-width: 280px; } +hr { + border-color: #ddd; +} + +.footer { + position: absolute; + bottom: 0; + width: 100%; + /* Set the fixed height of the footer here */ + height: 90px; +} + +.footer .contacts a:hover, +.footer .contacts a:focus { + text-decoration: none; +} + .btn-link:hover, .btn-link:focus { text-decoration: none; @@ -54,47 +77,9 @@ textarea { /* #endregion */ -.versionText { - border-top: 1px solid #333; - font-size: 90%; - margin-top: 20px; - padding: 20px 0; -} - -/* Brand styling - Probably css class names can be better, parent child structure? */ -.brandLink, -.brandLink > a, -.brandLink > a:focus, -.brandLink > a:hover { - text-decoration: none; - line-height: 1em; -} - -.brandLinkImage { - margin-right: 10px; - float: left; -} - -.brandLinkText { - font-family: 'Century Gothic'; - text-decoration: none; - line-height: 1em; -} - -.brandLinkPrimary { - color: #b08b5f; - font-size: 16px; -} - -.brandLinkSecondary { - color: #2B2A28; - font-size: 11px; -} - /* Set padding to keep content from hitting the edges */ .body-content { - padding-left: 15px; - padding-right: 15px; + padding: 20px 15px; } .bg-info { @@ -457,6 +442,10 @@ input[type="checkbox"].input-validation-error { } /* Margin Spaces */ +.g-mt-10 { + margin-top: 5px; +} + .g-mt-10 { margin-top: 10px; } @@ -497,6 +486,10 @@ input[type="checkbox"].input-validation-error { margin-top: 100px; } +.g-mb-10 { + margin-bottom: 5px; +} + .g-mb-10 { margin-bottom: 10px; } @@ -573,6 +566,10 @@ input[type="checkbox"].input-validation-error { margin-bottom: 100px; } +.g-ml-5 { + margin-left: 5px; +} + .g-ml-10 { margin-left: 10px; } @@ -613,6 +610,10 @@ input[type="checkbox"].input-validation-error { margin-left: 100px; } +.g-mr-5 { + margin-right: 5px; +} + .g-mr-10 { margin-right: 10px; } @@ -759,3 +760,44 @@ input[type="checkbox"].input-validation-error { } /* #endregion */ + +/* #region table-contributors */ + +.table-contributors { + border-left: none; +} + + .table-contributors thead { + border-bottom: solid 1px #ddd; + } + + .table-contributors tbody tr { + height: 6em; + } + + .table-contributors td { + vertical-align: middle !important; + } + + .table-contributors td span { + display: block; + } + + .table-contributors .nickname { + font-style: italic; + } + + .table-contributors ul { + margin: 0; + } + + .table-contributors a:active, + .table-contributors a:hover { + text-decoration: none; + } + + .table-contributors td small { + font-style: italic; + } + +/* #endregion */ diff --git a/ngClient/_system/images/forCrowd_Logo_142x30.jpg b/ngClient/_system/images/forCrowd_Logo_142x30.jpg new file mode 100644 index 000000000..5eda17fa3 Binary files /dev/null and b/ngClient/_system/images/forCrowd_Logo_142x30.jpg differ diff --git a/ngClient/_system/js/app/config/route.js b/ngClient/_system/js/app/config/route.js index 7208f85f4..f121bed52 100644 --- a/ngClient/_system/js/app/config/route.js +++ b/ngClient/_system/js/app/config/route.js @@ -27,6 +27,7 @@ .when('/_system/content/prologue', { title: 'Prologue', templateUrl: '/_system/views/content/prologue.html?v=0.51.0', enableDisqus: true, resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) .when('/_system/content/reason', { title: 'Reason', templateUrl: '/_system/views/content/reason.html?v=0.58.0', enableDisqus: true, resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) .when('/_system/content/totalCostIndex', { title: 'Total Cost Index', templateUrl: '/_system/views/content/totalCostIndex.html?v=0.49.0', enableDisqus: true, resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) + .when('/_system/content/contributors', { title: 'Contributors', templateUrl: '/_system/views/content/contributors.html?v=0.59.0', enableDisqus: true, resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) /* Account */ .when('/_system/account', { title: 'Account', templateUrl: '/_system/views/account/account.html?v=0.55.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) diff --git a/ngClient/_system/js/app/controllers/content/ContributorsController.js b/ngClient/_system/js/app/controllers/content/ContributorsController.js new file mode 100644 index 000000000..dc0d72637 --- /dev/null +++ b/ngClient/_system/js/app/controllers/content/ContributorsController.js @@ -0,0 +1,20 @@ +(function () { + 'use strict'; + + var controllerId = 'ContributorsController'; + angular.module('main') + .controller(controllerId, ['logger', ContributorsController]); + + function ContributorsController(logger) { + + // Logger + logger = logger.forSource(controllerId); + + var vm = this; + vm.getDate = getDate; + + function getDate(day, month, year) { + return new Date(year, month - 1, day); + } + } +})(); diff --git a/ngClient/_system/js/app/controllers/content/DefaultController.js b/ngClient/_system/js/app/controllers/content/DefaultController.js index 9c4fcbee1..c1c7c31da 100644 --- a/ngClient/_system/js/app/controllers/content/DefaultController.js +++ b/ngClient/_system/js/app/controllers/content/DefaultController.js @@ -146,8 +146,8 @@ vm.displayFooterIcons = $location.path() === '/'; // Load related disqus - if (typeof current.enableDisqus !== 'undefined' && current.enableDisqus) { - vm.disqusConfig.disqus_identifier = disqusShortname + $location.path().replace(/\//g, '_'); + if (typeof current.enableDisqus !== 'undefined' && current.enableDisqus && vm.disqusConfig.disqus_shortname !== '') { + vm.disqusConfig.disqus_identifier = vm.disqusConfig.disqus_shortname + $location.path().replace(/\//g, '_'); vm.disqusConfig.disqus_url = $location.absUrl().substring(0, $location.absUrl().length - $location.url().length + $location.path().length); } else { vm.disqusConfig.disqus_identifier = ''; diff --git a/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.js b/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.js index 9fb952fb3..afacf661f 100644 --- a/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.js +++ b/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.js @@ -392,7 +392,7 @@ return { restrict: 'E', - templateUrl: '/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.html?v=0.58.0b', + templateUrl: '/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.html?v=0.58.0', scope: { config: '=' }, diff --git a/ngClient/_system/views/content/contributors.html b/ngClient/_system/views/content/contributors.html new file mode 100644 index 000000000..5ce660cb7 --- /dev/null +++ b/ngClient/_system/views/content/contributors.html @@ -0,0 +1,101 @@ +
+ + +
+
+

+ Contributors +

+

+ This is a fun attempt on welcoming new contributors. For details, click here.
+ If you have a question or an issue, please feel free to contact us on twitter or send an email to contact@forcrowd.org. +

+

+ Here is the list of contributors to this project. +

+
+
+ + + + + + + + + + + + + + + + + + + + + +
+ Name + + Profession + + Skills + + Years of Experience + + Contacts + + Joined on +
+ Serkan Holat + coni2k + Software DeveloperC#, ASP.NET, MS SQL, angularjs15+ +
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+ +
+
+
+
+
+
diff --git a/ngClient/default.aspx b/ngClient/default.aspx index 363ff2f59..9f2adee73 100644 --- a/ngClient/default.aspx +++ b/ngClient/default.aspx @@ -13,7 +13,7 @@ -