diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 00000000..9bbc3632
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,10 @@
+
+# 1.0.0 taiga-front (2014-10-07)
+
+### Misc
+- Lots of small and not so small bugfixes
+
+### Features
+- Redesign for taskboard and backlog summaries
+- Allow feedback for users from the platform
+- Real time changes for backlog, taskboard, kanban and issues
diff --git a/README.md b/README.md
index 24209044..51ff54aa 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,8 @@
-Taiga Front
-===============
+# Taiga Front #

-Setup initial environment
--------------------------
+## Setup initial environment ##
Install requirements:
@@ -13,21 +11,29 @@ Install requirements:
You can install Ruby through the apt package manager, rbenv, or rvm.
Install Sass through your **Terminal or Command Prompt**.
-```bash
- gem install sass
- sass -v // should return Sass 3.3.8 (Maptastic Maple)
+```
+$ gem install sass scss-lint
+$ export PATH="~/.gem/ruby/2.1.0/bin:$PATH"
+$ sass -v // should return Sass 3.3.8 (Maptastic Maple)
```
-> Complete process for all OS at: http://sass-lang.com/install
+Complete process for all OS at: http://sass-lang.com/install
**Node + Bower + Gulp**
-```bash
- sudo npm install -g gulp
- npm install
- sudo npm install -g bower
- bower install
- gulp
+```
+$ sudo npm install -g gulp
+$ sudo npm install -g bower
+$ npm install
+$ bower install
+$ gulp
```
And go in your browser to: http://localhost:9001/
+
+
+## Community ##
+
+[Taiga has a mailing list](http://groups.google.com/d/forum/taigaio). Feel free to join it and ask any questions you may have.
+
+To subscribe for announcements of releases, important changes and so on, please follow [@taigaio](https://twitter.com/taigaio) on Twitter.
diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee
index 3385474a..bfdec816 100644
--- a/app/coffee/app.coffee
+++ b/app/coffee/app.coffee
@@ -21,7 +21,21 @@
@taiga = taiga = {}
-configure = ($routeProvider, $locationProvider, $httpProvider, $provide, tgLoaderProvider) ->
+# Generic function for generate hash from a arbitrary length
+# collection of parameters.
+taiga.generateHash = (components=[]) ->
+ components = _.map(components, (x) -> JSON.stringify(x))
+ return hex_sha1(components.join(":"))
+
+taiga.generateUniqueSessionIdentifier = ->
+ date = (new Date()).getTime()
+ randomNumber = Math.floor(Math.random() * 0x9000000)
+ return taiga.generateHash([date, randomNumber])
+
+taiga.sessionId = taiga.generateUniqueSessionIdentifier()
+
+
+configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEventsProvider, tgLoaderProvider) ->
$routeProvider.when("/",
{templateUrl: "/partials/projects.html", resolve: {loader: tgLoaderProvider.add()}})
$routeProvider.when("/project/:pslug/",
@@ -127,13 +141,18 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, tgLoade
defaultHeaders = {
"Content-Type": "application/json"
"Accept-Language": "en"
+ "X-Session-Id": taiga.sessionId
}
$httpProvider.defaults.headers.delete = defaultHeaders
$httpProvider.defaults.headers.patch = defaultHeaders
$httpProvider.defaults.headers.post = defaultHeaders
$httpProvider.defaults.headers.put = defaultHeaders
- $httpProvider.defaults.headers.get = {}
+ $httpProvider.defaults.headers.get = {
+ "X-Session-Id": taiga.sessionId
+ }
+
+ $tgEventsProvider.setSessionId(taiga.sessionId)
# Add next param when user try to access to a secction need auth permissions.
authHttpIntercept = ($q, $location, $confirm, $navUrls, $lightboxService) ->
@@ -148,7 +167,8 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, tgLoade
$location.url($navUrls.resolve("login")).search("next=#{nextPath}")
return $q.reject(response)
- $provide.factory("authHttpIntercept", ["$q", "$location", "$tgConfirm", "$tgNavUrls", "lightboxService", authHttpIntercept])
+ $provide.factory("authHttpIntercept", ["$q", "$location", "$tgConfirm", "$tgNavUrls",
+ "lightboxService", authHttpIntercept])
$httpProvider.responseInterceptors.push('authHttpIntercept')
$httpProvider.interceptors.push('loaderInterceptor')
@@ -166,10 +186,13 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, tgLoade
linewidth: "The subject must have a maximum size of %s"
})
-init = ($log, $i18n, $config, $rootscope) ->
+init = ($log, $i18n, $config, $rootscope, $auth, $events) ->
$i18n.initialize($config.get("defaultLanguage"))
$log.debug("Initialize application")
+ if $auth.isAuthenticated()
+ $events.setupConnection()
+
# Default Value for taiga local config module.
angular.module("taigaLocalConfig", []).value("localconfig", {})
@@ -181,6 +204,7 @@ modules = [
"taigaResources",
"taigaLocales",
"taigaAuth",
+ "taigaEvents",
# Specific Modules
"taigaRelatedTasks",
@@ -196,6 +220,7 @@ modules = [
"taigaNavMenu",
"taigaProject",
"taigaUserSettings",
+ "taigaFeedback",
"taigaPlugins",
# Vendor modules
@@ -211,6 +236,7 @@ module.config([
"$locationProvider",
"$httpProvider",
"$provide",
+ "$tgEventsProvider",
"tgLoaderProvider",
configure
])
@@ -220,5 +246,7 @@ module.run([
"$tgI18n",
"$tgConfig",
"$rootScope",
+ "$tgAuth",
+ "$tgEvents",
init
])
diff --git a/app/coffee/config.coffee b/app/coffee/config.coffee
index 14320253..43ea197b 100644
--- a/app/coffee/config.coffee
+++ b/app/coffee/config.coffee
@@ -38,6 +38,8 @@ class ConfigService extends taiga.Service
termsOfServiceUrl: null
privacyPolicyUrl: null
+
+ feedbackEnabled: true
}
initialize: (localconfig) ->
diff --git a/app/coffee/modules/admin/lightboxes.coffee b/app/coffee/modules/admin/lightboxes.coffee
index db8a57a2..2cf83e74 100644
--- a/app/coffee/modules/admin/lightboxes.coffee
+++ b/app/coffee/modules/admin/lightboxes.coffee
@@ -34,10 +34,10 @@ CreateMembersDirective = ($rs, $rootScope, $confirm, lightboxService) ->
template = _.template("""