diff --git a/.travis.yml b/.travis.yml index 42615756..62f15439 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,16 +1,15 @@ sudo: false - +language: node_js +node_js: + - "4.1" before_install: - export CHROME_BIN=chromium-browser - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start - - npm install -g bower - - npm install -g gulp + - travis_retry npm install -g bower + - travis_retry npm install -g gulp install: - - npm install - - bower install + - travis_retry npm install + - travis_retry bower install before_script: - gulp deploy -language: node_js -node_js: - - "4.1" diff --git a/.tx/config b/.tx/config index 38d247e7..f0f3b762 100644 --- a/.tx/config +++ b/.tx/config @@ -3,7 +3,7 @@ host = https://www.transifex.com lang_map = sr@latin:sr-latn, zh-Hans:zh-hans, zh-Hant:zh-hant, pt_BR:pt-br [taiga-front.locale-enjson] -file_filter = app/locales/locale-.json -source_file = app/locales/locale-en.json +file_filter = app/locales/taiga/locale-.json +source_file = app/locales/taiga/locale-en.json source_lang = en type = KEYVALUEJSON diff --git a/CHANGELOG.md b/CHANGELOG.md index 64311291..903aba99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,19 @@ # Changelog # -## 1.9.0 Abies Siberica (2015-11-XX) +## 1.9.1 Taiga Tribe (2016-01-05) + +- [118n] Now taiga plugins can be translatable. +- New Taiga plugins system. +- Now superadmins can send notifications (live announcement) to the user (through taiga-events). + +### Misc +- Statics folder hash to prevent cache problems when a new version is released. +- Implement websockets heartbeat messages system for taiga-events. +- Lots of small and not so small bugfixes. + + +## 1.9.0 Abies Siberica (2015-11-02) ### Features - Ability to create single-line or multi-line custom fields. (thanks to [@artlepool](https://github.com/artlepool)). diff --git a/README.md b/README.md index edf97336..4c67fc00 100644 --- a/README.md +++ b/README.md @@ -30,30 +30,30 @@ Big features are also welcome but if you want to see your contributions included #### License #### -Every code patch accepted in taiga codebase is licensed under [AGPL v3.0](http://www.gnu.org/licenses/agpl-3.0.html). You should must be careful to not include any code that can not be licensed under this license. +Every code patch accepted in taiga codebase is licensed under [AGPL v3.0](http://www.gnu.org/licenses/agpl-3.0.html). You must be careful to not include any code that can not be licensed under this license. Please read carefully [our license](https://github.com/taigaio/taiga-front/blob/master/LICENSE) and ask us if you have any questions. #### Bug reports, enhancements and support #### -If you **nedd help to setup Taiga**, you want to **talk about some cool enhancemnt** or you have **some questions** please write us to our [mailing list](http://groups.google.com/d/forum/taigaio). +If you **need help to setup Taiga**, want to **talk about some cool enhancemnt** or you have **some questions**, please write us to our [mailing list](http://groups.google.com/d/forum/taigaio). If you **find a bug** in Taiga you can always report it: - in our [mailing list](http://groups.google.com/d/forum/taigaio). -- in [github issues](https://github.com/taigaio/taiga-front/issues). +- in [github issues](https://github.com/taigaio/taiga-front/issues). - send us a mail to support@taiga.io if is a bug related to tree.taiga.io. - send a mail to security@taiga.io if is a **security bug**. One of our fellow Taiga developers will search, find and hunt it as soon as possible. -Please, before reporting an bug write down how can we reproduce it, your operating system, your browser and version, and if it's possible, a screenshot. Sometimes it take less time to fix a bug if the developer know how to find it and we will solve your problem as fast as possible. +Please, before reporting a bug write down how can we reproduce it, your operating system, your browser and version, and if it's possible, a screenshot. Sometimes it takes less time to fix a bug if the developer knows how to find it and we will solve your problem as fast as possible. #### Documentation improvements #### -We are gathering lots of information from our users to build and enhance our documentation. If you are the documentation to install or develop with Taiga and find any mistakes, omissions or confused sequences, it is enormously helpful to report it. Or better still, if you believe you can author additions, please make a pull-request to taiga project. +We are gathering lots of information from our users to build and enhance our documentation. If you use the documentation to install or develop with Taiga and find any mistakes, omissions or confused sequences, it is enormously helpful to report it. Or better still, if you believe you can author additions, please make a pull-request to taiga project. Currently, we have authored three main documentation hubs: @@ -64,23 +64,23 @@ Currently, we have authored three main documentation hubs: #### Translation #### -We are ready now to accept your help translating Taiga. It's easy (and fun!) just access to our team of translators with the link below, set up an account in Transifex and start contributing. Join us to make sure your language is covered! **[Help Taiga to trasnlate content](https://www.transifex.com/signup/ "Help Taiga to trasnlatecontent")** +We are ready now to accept your help translating Taiga. It's easy (and fun!) just access our team of translators with the link below, set up an account in Transifex and start contributing. Join us to make sure your language is covered! **[Help Taiga to translate content](https://www.transifex.com/signup/ "Help Taiga to translate content")** #### Code patches #### -Taiga will always be glad to receive code patches to update, fix or improve its code. +Taiga will always be glad to receive code patches to update, fix or improve its code. -If you know how to improve our code base or you found a bug, a security vulnerabilities a performance issue and you think you can solve, we will be very happy to accept your pull-request. If your code requires considerable changes, we recommend you first talk to us directly. We will find the best way to help. +If you know how to improve our code base or you found a bug, a security vulnerability or a performance issue and you think you can solve it, we will be very happy to accept your pull-request. If your code requires considerable changes, we recommend you first talk to us directly. We will find the best way to help. #### UI enhancements #### -Taiga is made for developers and designers. We care enormously about UI because usability and design are both critical aspects of the Taiga experience. +Taiga is made for developers and designers. We care enormously about UI because usability and design are both critical aspects of the Taiga experience. There are two possible ways to contribute to our UI: - **Bugs**: If you find a bug regarding front-end, please report it as previously indicated in the Bug reports section or send a pull-request as indicated in the Code Patches section. -- **Enhancements**: If its a design or UX bug or enhancement we will love to receive your feedback. Please send us your enhancement, with the reason and, if it's possible, an example. Our design and UX team will review your enhancement and fix it as soon as possible. We recommend you to use our [mailing list](http://groups.google.co.uk/d/forum/taigaio){target="_blank"} so we can have a lot of different opinions and debate. +- **Enhancements**: If its a design or UX bug or enhancement we will love to receive your feedback. Please send us your enhancement, with the reason and, if possible, an example. Our design and UX team will review your enhancement and fix it as soon as possible. We recommend you to use our [mailing list](http://groups.google.co.uk/d/forum/taigaio){target="_blank"} so we can have a lot of different opinions and debate. - **Language Localization**: We are eager to offer localized versions of Taiga. Some members of the community have already volunteered to work to provide a variety of languages. We are working to implement some changes to allow for this and expect to accept these requests in the near future. @@ -122,7 +122,7 @@ Complete process for all OS at: http://sass-lang.com/install **Node + Bower + Gulp** -We recommend using [nvm](https://github.com/creationix/nvmv) to manage diferent node versions +We recommend using [nvm](https://github.com/creationix/nvm) to manage diferent node versions ``` npm install -g gulp npm install -g bower @@ -140,11 +140,13 @@ If you want to run e2e tests ``` npm install -g protractor npm install -g mocha -npm install -g babel +npm install -g babel@5 webdriver-manager update ``` +To run a local Selenium Server, you will need to have the Java Development Kit (JDK) installed. + ## Tests ## #### Unit tests #### diff --git a/app-loader/app-loader.coffee b/app-loader/app-loader.coffee index 47f6b4c4..c290a533 100644 --- a/app-loader/app-loader.coffee +++ b/app-loader/app-loader.coffee @@ -1,7 +1,10 @@ -version = ___VERSION___ +window._version = "___VERSION___" + window.taigaConfig = { "api": "http://localhost:8000/api/v1/", "eventsUrl": null, + "eventsMaxMissedHeartbeats": 5, + "eventsHeartbeatIntervalTime": 60000, "debug": true, "defaultLanguage": "en", "themes": ["taiga", "material-design", "high-contrast"], @@ -14,16 +17,49 @@ window.taigaConfig = { "contribPlugins": [] } -promise = $.getJSON "/js/conf.json" +window.taigaContribPlugins = [] + +window._decorators = [] + +window.addDecorator = (provider, decorator) -> + window._decorators.push({provider: provider, decorator: decorator}) + +window.getDecorators = -> + return window._decorators + +loadStylesheet = (path) -> + $('head').append('') + +loadPlugin = (pluginPath) -> + return new Promise (resolve, reject) -> + $.getJSON(pluginPath).then (plugin) -> + window.taigaContribPlugins.push(plugin) + + if plugin.css + loadStylesheet(plugin.css) + + #dont' wait for css + if plugin.js + ljs.load(plugin.js, resolve) + else + resolve() + +loadPlugins = (plugins) -> + promises = [] + _.map plugins, (pluginPath) -> + promises.push(loadPlugin(pluginPath)) + + return Promise.all(promises) + +promise = $.getJSON "/conf.json" promise.done (data) -> window.taigaConfig = _.extend({}, window.taigaConfig, data) promise.always -> if window.taigaConfig.contribPlugins.length > 0 - plugins = _.map(window.taigaConfig.contribPlugins, (plugin) -> "#{plugin}?v=#{version}") - ljs.load plugins, -> - ljs.load "/js/app.js?v=#{version}", -> + loadPlugins(window.taigaConfig.contribPlugins).then () -> + ljs.load "/#{window._version}/js/app.js", -> angular.bootstrap(document, ['taiga']) else - ljs.load "/js/app.js?v=#{version}", -> + ljs.load "/#{window._version}/js/app.js", -> angular.bootstrap(document, ['taiga']) diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index be3cf91e..5c4521e3 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -20,7 +20,7 @@ ### @taiga = taiga = {} -@.taigaContribPlugins = @.taigaContribPlugins or [] +@.taigaContribPlugins = @.taigaContribPlugins or window.taigaContribPlugins or [] # Generic function for generate hash from a arbitrary length # collection of parameters. @@ -39,7 +39,7 @@ taiga.sessionId = taiga.generateUniqueSessionIdentifier() configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEventsProvider, - $compileProvider, $translateProvider, $animateProvider) -> + $compileProvider, $translateProvider, $translatePartialLoaderProvider, $animateProvider) -> $animateProvider.classNameFilter(/^(?:(?!ng-animate-disabled).)*$/) @@ -505,10 +505,10 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven # i18n preferedLangCode = userInfo?.lang || window.taigaConfig.defaultLanguage || "en" + $translatePartialLoaderProvider.addPart('taiga') $translateProvider - .useStaticFilesLoader({ - prefix: "/locales/locale-", - suffix: ".json" + .useLoader('$translatePartialLoader', { + urlTemplate: '/' + window._version + '/locales/{part}/locale-{lang}.json' }) .useSanitizeValueStrategy('escapeParameters') .addInterpolation('$translateMessageFormatInterpolation') @@ -516,17 +516,12 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven $translateProvider.fallbackLanguage(preferedLangCode) - # decoratos - decorators = _.where(@.taigaContribPlugins, {"type": "decorator"}) + # decoratos plugins + decorators = window.getDecorators() _.each decorators, (decorator) -> $provide.decorator decorator.provider, decorator.decorator - # decoratos - decorators = _.where(@.taigaContribPlugins, {"type": "decorator"}) - - _.each decorators, (decorator) -> - $provide.decorator decorator.provider, decorator.decorator i18nInit = (lang, $translate) -> # i18n - moment.js @@ -578,9 +573,10 @@ init = ($log, $rootscope, $auth, $events, $analytics, $translate, $location, $na Promise.setScheduler (cb) -> $rootscope.$evalAsync(cb) + $events.setupConnection() + # Load user if $auth.isAuthenticated() - $events.setupConnection() user = $auth.getUser() # Analytics @@ -690,6 +686,7 @@ module.config([ "$tgEventsProvider", "$compileProvider", "$translateProvider", + "$translatePartialLoaderProvider", "$animateProvider", configure ]) diff --git a/app/coffee/classes.coffee b/app/coffee/classes.coffee index e1d8b9de..a0d26f67 100644 --- a/app/coffee/classes.coffee +++ b/app/coffee/classes.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/admin.coffee b/app/coffee/modules/admin.coffee index e556fcca..3a2322b5 100644 --- a/app/coffee/modules/admin.coffee +++ b/app/coffee/modules/admin.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/admin/lightboxes.coffee b/app/coffee/modules/admin/lightboxes.coffee index 68fd0705..f130eb40 100644 --- a/app/coffee/modules/admin/lightboxes.coffee +++ b/app/coffee/modules/admin/lightboxes.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/admin/memberships.coffee b/app/coffee/modules/admin/memberships.coffee index 9068b3b0..03025f81 100644 --- a/app/coffee/modules/admin/memberships.coffee +++ b/app/coffee/modules/admin/memberships.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -219,7 +219,7 @@ MembershipsRowAvatarDirective = ($log, $template, $translate) -> ctx = { full_name: if member.full_name then member.full_name else "" email: if member.user_email then member.user_email else member.email - imgurl: if member.photo then member.photo else "/images/unnamed.png" + imgurl: if member.photo then member.photo else "/" + window._version + "/images/unnamed.png" pending: if !member.is_user_active then pending else "" } diff --git a/app/coffee/modules/admin/nav.coffee b/app/coffee/modules/admin/nav.coffee index 52dd7920..75fd57e0 100644 --- a/app/coffee/modules/admin/nav.coffee +++ b/app/coffee/modules/admin/nav.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/admin/project-profile.coffee b/app/coffee/modules/admin/project-profile.coffee index c6721f2b..c12da801 100644 --- a/app/coffee/modules/admin/project-profile.coffee +++ b/app/coffee/modules/admin/project-profile.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/admin/project-values.coffee b/app/coffee/modules/admin/project-values.coffee index 6b95c319..f0f947f0 100644 --- a/app/coffee/modules/admin/project-values.coffee +++ b/app/coffee/modules/admin/project-values.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/admin/roles.coffee b/app/coffee/modules/admin/roles.coffee index 78b325c5..3f67247b 100644 --- a/app/coffee/modules/admin/roles.coffee +++ b/app/coffee/modules/admin/roles.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/admin/third-parties.coffee b/app/coffee/modules/admin/third-parties.coffee index 8e7e1daf..a5de9dc6 100644 --- a/app/coffee/modules/admin/third-parties.coffee +++ b/app/coffee/modules/admin/third-parties.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/auth.coffee b/app/coffee/modules/auth.coffee index 5bf83c00..6a6ccc04 100644 --- a/app/coffee/modules/auth.coffee +++ b/app/coffee/modules/auth.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -44,9 +44,9 @@ class AuthService extends taiga.Service @themeService) -> super() - @._currentTheme = @config.get("defaultTheme") || "taiga" # load on index.jade - userModel = @.getUser() + @._currentTheme = @._getUserTheme() + @.setUserdata(userModel) setUserdata: (userModel) -> @@ -57,7 +57,7 @@ class AuthService extends taiga.Service @.userData = null _getUserTheme: -> - return @rootscope.user?.theme || @config.get("defaultTheme") || "taiga" + return @rootscope.user?.theme || @config.get("defaultTheme") || "taiga" # load on index.jade _setTheme: -> newTheme = @._getUserTheme() @@ -84,6 +84,8 @@ class AuthService extends taiga.Service @._setTheme() return user + else + @._setTheme() return null @@ -219,6 +221,8 @@ module.directive("tgPublicRegisterMessage", ["$tgConfig", "$tgNavUrls", "$tgTemp LoginDirective = ($auth, $confirm, $location, $config, $routeParams, $navUrls, $events, $translate) -> link = ($scope, $el, $attrs) -> + form = new checksley.Form($el.find("form.login-form")) + onSuccess = (response) -> if $routeParams['next'] and $routeParams['next'] != $navUrls.resolve("login") nextUrl = decodeURIComponent($routeParams['next']) @@ -234,7 +238,6 @@ LoginDirective = ($auth, $confirm, $location, $config, $routeParams, $navUrls, $ submit = debounce 2000, (event) => event.preventDefault() - form = new checksley.Form($el.find("form.login-form")) if not form.validate() return diff --git a/app/coffee/modules/backlog.coffee b/app/coffee/modules/backlog.coffee index 218f58aa..33eff5a6 100644 --- a/app/coffee/modules/backlog.coffee +++ b/app/coffee/modules/backlog.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/backlog/filters.coffee b/app/coffee/modules/backlog/filters.coffee index 24f353c4..21af3bef 100644 --- a/app/coffee/modules/backlog/filters.coffee +++ b/app/coffee/modules/backlog/filters.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/backlog/lightboxes.coffee b/app/coffee/modules/backlog/lightboxes.coffee index 7de5eaed..ca4e0156 100644 --- a/app/coffee/modules/backlog/lightboxes.coffee +++ b/app/coffee/modules/backlog/lightboxes.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index a01bbee8..4fb67e09 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -752,7 +752,7 @@ BacklogDirective = ($repo, $rootscope, $translate) -> hideText = $translate.instant("BACKLOG.FILTERS.HIDE") showText = $translate.instant("BACKLOG.FILTERS.SHOW") - toggleText(target.find(".text"), [hideText, showText]) + toggleText(target, [hideText, showText]) if !sidebar.hasClass("active") $ctrl.resetFilters() diff --git a/app/coffee/modules/backlog/sortable.coffee b/app/coffee/modules/backlog/sortable.coffee index af75929f..a7148f8f 100644 --- a/app/coffee/modules/backlog/sortable.coffee +++ b/app/coffee/modules/backlog/sortable.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/backlog/sprints.coffee b/app/coffee/modules/backlog/sprints.coffee index 12162fcc..19211c25 100644 --- a/app/coffee/modules/backlog/sprints.coffee +++ b/app/coffee/modules/backlog/sprints.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base.coffee b/app/coffee/modules/base.coffee index f916a2b2..c07d6714 100644 --- a/app/coffee/modules/base.coffee +++ b/app/coffee/modules/base.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/bind.coffee b/app/coffee/modules/base/bind.coffee index a54cfb58..7b8c6aac 100644 --- a/app/coffee/modules/base/bind.coffee +++ b/app/coffee/modules/base/bind.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/conf.coffee b/app/coffee/modules/base/conf.coffee index f5bfa967..e72a3351 100644 --- a/app/coffee/modules/base/conf.coffee +++ b/app/coffee/modules/base/conf.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/contrib.coffee b/app/coffee/modules/base/contrib.coffee index 9f39cef4..71293d2f 100644 --- a/app/coffee/modules/base/contrib.coffee +++ b/app/coffee/modules/base/contrib.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,7 +19,8 @@ # File: modules/base/contrib.coffee ### -taigaContribPlugins = @.taigaContribPlugins = @.taigaContribPlugins or [] +module = angular.module("taigaBase") + class ContribController extends taiga.Controller @.$inject = [ @@ -32,9 +33,7 @@ class ContribController extends taiga.Controller ] constructor: (@rootScope, @scope, @params, @repo, @rs, @confirm) -> - @scope.adminPlugins = _.where(@rootScope.contribPlugins, {"type": "admin"}) - @scope.currentPlugin = _.first(_.where(@scope.adminPlugins, {"slug": @params.plugin})) - @scope.pluginTemplate = "contrib/#{@scope.currentPlugin.slug}" + @scope.currentPlugin = _.first(_.where(@rootScope.adminPlugins, {"slug": @params.plugin})) @scope.projectSlug = @params.pslug promise = @.loadInitialData() @@ -53,5 +52,4 @@ class ContribController extends taiga.Controller loadInitialData: -> return @.loadProject() -module = angular.module("taigaBase") module.controller("ContribController", ContribController) diff --git a/app/coffee/modules/base/filters.coffee b/app/coffee/modules/base/filters.coffee index 3a094814..0cffc3b7 100644 --- a/app/coffee/modules/base/filters.coffee +++ b/app/coffee/modules/base/filters.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/http.coffee b/app/coffee/modules/base/http.coffee index 619f4a19..0ccf80ac 100644 --- a/app/coffee/modules/base/http.coffee +++ b/app/coffee/modules/base/http.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/location.coffee b/app/coffee/modules/base/location.coffee index 9ac46e6b..21d844ca 100644 --- a/app/coffee/modules/base/location.coffee +++ b/app/coffee/modules/base/location.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/model.coffee b/app/coffee/modules/base/model.coffee index b4787dea..01743de0 100644 --- a/app/coffee/modules/base/model.coffee +++ b/app/coffee/modules/base/model.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/navurls.coffee b/app/coffee/modules/base/navurls.coffee index d95d52a5..fd357df8 100644 --- a/app/coffee/modules/base/navurls.coffee +++ b/app/coffee/modules/base/navurls.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/repository.coffee b/app/coffee/modules/base/repository.coffee index 7707dfc1..0156dd15 100644 --- a/app/coffee/modules/base/repository.coffee +++ b/app/coffee/modules/base/repository.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/storage.coffee b/app/coffee/modules/base/storage.coffee index c3cfb968..e3e5fc2e 100644 --- a/app/coffee/modules/base/storage.coffee +++ b/app/coffee/modules/base/storage.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/urls.coffee b/app/coffee/modules/base/urls.coffee index e7843959..33977970 100644 --- a/app/coffee/modules/base/urls.coffee +++ b/app/coffee/modules/base/urls.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common.coffee b/app/coffee/modules/common.coffee index 268242d3..03fc5687 100644 --- a/app/coffee/modules/common.coffee +++ b/app/coffee/modules/common.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/analytics.coffee b/app/coffee/modules/common/analytics.coffee index ffad1347..237e2619 100644 --- a/app/coffee/modules/common/analytics.coffee +++ b/app/coffee/modules/common/analytics.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/attachments.coffee b/app/coffee/modules/common/attachments.coffee index f06f19cf..c6ba068f 100644 --- a/app/coffee/modules/common/attachments.coffee +++ b/app/coffee/modules/common/attachments.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/bind-scope.coffee b/app/coffee/modules/common/bind-scope.coffee index afe6c636..29f7b4af 100644 --- a/app/coffee/modules/common/bind-scope.coffee +++ b/app/coffee/modules/common/bind-scope.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/compile-html.directive.coffee b/app/coffee/modules/common/compile-html.directive.coffee index df6bfcbd..13f66e35 100644 --- a/app/coffee/modules/common/compile-html.directive.coffee +++ b/app/coffee/modules/common/compile-html.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/components.coffee b/app/coffee/modules/common/components.coffee index 6f41595a..0a32e803 100644 --- a/app/coffee/modules/common/components.coffee +++ b/app/coffee/modules/common/components.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -140,7 +140,7 @@ CreatedByDisplayDirective = ($template, $compile, $translate, $navUrls)-> if model? $scope.owner = model.owner_extra_info or { full_name_display: $translate.instant("COMMON.EXTERNAL_USER") - photo: "/images/user-noimage.png" + photo: "/" + window._version + "/images/user-noimage.png" } $scope.url = if $scope.owner?.is_active then $navUrls.resolve("user-profile", {username: $scope.owner.username}) else "" @@ -643,7 +643,7 @@ ListItemAssignedtoDirective = ($template) -> link = ($scope, $el, $attrs) -> bindOnce $scope, "usersById", (usersById) -> item = $scope.$eval($attrs.tgListitemAssignedto) - ctx = {name: "Unassigned", imgurl: "/images/unnamed.png"} + ctx = {name: "Unassigned", imgurl: "/" + window._version + "/images/unnamed.png"} member = usersById[item.assigned_to] if member diff --git a/app/coffee/modules/common/confirm.coffee b/app/coffee/modules/common/confirm.coffee index 0f2b41fc..a688bc3c 100644 --- a/app/coffee/modules/common/confirm.coffee +++ b/app/coffee/modules/common/confirm.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/custom-field-values.coffee b/app/coffee/modules/common/custom-field-values.coffee index 65ec5438..5e3c6383 100644 --- a/app/coffee/modules/common/custom-field-values.coffee +++ b/app/coffee/modules/common/custom-field-values.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/estimation.coffee b/app/coffee/modules/common/estimation.coffee index 1b0fc1fd..1a58ce8d 100644 --- a/app/coffee/modules/common/estimation.coffee +++ b/app/coffee/modules/common/estimation.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/filters.coffee b/app/coffee/modules/common/filters.coffee index 71f4fae6..140d859e 100644 --- a/app/coffee/modules/common/filters.coffee +++ b/app/coffee/modules/common/filters.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/history.coffee b/app/coffee/modules/common/history.coffee index 8f437373..12b623aa 100644 --- a/app/coffee/modules/common/history.coffee +++ b/app/coffee/modules/common/history.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/importer.coffee b/app/coffee/modules/common/importer.coffee index fbe18f4e..65803eb9 100644 --- a/app/coffee/modules/common/importer.coffee +++ b/app/coffee/modules/common/importer.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/lightboxes.coffee b/app/coffee/modules/common/lightboxes.coffee index 74b65d3e..13cb9d9a 100644 --- a/app/coffee/modules/common/lightboxes.coffee +++ b/app/coffee/modules/common/lightboxes.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/loader.coffee b/app/coffee/modules/common/loader.coffee index f8f16707..bcd2a3e4 100644 --- a/app/coffee/modules/common/loader.coffee +++ b/app/coffee/modules/common/loader.coffee @@ -1,9 +1,9 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino -# Copyright (C) 2014-2015 Juan Francisco Alcántara -# Copyright (C) 2014-2015 Alejandro Alonso +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino +# Copyright (C) 2014-2016 Juan Francisco Alcántara +# Copyright (C) 2014-2016 Alejandro Alonso # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/loading.coffee b/app/coffee/modules/common/loading.coffee index 54e4d3fb..e8a5af2f 100644 --- a/app/coffee/modules/common/loading.coffee +++ b/app/coffee/modules/common/loading.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -22,7 +22,7 @@ module = angular.module("taigaCommon") TgLoadingService = ($compile) -> - spinner = "loading..." + spinner = "loading..." return () -> service = { diff --git a/app/coffee/modules/common/popovers.coffee b/app/coffee/modules/common/popovers.coffee index 19d0abb6..91db16d4 100644 --- a/app/coffee/modules/common/popovers.coffee +++ b/app/coffee/modules/common/popovers.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/raven-logger.coffee b/app/coffee/modules/common/raven-logger.coffee index 217f2bf3..9b316e86 100644 --- a/app/coffee/modules/common/raven-logger.coffee +++ b/app/coffee/modules/common/raven-logger.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/tags.coffee b/app/coffee/modules/common/tags.coffee index f2856ce1..2d3e4c19 100644 --- a/app/coffee/modules/common/tags.coffee +++ b/app/coffee/modules/common/tags.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/wisiwyg.coffee b/app/coffee/modules/common/wisiwyg.coffee index 98ce7ea4..e5b73d05 100644 --- a/app/coffee/modules/common/wisiwyg.coffee +++ b/app/coffee/modules/common/wisiwyg.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/controllerMixins.coffee b/app/coffee/modules/controllerMixins.coffee index 708e8e7f..0dd5b474 100644 --- a/app/coffee/modules/controllerMixins.coffee +++ b/app/coffee/modules/controllerMixins.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/events.coffee b/app/coffee/modules/events.coffee index 64ac5a80..f7acf0bc 100644 --- a/app/coffee/modules/events.coffee +++ b/app/coffee/modules/events.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -27,7 +27,7 @@ module = angular.module("taigaEvents", []) class EventsService - constructor: (@win, @log, @config, @auth) -> + constructor: (@win, @log, @config, @auth, @liveAnnouncementService, @rootScope) -> bindMethods(@) initialize: (sessionId) -> @@ -37,6 +37,9 @@ class EventsService @.error = false @.pendingMessages = [] + @.missedHeartbeats = 0 + @.heartbeatInterval = null + if @win.WebSocket is undefined @log.info "WebSockets not supported on your browser" @@ -70,10 +73,58 @@ class EventsService @.ws.removeEventListener("close", @.onClose) @.ws.removeEventListener("error", @.onError) @.ws.removeEventListener("message", @.onMessage) + @.stopHeartBeatMessages() @.ws.close() delete @.ws + notifications: -> + @.subscribe null, 'notifications', (data) => + @liveAnnouncementService.show(data.title, data.desc) + @rootScope.$digest() + + ########################################### + # Heartbeat (Ping - Pong) + ########################################### + # See RFC https://tools.ietf.org/html/rfc6455#section-5.5.2 + # RFC https://tools.ietf.org/html/rfc6455#section-5.5.3 + startHeartBeatMessages: -> + return if @.heartbeatInterval + + maxMissedHeartbeats = @config.get("eventsMaxMissedHeartbeats", 5) + heartbeatIntervalTime = @config.get("eventsHeartbeatIntervalTime", 60000) + + @.missedHeartbeats = 0 + @.heartbeatInterval = setInterval(() => + try + if @.missedHeartbeats >= maxMissedHeartbeats + throw new Error("Too many missed heartbeats PINGs.") + + @.missedHeartbeats++ + @.sendMessage({cmd: "ping"}) + @log.debug("HeartBeat send PING") + catch e + @log.error("HeartBeat error: " + e.message) + @.stopHeartBeatMessages() + , heartbeatIntervalTime) + + @log.debug("HeartBeat enabled") + + stopHeartBeatMessages: -> + return if not @.heartbeatInterval + + clearInterval(@.heartbeatInterval) + @.heartbeatInterval = null + + @log.debug("HeartBeat disabled") + + processHeartBeatPongMessage: (data) -> + @.missedHeartbeats = 0 + @log.debug("HeartBeat recived PONG") + + ########################################### + # Messages + ########################################### serialize: (message) -> if _.isObject(message) return JSON.stringify(message) @@ -91,6 +142,24 @@ class EventsService for msg in messages @.ws.send(msg) + processMessage: (data) => + routingKey = data.routing_key + + if not @.subscriptions[routingKey]? + return + + subscription = @.subscriptions[routingKey] + + if subscription.scope + subscription.scope.$apply -> + subscription.callback(data.data) + + else + subscription.callback(data.data) + + ########################################### + # Subscribe and Unsubscribe + ########################################### subscribe: (scope, routingKey, callback) -> if @.error return @@ -109,7 +178,8 @@ class EventsService @.subscriptions[routingKey] = subscription @.sendMessage(message) - scope.$on("$destroy", => @.unsubscribe(routingKey)) + + scope.$on("$destroy", => @.unsubscribe(routingKey)) if scope unsubscribe: (routingKey) -> if @.error @@ -124,8 +194,13 @@ class EventsService @.sendMessage(message) + ########################################### + # Event listeners + ########################################### onOpen: -> @.connected = true + @.startHeartBeatMessages() + @.notifications() @log.debug("WebSocket connection opened") token = @auth.getToken() @@ -141,14 +216,11 @@ class EventsService @.log.debug "WebSocket message received: #{event.data}" data = JSON.parse(event.data) - routingKey = data.routing_key - if not @.subscriptions[routingKey]? - return - - subscription = @.subscriptions[routingKey] - subscription.scope.$apply -> - subscription.callback(data.data) + if data.cmd == "pong" + @.processHeartBeatPongMessage(data) + else + @.processMessage(data) onError: (error) -> @log.error("WebSocket error: #{error}") @@ -157,17 +229,25 @@ class EventsService onClose: -> @log.debug("WebSocket closed.") @.connected = false + @.stopHeartBeatMessages() class EventsProvider setSessionId: (sessionId) -> @.sessionId = sessionId - $get: ($win, $log, $conf, $auth) -> - service = new EventsService($win, $log, $conf, $auth) + $get: ($win, $log, $conf, $auth, liveAnnouncementService, $rootScope) -> + service = new EventsService($win, $log, $conf, $auth, liveAnnouncementService, $rootScope) service.initialize(@.sessionId) return service - @.prototype.$get.$inject = ["$window", "$log", "$tgConfig", "$tgAuth"] + @.prototype.$get.$inject = [ + "$window", + "$log", + "$tgConfig", + "$tgAuth", + "tgLiveAnnouncementService", + "$rootScope" + ] module.provider("$tgEvents", EventsProvider) diff --git a/app/coffee/modules/feedback.coffee b/app/coffee/modules/feedback.coffee index d645cb9d..dda743e4 100644 --- a/app/coffee/modules/feedback.coffee +++ b/app/coffee/modules/feedback.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/integrations.coffee b/app/coffee/modules/integrations.coffee index 5390e236..0fde7411 100644 --- a/app/coffee/modules/integrations.coffee +++ b/app/coffee/modules/integrations.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/issues.coffee b/app/coffee/modules/issues.coffee index 82d8031f..43543202 100644 --- a/app/coffee/modules/issues.coffee +++ b/app/coffee/modules/issues.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/issues/detail.coffee b/app/coffee/modules/issues/detail.coffee index dffcb92b..22bcbe9e 100644 --- a/app/coffee/modules/issues/detail.coffee +++ b/app/coffee/modules/issues/detail.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -127,14 +127,14 @@ class IssueDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.issueId = issue.id @scope.commentModel = issue - if @scope.issue.neighbors.previous.ref? + if @scope.issue.neighbors.previous?.ref? ctx = { project: @scope.project.slug ref: @scope.issue.neighbors.previous.ref } @scope.previousUrl = @navUrls.resolve("project-issues-detail", ctx) - if @scope.issue.neighbors.next.ref? + if @scope.issue.neighbors.next?.ref? ctx = { project: @scope.project.slug ref: @scope.issue.neighbors.next.ref diff --git a/app/coffee/modules/issues/lightboxes.coffee b/app/coffee/modules/issues/lightboxes.coffee index c8db0cdf..63db96aa 100644 --- a/app/coffee/modules/issues/lightboxes.coffee +++ b/app/coffee/modules/issues/lightboxes.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/issues/list.coffee b/app/coffee/modules/issues/list.coffee index 4037967d..594d73f4 100644 --- a/app/coffee/modules/issues/list.coffee +++ b/app/coffee/modules/issues/list.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -783,7 +783,7 @@ IssueAssignedToInlineEditionDirective = ($repo, $rootscope, popoverService) -> link = ($scope, $el, $attrs) -> updateIssue = (issue) -> - ctx = {name: "Unassigned", imgurl: "/images/unnamed.png"} + ctx = {name: "Unassigned", imgurl: "/" + window._version + "/images/unnamed.png"} member = $scope.usersById[issue.assigned_to] if member ctx.imgurl = member.photo diff --git a/app/coffee/modules/kanban.coffee b/app/coffee/modules/kanban.coffee index f4986966..398b348c 100644 --- a/app/coffee/modules/kanban.coffee +++ b/app/coffee/modules/kanban.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/kanban/main.coffee b/app/coffee/modules/kanban/main.coffee index b2f803ba..4ab4a6b3 100644 --- a/app/coffee/modules/kanban/main.coffee +++ b/app/coffee/modules/kanban/main.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -132,7 +132,7 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi status__is_archived: false } - return @rs.userstories.listAll(@scope.projectId, params).then (userstories) => + promise = @rs.userstories.listAll(@scope.projectId, params).then (userstories) => @scope.userstories = userstories usByStatus = _.groupBy(userstories, "status") @@ -166,6 +166,10 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi return userstories + promise.then( => @scope.$broadcast("redraw:wip")) + + return promise + loadUserStoriesForStatus: (ctx, statusId) -> params = { status: statusId } return @rs.userstories.listAll(@scope.projectId, params).then (userstories) => @@ -211,7 +215,7 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi return promise.then (project) => @.fillUsersAndRoles(project.members, project.roles) @.initializeSubscription() - @.loadKanban().then( => @scope.$broadcast("redraw:wip")) + @.loadKanban() ## View Mode methods @@ -547,7 +551,7 @@ KanbanUserDirective = ($log, $compile) -> render = (user) -> if user is undefined - ctx = {name: "Unassigned", imgurl: "/images/unnamed.png", clickable: clickable} + ctx = {name: "Unassigned", imgurl: "/" + window._version + "/images/unnamed.png", clickable: clickable} else ctx = {name: user.full_name_display, imgurl: user.photo, clickable: clickable} diff --git a/app/coffee/modules/kanban/sortable.coffee b/app/coffee/modules/kanban/sortable.coffee index 58d5f678..009e54d6 100644 --- a/app/coffee/modules/kanban/sortable.coffee +++ b/app/coffee/modules/kanban/sortable.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/plugins/main.coffee b/app/coffee/modules/plugins.coffee similarity index 80% rename from app/plugins/main.coffee rename to app/coffee/modules/plugins.coffee index 29bd595b..a58aaf2f 100644 --- a/app/plugins/main.coffee +++ b/app/coffee/modules/plugins.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/projects.coffee b/app/coffee/modules/projects.coffee index 7fccd406..91a14717 100644 --- a/app/coffee/modules/projects.coffee +++ b/app/coffee/modules/projects.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/projects/lightboxes.coffee b/app/coffee/modules/projects/lightboxes.coffee index fe1b42ce..55daf92b 100644 --- a/app/coffee/modules/projects/lightboxes.coffee +++ b/app/coffee/modules/projects/lightboxes.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/related-tasks.coffee b/app/coffee/modules/related-tasks.coffee index ec0cbd8b..684df1ec 100644 --- a/app/coffee/modules/related-tasks.coffee +++ b/app/coffee/modules/related-tasks.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -248,7 +248,7 @@ RelatedTaskAssignedToInlineEditionDirective = ($repo, $rootscope, popoverService link = ($scope, $el, $attrs) -> updateRelatedTask = (task) -> - ctx = {name: "Unassigned", imgurl: "/images/unnamed.png"} + ctx = {name: "Unassigned", imgurl: "/" + window._version + "/images/unnamed.png"} member = $scope.usersById[task.assigned_to] if member ctx.imgurl = member.photo diff --git a/app/coffee/modules/resources.coffee b/app/coffee/modules/resources.coffee index f5453640..b6fcb827 100644 --- a/app/coffee/modules/resources.coffee +++ b/app/coffee/modules/resources.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/attachments.coffee b/app/coffee/modules/resources/attachments.coffee index 910145c2..1ed950cb 100644 --- a/app/coffee/modules/resources/attachments.coffee +++ b/app/coffee/modules/resources/attachments.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/custom-attributes-values.coffee b/app/coffee/modules/resources/custom-attributes-values.coffee index 1b2c4fd7..b3169967 100644 --- a/app/coffee/modules/resources/custom-attributes-values.coffee +++ b/app/coffee/modules/resources/custom-attributes-values.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/custom-attributes.coffee b/app/coffee/modules/resources/custom-attributes.coffee index d5734e26..0d4e934e 100644 --- a/app/coffee/modules/resources/custom-attributes.coffee +++ b/app/coffee/modules/resources/custom-attributes.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/history.coffee b/app/coffee/modules/resources/history.coffee index e40ee9f8..fd45579a 100644 --- a/app/coffee/modules/resources/history.coffee +++ b/app/coffee/modules/resources/history.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/invitations.coffee b/app/coffee/modules/resources/invitations.coffee index b4a5d2c5..49455cf5 100644 --- a/app/coffee/modules/resources/invitations.coffee +++ b/app/coffee/modules/resources/invitations.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/issues.coffee b/app/coffee/modules/resources/issues.coffee index 521c8685..ebf2dbdb 100644 --- a/app/coffee/modules/resources/issues.coffee +++ b/app/coffee/modules/resources/issues.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/kanban.coffee b/app/coffee/modules/resources/kanban.coffee index e71c4cee..bdddce74 100644 --- a/app/coffee/modules/resources/kanban.coffee +++ b/app/coffee/modules/resources/kanban.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/locales.coffee b/app/coffee/modules/resources/locales.coffee index 2c2fd170..479b7655 100644 --- a/app/coffee/modules/resources/locales.coffee +++ b/app/coffee/modules/resources/locales.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2015 Andrey Antukh -# Copyright (C) 2015 Jesús Espino Garcia -# Copyright (C) 2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/mdrender.coffee b/app/coffee/modules/resources/mdrender.coffee index 8a8d58ae..2a40dfc2 100644 --- a/app/coffee/modules/resources/mdrender.coffee +++ b/app/coffee/modules/resources/mdrender.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/memberships.coffee b/app/coffee/modules/resources/memberships.coffee index 50c0f0cf..3de38612 100644 --- a/app/coffee/modules/resources/memberships.coffee +++ b/app/coffee/modules/resources/memberships.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/modules.coffee b/app/coffee/modules/resources/modules.coffee index b0e7ef45..b1f342f7 100644 --- a/app/coffee/modules/resources/modules.coffee +++ b/app/coffee/modules/resources/modules.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/notify-policies.coffee b/app/coffee/modules/resources/notify-policies.coffee index 60b4b6aa..03144893 100644 --- a/app/coffee/modules/resources/notify-policies.coffee +++ b/app/coffee/modules/resources/notify-policies.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/projects.coffee b/app/coffee/modules/resources/projects.coffee index 9747d2e1..8cc3fabd 100644 --- a/app/coffee/modules/resources/projects.coffee +++ b/app/coffee/modules/resources/projects.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/roles.coffee b/app/coffee/modules/resources/roles.coffee index 591f8681..e6d79b8d 100644 --- a/app/coffee/modules/resources/roles.coffee +++ b/app/coffee/modules/resources/roles.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/search.coffee b/app/coffee/modules/resources/search.coffee index 48639e25..ed571e32 100644 --- a/app/coffee/modules/resources/search.coffee +++ b/app/coffee/modules/resources/search.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/sprints.coffee b/app/coffee/modules/resources/sprints.coffee index e8535b5b..45cff81e 100644 --- a/app/coffee/modules/resources/sprints.coffee +++ b/app/coffee/modules/resources/sprints.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/tasks.coffee b/app/coffee/modules/resources/tasks.coffee index 5eaa1abf..64a73b27 100644 --- a/app/coffee/modules/resources/tasks.coffee +++ b/app/coffee/modules/resources/tasks.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/user-settings.coffee b/app/coffee/modules/resources/user-settings.coffee index ca3d365e..80595b00 100644 --- a/app/coffee/modules/resources/user-settings.coffee +++ b/app/coffee/modules/resources/user-settings.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/users.coffee b/app/coffee/modules/resources/users.coffee index 53285191..15a5aedb 100644 --- a/app/coffee/modules/resources/users.coffee +++ b/app/coffee/modules/resources/users.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/userstories.coffee b/app/coffee/modules/resources/userstories.coffee index 0ac89b38..5d624a04 100644 --- a/app/coffee/modules/resources/userstories.coffee +++ b/app/coffee/modules/resources/userstories.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/webhooklogs.coffee b/app/coffee/modules/resources/webhooklogs.coffee index a7db8514..d33cfecc 100644 --- a/app/coffee/modules/resources/webhooklogs.coffee +++ b/app/coffee/modules/resources/webhooklogs.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/webhooks.coffee b/app/coffee/modules/resources/webhooks.coffee index d24ca488..2f51e540 100644 --- a/app/coffee/modules/resources/webhooks.coffee +++ b/app/coffee/modules/resources/webhooks.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/wiki.coffee b/app/coffee/modules/resources/wiki.coffee index c3f2c733..8e450745 100644 --- a/app/coffee/modules/resources/wiki.coffee +++ b/app/coffee/modules/resources/wiki.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/search.coffee b/app/coffee/modules/search.coffee index 7f20fc3a..022563b4 100644 --- a/app/coffee/modules/search.coffee +++ b/app/coffee/modules/search.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/taskboard.coffee b/app/coffee/modules/taskboard.coffee index 3b5d85f1..0e136de5 100644 --- a/app/coffee/modules/taskboard.coffee +++ b/app/coffee/modules/taskboard.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/taskboard/charts.coffee b/app/coffee/modules/taskboard/charts.coffee index a552ead5..517dfc8a 100644 --- a/app/coffee/modules/taskboard/charts.coffee +++ b/app/coffee/modules/taskboard/charts.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/taskboard/lightboxes.coffee b/app/coffee/modules/taskboard/lightboxes.coffee index a2ce0de1..e850a3d4 100644 --- a/app/coffee/modules/taskboard/lightboxes.coffee +++ b/app/coffee/modules/taskboard/lightboxes.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/taskboard/main.coffee b/app/coffee/modules/taskboard/main.coffee index 9e7f5f37..f3491c66 100644 --- a/app/coffee/modules/taskboard/main.coffee +++ b/app/coffee/modules/taskboard/main.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -185,7 +185,7 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.usTasks[task.user_story][task.status].push(task) if tasks.length == 0 - + if @scope.userstories.length > 0 usId = @scope.userstories[0].id else @@ -442,7 +442,7 @@ TaskboardUserDirective = ($log) -> user = $scope.usersById[assigned_to] if user is undefined - _.assign($scope, {name: "Unassigned", imgurl: "/images/unnamed.png", clickable: clickable}) + _.assign($scope, {name: "Unassigned", imgurl: "/" + window._version + "/images/unnamed.png", clickable: clickable}) else _.assign($scope, {name: user.full_name_display, imgurl: user.photo, clickable: clickable}) diff --git a/app/coffee/modules/taskboard/sortable.coffee b/app/coffee/modules/taskboard/sortable.coffee index 50337c05..aa4c6ca0 100644 --- a/app/coffee/modules/taskboard/sortable.coffee +++ b/app/coffee/modules/taskboard/sortable.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/tasks.coffee b/app/coffee/modules/tasks.coffee index 1dfe6770..1b267470 100644 --- a/app/coffee/modules/tasks.coffee +++ b/app/coffee/modules/tasks.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/tasks/detail.coffee b/app/coffee/modules/tasks/detail.coffee index d1adbf0c..96bb59d7 100644 --- a/app/coffee/modules/tasks/detail.coffee +++ b/app/coffee/modules/tasks/detail.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -115,14 +115,14 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.taskId = task.id @scope.commentModel = task - if @scope.task.neighbors.previous.ref? + if @scope.task.neighbors.previous?.ref? ctx = { project: @scope.project.slug ref: @scope.task.neighbors.previous.ref } @scope.previousUrl = @navUrls.resolve("project-tasks-detail", ctx) - if @scope.task.neighbors.next.ref? + if @scope.task.neighbors.next?.ref? ctx = { project: @scope.project.slug ref: @scope.task.neighbors.next.ref diff --git a/app/coffee/modules/team.coffee b/app/coffee/modules/team.coffee index 7f39aa58..f67c6b08 100644 --- a/app/coffee/modules/team.coffee +++ b/app/coffee/modules/team.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/team/main.coffee b/app/coffee/modules/team/main.coffee index 229f652c..e134a7e4 100644 --- a/app/coffee/modules/team/main.coffee +++ b/app/coffee/modules/team/main.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/user-settings.coffee b/app/coffee/modules/user-settings.coffee index c40a8825..a7cc586c 100644 --- a/app/coffee/modules/user-settings.coffee +++ b/app/coffee/modules/user-settings.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/user-settings/change-password.coffee b/app/coffee/modules/user-settings/change-password.coffee index ebd9ce5f..e86966b8 100644 --- a/app/coffee/modules/user-settings/change-password.coffee +++ b/app/coffee/modules/user-settings/change-password.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/user-settings/lightboxes.coffee b/app/coffee/modules/user-settings/lightboxes.coffee index c3dd5375..1332baf0 100644 --- a/app/coffee/modules/user-settings/lightboxes.coffee +++ b/app/coffee/modules/user-settings/lightboxes.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/user-settings/main.coffee b/app/coffee/modules/user-settings/main.coffee index 297431e4..24424112 100644 --- a/app/coffee/modules/user-settings/main.coffee +++ b/app/coffee/modules/user-settings/main.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/user-settings/nav.coffee b/app/coffee/modules/user-settings/nav.coffee index c235961d..1f820827 100644 --- a/app/coffee/modules/user-settings/nav.coffee +++ b/app/coffee/modules/user-settings/nav.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/user-settings/notifications.coffee b/app/coffee/modules/user-settings/notifications.coffee index df74e003..09ba4152 100644 --- a/app/coffee/modules/user-settings/notifications.coffee +++ b/app/coffee/modules/user-settings/notifications.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/userstories.coffee b/app/coffee/modules/userstories.coffee index 711afcfc..e0ae0878 100644 --- a/app/coffee/modules/userstories.coffee +++ b/app/coffee/modules/userstories.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/userstories/detail.coffee b/app/coffee/modules/userstories/detail.coffee index 3af67d91..fb25ed57 100644 --- a/app/coffee/modules/userstories/detail.coffee +++ b/app/coffee/modules/userstories/detail.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -152,14 +152,14 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.usId = us.id @scope.commentModel = us - if @scope.us.neighbors.previous.ref? + if @scope.us.neighbors.previous?.ref? ctx = { project: @scope.project.slug ref: @scope.us.neighbors.previous.ref } @scope.previousUrl = @navUrls.resolve("project-userstories-detail", ctx) - if @scope.us.neighbors.next.ref? + if @scope.us.neighbors.next?.ref? ctx = { project: @scope.project.slug ref: @scope.us.neighbors.next.ref diff --git a/app/coffee/modules/wiki.coffee b/app/coffee/modules/wiki.coffee index 76c0c615..196c99bb 100644 --- a/app/coffee/modules/wiki.coffee +++ b/app/coffee/modules/wiki.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/wiki/main.coffee b/app/coffee/modules/wiki/main.coffee index c108954a..434d9ea2 100644 --- a/app/coffee/modules/wiki/main.coffee +++ b/app/coffee/modules/wiki/main.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -157,7 +157,7 @@ WikiSummaryDirective = ($log, $template, $compile, $translate) -> user = $scope.usersById[wiki.last_modifier] if user is undefined - user = {name: "unknown", imgUrl: "/images/user-noimage.png"} + user = {name: "unknown", imgUrl: "/" + window._version + "/images/user-noimage.png"} else user = {name: user.full_name_display, imgUrl: user.photo} diff --git a/app/coffee/modules/wiki/nav.coffee b/app/coffee/modules/wiki/nav.coffee index ef7901a0..ead6f803 100644 --- a/app/coffee/modules/wiki/nav.coffee +++ b/app/coffee/modules/wiki/nav.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/utils.coffee b/app/coffee/utils.coffee index f0706a86..11abb7fd 100644 --- a/app/coffee/utils.coffee +++ b/app/coffee/utils.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/fonts/OpenSans-Bold.ttf b/app/fonts/OpenSans-Bold.ttf new file mode 100644 index 00000000..fd79d43b Binary files /dev/null and b/app/fonts/OpenSans-Bold.ttf differ diff --git a/app/fonts/OpenSans-Light.eot b/app/fonts/OpenSans-Light.eot deleted file mode 100644 index 725db50b..00000000 Binary files a/app/fonts/OpenSans-Light.eot and /dev/null differ diff --git a/app/fonts/OpenSans-Light.svg b/app/fonts/OpenSans-Light.svg deleted file mode 100644 index b6daf106..00000000 --- a/app/fonts/OpenSans-Light.svg +++ /dev/null @@ -1,581 +0,0 @@ - - - - -Created by FontForge 20110222 at Thu May 12 12:49:24 2011 - By www-data -Digitized data copyright (c) 2010-2011, Google Corporation. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/fonts/OpenSans-Light.ttf b/app/fonts/OpenSans-Light.ttf index 3d29b04b..0d381897 100644 Binary files a/app/fonts/OpenSans-Light.ttf and b/app/fonts/OpenSans-Light.ttf differ diff --git a/app/fonts/OpenSans-Light.woff b/app/fonts/OpenSans-Light.woff deleted file mode 100644 index d50b69a1..00000000 --- a/app/fonts/OpenSans-Light.woff +++ /dev/null @@ -1,811 +0,0 @@ - - - - - - - - - - - - open-sans/OpenSans-Light.woff at gh-pages · FontFaceKit/open-sans - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Skip to content -
- - - - - - - - - - - - -
-
-
- -
-
-
- - -
    - -
  • -
    - -
    - - - - Watch - - - - -
    - -
    -
    -
    -
  • - -
  • - -
    - -
    - - -
    -
    - - -
    - -
  • - -
  • - - - Fork - - - - -
  • - -
- -

- - /open-sans - - - - - -

-
-
- -
-
-
- - - -
- -
-

HTTPS clone URL

-
- - - - -
-
- - -
-

SSH clone URL

-
- - - - -
-
- - -
-

Subversion checkout URL

-
- - - - -
-
- - - -
You can clone with -
,
, or
. - - - -
- - - - - - - Download ZIP - -
-
- -
- - - - - - - -
- -
- - - branch: - gh-pages - - - -
- -
- - - - -
- - -
- - -
-
- - Martin Domke - - -
- - - -
- -
-
-
- -
- Raw - History -
- - - -
- -
- -
- 62.844 kB -
-
- -
-
- View Raw -
-
- -
- -Jump to Line - - -
- -
- -
-
- - -
- -
- -
- - -
-
-
- -
-
-
-
-
- -
- - - - - - -
- - - Something went wrong with that request. Please try again. -
- - - - - - - - - diff --git a/app/fonts/OpenSans-Regular.ttf b/app/fonts/OpenSans-Regular.ttf new file mode 100644 index 00000000..db433349 Binary files /dev/null and b/app/fonts/OpenSans-Regular.ttf differ diff --git a/app/fonts/OpenSans-Semibold.ttf b/app/fonts/OpenSans-Semibold.ttf new file mode 100644 index 00000000..1a7679e3 Binary files /dev/null and b/app/fonts/OpenSans-Semibold.ttf differ diff --git a/app/fonts/opensans-regular.eot b/app/fonts/opensans-regular.eot deleted file mode 100644 index 6bbc3cf5..00000000 Binary files a/app/fonts/opensans-regular.eot and /dev/null differ diff --git a/app/fonts/opensans-regular.svg b/app/fonts/opensans-regular.svg deleted file mode 100644 index 25a39523..00000000 --- a/app/fonts/opensans-regular.svg +++ /dev/null @@ -1,1831 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/fonts/opensans-regular.ttf b/app/fonts/opensans-regular.ttf deleted file mode 100644 index c537f838..00000000 Binary files a/app/fonts/opensans-regular.ttf and /dev/null differ diff --git a/app/fonts/opensans-regular.woff b/app/fonts/opensans-regular.woff deleted file mode 100644 index e231183d..00000000 Binary files a/app/fonts/opensans-regular.woff and /dev/null differ diff --git a/app/fonts/opensans-semibold.eot b/app/fonts/opensans-semibold.eot deleted file mode 100644 index d8375dd0..00000000 Binary files a/app/fonts/opensans-semibold.eot and /dev/null differ diff --git a/app/fonts/opensans-semibold.svg b/app/fonts/opensans-semibold.svg deleted file mode 100644 index eec4db8b..00000000 --- a/app/fonts/opensans-semibold.svg +++ /dev/null @@ -1,1830 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/fonts/opensans-semibold.ttf b/app/fonts/opensans-semibold.ttf deleted file mode 100644 index b3290843..00000000 Binary files a/app/fonts/opensans-semibold.ttf and /dev/null differ diff --git a/app/fonts/opensans-semibold.woff b/app/fonts/opensans-semibold.woff deleted file mode 100644 index 28d6adee..00000000 Binary files a/app/fonts/opensans-semibold.woff and /dev/null differ diff --git a/app/images/notification-decoration.png b/app/images/notification-decoration.png new file mode 100644 index 00000000..2147968c Binary files /dev/null and b/app/images/notification-decoration.png differ diff --git a/app/index.jade b/app/index.jade index a9994cef..b53656f9 100644 --- a/app/index.jade +++ b/app/index.jade @@ -10,8 +10,8 @@ html(lang="en") meta(name="description", content="Taiga is a project management platform for startups and agile developers & designers who want a simple, beautiful tool that makes work truly enjoyable.") meta(name="keywords", content="agile, scrum, taiga, management, project, developer, designer, user experience") //-meta(name="viewport", content="width=device-width, user-scalable=no") - link(rel="stylesheet", href="/styles/theme-taiga.css") - link(rel="icon", type="image/png", href="/images/favicon.png") + link(rel="stylesheet", href="/#{v}/styles/theme-taiga.css") + link(rel="icon", type="image/png", href="/#{v}/images/favicon.png") //- PRERENDER SERVICE: This is to know when the page is completely loaded. script(type='text/javascript'). @@ -38,7 +38,8 @@ html(lang="en") include partials/includes/components/notification-message div(tg-joy-ride) + div(tg-live-announcement) - script(src="/js/libs.js?v=#{v}") - script(src="/js/templates.js?v=#{v}") - script(src="/js/app-loader.js?v=#{v}") + script(src="/#{v}/js/libs.js") + script(src="/#{v}/js/templates.js") + script(src="/#{v}/js/app-loader.js") diff --git a/app/locales/locale-ca.json b/app/locales/taiga/locale-ca.json similarity index 100% rename from app/locales/locale-ca.json rename to app/locales/taiga/locale-ca.json diff --git a/app/locales/locale-de.json b/app/locales/taiga/locale-de.json similarity index 100% rename from app/locales/locale-de.json rename to app/locales/taiga/locale-de.json diff --git a/app/locales/locale-en.json b/app/locales/taiga/locale-en.json similarity index 99% rename from app/locales/locale-en.json rename to app/locales/taiga/locale-en.json index 297aac13..f446c6c9 100644 --- a/app/locales/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -274,9 +274,9 @@ "HEADER": "I already have a Taiga login", "PLACEHOLDER_AUTH_NAME": "Username or email (case sensitive)", "LINK_FORGOT_PASSWORD": "Forgot it?", - "TITLE_LINK_FORGOT_PASSWORD": "Did you forgot your password?", + "TITLE_LINK_FORGOT_PASSWORD": "Did you forget your password?", "ACTION_ENTER": "Enter", - "ACTION_SIGN_IN": "Sign in", + "ACTION_SIGN_IN": "Login", "PLACEHOLDER_AUTH_PASSWORD": "Password (case sensitive)" }, "LOGIN_FORM": { @@ -727,7 +727,7 @@ "PLACEHOLDER_SEARCH": "Search in...", "ACTION_CREATE_PROJECT": "Create project", "ACTION_IMPORT_PROJECT": "Import project", - "SEE_MORE_PROJECTS": "See more projects", + "MANAGE_PROJECTS": "Manage projects", "TITLE_CREATE_PROJECT": "Create project", "TITLE_IMPORT_PROJECT": "Import project", "TITLE_PRVIOUS_PROJECT": "Show previous projects", @@ -1311,7 +1311,7 @@ "HINT2_TEXT": "Teams can now create custom fields as a flexible means to enter specific data useful for their particular workflow.", "HINT3_TITLE": "Reorder your projects to feature those most relevant to you.", "HINT3_TEXT": "The 10 projects are listed in the direct access bar at the top.", - "HINT4_TITLE": "Did you forgot what were you working on?", + "HINT4_TITLE": "Did you forget what were you working on?", "HINT4_TEXT": "Don't worry, on your dashboard you'll find your open tasks, issues, and user stories in the order you worked on them." }, "TIMELINE": { @@ -1357,6 +1357,12 @@ "CANCEL": "Cancel" }, "JOYRIDE": { + "NAV": { + "NEXT": "Next", + "BACK": "Back", + "SKIP": "Skip", + "DONE": "Done" + }, "DASHBOARD": { "STEP1": { "TITLE": "Your project", diff --git a/app/locales/locale-es.json b/app/locales/taiga/locale-es.json similarity index 100% rename from app/locales/locale-es.json rename to app/locales/taiga/locale-es.json diff --git a/app/locales/locale-fi.json b/app/locales/taiga/locale-fi.json similarity index 100% rename from app/locales/locale-fi.json rename to app/locales/taiga/locale-fi.json diff --git a/app/locales/locale-fr.json b/app/locales/taiga/locale-fr.json similarity index 100% rename from app/locales/locale-fr.json rename to app/locales/taiga/locale-fr.json diff --git a/app/locales/locale-it.json b/app/locales/taiga/locale-it.json similarity index 100% rename from app/locales/locale-it.json rename to app/locales/taiga/locale-it.json diff --git a/app/locales/locale-nl.json b/app/locales/taiga/locale-nl.json similarity index 100% rename from app/locales/locale-nl.json rename to app/locales/taiga/locale-nl.json diff --git a/app/locales/locale-pl.json b/app/locales/taiga/locale-pl.json similarity index 100% rename from app/locales/locale-pl.json rename to app/locales/taiga/locale-pl.json diff --git a/app/locales/locale-pt-br.json b/app/locales/taiga/locale-pt-br.json similarity index 100% rename from app/locales/locale-pt-br.json rename to app/locales/taiga/locale-pt-br.json diff --git a/app/locales/locale-ru.json b/app/locales/taiga/locale-ru.json similarity index 100% rename from app/locales/locale-ru.json rename to app/locales/taiga/locale-ru.json diff --git a/app/locales/locale-zh-hant.json b/app/locales/taiga/locale-zh-hant.json similarity index 100% rename from app/locales/locale-zh-hant.json rename to app/locales/taiga/locale-zh-hant.json diff --git a/app/modules/components/components.module.coffee b/app/modules/components/components.module.coffee index a714b61f..468886b6 100644 --- a/app/modules/components/components.module.coffee +++ b/app/modules/components/components.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/joy-ride/joy-ride.directive.coffee b/app/modules/components/joy-ride/joy-ride.directive.coffee index 8b482811..1f2a79a8 100644 --- a/app/modules/components/joy-ride/joy-ride.directive.coffee +++ b/app/modules/components/joy-ride/joy-ride.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,23 +19,11 @@ taiga = @.taiga -JoyRideDirective = ($rootScope, currentUserService, joyRideService, $location) -> +JoyRideDirective = ($rootScope, currentUserService, joyRideService, $location, $translate) -> link = (scope, el, attrs, ctrl) -> unsuscribe = null intro = introJs() - #Todo: translate - intro.setOptions({ - exitOnEsc: false, - exitOnOverlayClick: false, - showStepNumbers: false, - nextLabel: 'Next →', - prevLabel: '← Back', - skipLabel: 'Skip', - doneLabel: 'Done', - disableInteraction: true - }) - intro.oncomplete () -> $('html,body').scrollTop(0) @@ -46,6 +34,17 @@ JoyRideDirective = ($rootScope, currentUserService, joyRideService, $location) - if !config[next.joyride] return + intro.setOptions({ + exitOnEsc: false, + exitOnOverlayClick: false, + showStepNumbers: false, + nextLabel: $translate.instant('JOYRIDE.NAV.NEXT') + ' →', + prevLabel: '← ' + $translate.instant('JOYRIDE.NAV.BACK'), + skipLabel: $translate.instant('JOYRIDE.NAV.SKIP'), + doneLabel: $translate.instant('JOYRIDE.NAV.DONE'), + disableInteraction: true + }) + intro.setOption('steps', joyRideService.get(next.joyride)) intro.start() @@ -78,7 +77,8 @@ JoyRideDirective.$inject = [ "$rootScope", "tgCurrentUserService", "tgJoyRideService", - "$location" + "$location", + "$translate" ] angular.module("taigaComponents").directive("tgJoyRide", JoyRideDirective) diff --git a/app/modules/components/joy-ride/joy-ride.service.coffee b/app/modules/components/joy-ride/joy-ride.service.coffee index 46fb5627..396ec30d 100644 --- a/app/modules/components/joy-ride/joy-ride.service.coffee +++ b/app/modules/components/joy-ride/joy-ride.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/joy-ride/joy-ride.service.spec.coffee b/app/modules/components/joy-ride/joy-ride.service.spec.coffee index 48e1abbe..06e944de 100644 --- a/app/modules/components/joy-ride/joy-ride.service.spec.coffee +++ b/app/modules/components/joy-ride/joy-ride.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/live-announcement/live-announcement.directive.coffee b/app/modules/components/live-announcement/live-announcement.directive.coffee new file mode 100644 index 00000000..97f037d8 --- /dev/null +++ b/app/modules/components/live-announcement/live-announcement.directive.coffee @@ -0,0 +1,54 @@ +### +# Copyright (C) 2014-2015 Andrey Antukh +# Copyright (C) 2014-2015 Jesús Espino Garcia +# Copyright (C) 2014-2015 David Barragán Merino +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# File: live-announcement.directive.coffee +### + + +LiveAnnouncementDirective = (liveAnnouncementService) -> + link = (scope, el, attrs) -> + + return { + restrict: "AE", + scope: {}, + controllerAs: 'vm', + controller: () -> + this.close = () -> + liveAnnouncementService.open = false + + Object.defineProperties(this, { + open: { + get: () -> return liveAnnouncementService.open + }, + title: { + get: () -> return liveAnnouncementService.title + }, + desc: { + get: () -> return liveAnnouncementService.desc + } + }) + link: link, + templateUrl: "components/live-announcement/live-announcement.html" + } + +LiveAnnouncementDirective.$inject = [ + "tgLiveAnnouncementService" +] + +angular.module("taigaComponents") + .directive("tgLiveAnnouncement", LiveAnnouncementDirective) diff --git a/app/modules/components/live-announcement/live-announcement.jade b/app/modules/components/live-announcement/live-announcement.jade new file mode 100644 index 00000000..25df0db7 --- /dev/null +++ b/app/modules/components/live-announcement/live-announcement.jade @@ -0,0 +1,12 @@ +.live-announcement(ng-class="{visible: vm.open}") + .live-announcement-inner + img.anouncement-decoration(src="/#{v}/images/notification-decoration.png", alt="Loading...") + .text + h2.title {{vm.title}} + p.warning(ng-bind-html="vm.desc") + a.close( + ng-click="vm.close()" + href="" + title="{{ COMMON.CLOSE | translate }}" + ) + include ../../../svg/remove.svg diff --git a/app/modules/components/live-announcement/live-announcement.scss b/app/modules/components/live-announcement/live-announcement.scss new file mode 100644 index 00000000..d30cdd00 --- /dev/null +++ b/app/modules/components/live-announcement/live-announcement.scss @@ -0,0 +1,72 @@ +.live-announcement { + $animation-steps-duration: .5s; + align-content: center; + background: $tribe-primary; + display: flex; + height: 0; + justify-content: center; + overflow: hidden; + pointer-events: none; + position: fixed; + top: 0; + transition: width $animation-steps-duration, height $animation-steps-duration; + transition-delay: $animation-steps-duration; + width: 0; + z-index: 99; + .live-announcement-inner { + opacity: 0; + transition: opacity $animation-steps-duration; + width: 100%; + } + &.visible { + height: 146px; + pointer-events: auto; + transition-delay: 0s; + width: 100%; + .live-announcement-inner { + opacity: 1; + transition: opacity $animation-steps-duration $animation-steps-duration; + } + } +} + +.live-announcement-inner { + display: flex; + max-width: 1200px; + .announcement-decoration { + align-self: flex-end; + margin-right: 1rem; + } + .text { + padding: 1.25rem 3rem 1.25rem 2rem; + position: relative; + width: 100%; + } + .title { + @extend %bold; + @extend %larger; + color: $tribe-secondary; + margin-bottom: .5rem; + } + .warning { + color: $tribe-secondary; + a { + @extend %bold; + color: $tribe-secondary; + } + } + .close { + height: 2.5rem; + position: absolute; + right: 0; + top: 1rem; + width: 2.5rem; + svg { + fill: lighten($tribe-secondary, 15%); + transition: fill .2s; + &:hover { + fill: $tribe-secondary; + } + } + } +} diff --git a/app/modules/components/live-announcement/live-announcement.service.coffee b/app/modules/components/live-announcement/live-announcement.service.coffee new file mode 100644 index 00000000..a8c8168b --- /dev/null +++ b/app/modules/components/live-announcement/live-announcement.service.coffee @@ -0,0 +1,31 @@ +### +# Copyright (C) 2014-2015 Taiga Agile LLC +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# File: notification.service.coffee +### + +class LiveAnnouncementService extends taiga.Service + constructor: () -> + @.open = false + @.title = "" + @.desc = "" + + show: (title, desc) -> + @.open = true + @.title = title + @.desc = desc + +angular.module("taigaComponents").service("tgLiveAnnouncementService", LiveAnnouncementService) diff --git a/app/modules/components/project-menu/project-menu.controller.coffee b/app/modules/components/project-menu/project-menu.controller.coffee index be5f9d00..fdd381a2 100644 --- a/app/modules/components/project-menu/project-menu.controller.coffee +++ b/app/modules/components/project-menu/project-menu.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/project-menu/project-menu.controller.spec.coffee b/app/modules/components/project-menu/project-menu.controller.spec.coffee index bb717b78..2e3e1829 100644 --- a/app/modules/components/project-menu/project-menu.controller.spec.coffee +++ b/app/modules/components/project-menu/project-menu.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/project-menu/project-menu.directive.coffee b/app/modules/components/project-menu/project-menu.directive.coffee index 369bb546..67ff2fd4 100644 --- a/app/modules/components/project-menu/project-menu.directive.coffee +++ b/app/modules/components/project-menu/project-menu.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.directive.coffee b/app/modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.directive.coffee index 1489390a..e10e47ea 100644 --- a/app/modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.directive.coffee +++ b/app/modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.directive.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/vote-button/vote-button.controller.coffee b/app/modules/components/vote-button/vote-button.controller.coffee index 9016b674..64c4de24 100644 --- a/app/modules/components/vote-button/vote-button.controller.coffee +++ b/app/modules/components/vote-button/vote-button.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/vote-button/vote-button.controller.spec.coffee b/app/modules/components/vote-button/vote-button.controller.spec.coffee index 34276b7a..241210e0 100644 --- a/app/modules/components/vote-button/vote-button.controller.spec.coffee +++ b/app/modules/components/vote-button/vote-button.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/vote-button/vote-button.directive.coffee b/app/modules/components/vote-button/vote-button.directive.coffee index 60db1a18..970661c2 100644 --- a/app/modules/components/vote-button/vote-button.directive.coffee +++ b/app/modules/components/vote-button/vote-button.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/watch-button/watch-button.controller.coffee b/app/modules/components/watch-button/watch-button.controller.coffee index 5a59621d..39b16f57 100644 --- a/app/modules/components/watch-button/watch-button.controller.coffee +++ b/app/modules/components/watch-button/watch-button.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/watch-button/watch-button.controller.spec.coffee b/app/modules/components/watch-button/watch-button.controller.spec.coffee index b2523f5a..db06465b 100644 --- a/app/modules/components/watch-button/watch-button.controller.spec.coffee +++ b/app/modules/components/watch-button/watch-button.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/watch-button/watch-button.directive.coffee b/app/modules/components/watch-button/watch-button.directive.coffee index 2aad52b5..12a9ac7b 100644 --- a/app/modules/components/watch-button/watch-button.directive.coffee +++ b/app/modules/components/watch-button/watch-button.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/external-apps/external-app.controller.coffee b/app/modules/external-apps/external-app.controller.coffee index df0f0af7..0e726a87 100644 --- a/app/modules/external-apps/external-app.controller.coffee +++ b/app/modules/external-apps/external-app.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/external-apps/external-app.controller.spec.coffee b/app/modules/external-apps/external-app.controller.spec.coffee index 4d74e74e..f6db0c86 100644 --- a/app/modules/external-apps/external-app.controller.spec.coffee +++ b/app/modules/external-apps/external-app.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/external-apps/external-app.service.coffee b/app/modules/external-apps/external-app.service.coffee index f9aca954..679ddc75 100644 --- a/app/modules/external-apps/external-app.service.coffee +++ b/app/modules/external-apps/external-app.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/external-apps/external-app.service.spec.coffee b/app/modules/external-apps/external-app.service.spec.coffee index 79dd8e98..0adf305e 100644 --- a/app/modules/external-apps/external-app.service.spec.coffee +++ b/app/modules/external-apps/external-app.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/external-apps/external-apps.module.coffee b/app/modules/external-apps/external-apps.module.coffee index 97e0f201..a24bf0ce 100644 --- a/app/modules/external-apps/external-apps.module.coffee +++ b/app/modules/external-apps/external-apps.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/feedback/feedback.service.coffee b/app/modules/feedback/feedback.service.coffee index fe3293d5..b32a2a0e 100644 --- a/app/modules/feedback/feedback.service.coffee +++ b/app/modules/feedback/feedback.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/feedback/feedback.service.spec.coffee b/app/modules/feedback/feedback.service.spec.coffee index 1c6927e6..488bdf7b 100644 --- a/app/modules/feedback/feedback.service.spec.coffee +++ b/app/modules/feedback/feedback.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/home/duties/duty.directive.coffee b/app/modules/home/duties/duty.directive.coffee index 6482d460..5ffbf653 100644 --- a/app/modules/home/duties/duty.directive.coffee +++ b/app/modules/home/duties/duty.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/home/duties/duty.directive.spec.coffee b/app/modules/home/duties/duty.directive.spec.coffee index bf631820..ff797881 100644 --- a/app/modules/home/duties/duty.directive.spec.coffee +++ b/app/modules/home/duties/duty.directive.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/home/duties/duty.jade b/app/modules/home/duties/duty.jade index d3efacee..ee04e0b8 100644 --- a/app/modules/home/duties/duty.jade +++ b/app/modules/home/duties/duty.jade @@ -1,7 +1,8 @@ a.list-itemtype-ticket( href="{{ ::vm.duty.get('url') }}" title="{{ ::duty.get('subject') }}" -) + ng-class="{'blocked': vm.duty.get('is_blocked')}" +) div.list-itemtype-avatar(ng-if="::vm.duty.get('assigned_to_extra_info')") img( ng-src="{{ ::vm.duty.get('assigned_to_extra_info').get('photo') }}" @@ -9,7 +10,7 @@ a.list-itemtype-ticket( ) div.list-itemtype-avatar(ng-if="::!vm.duty.get('assigned_to_extra_info')") img( - src="/images/unnamed.png" + src="/#{v}/images/unnamed.png" title="{{'ACTIVITY.VALUES.UNASSIGNED' | translate}}" ) div.list-itemtype-ticket-data @@ -17,7 +18,12 @@ a.list-itemtype-ticket( span.ticket-project {{ ::vm.duty.get('projectName')}} span.ticket-type {{ ::vm.getDutyType() }} span.ticket-status(ng-style="{'color': vm.duty.get('status_extra_info').get('color')}") {{ ::vm.duty.get('status_extra_info').get('name') }} - + h2 span.ticket-id(tg-bo-ref="duty.get('ref')") - span.ticket-title {{ ::duty.get('subject') }} + span.ticket-title + span.ticket-blocked( + ng-if="::vm.duty.get('is_blocked')" + title="{{::vm.duty.get('blocked_note')}}" + ) {{ 'COMMON.BLOCKED' | translate }} + span {{ ::duty.get('subject') }} diff --git a/app/modules/home/duties/duty.scss b/app/modules/home/duties/duty.scss index b8ca2f03..8cca9219 100644 --- a/app/modules/home/duties/duty.scss +++ b/app/modules/home/duties/duty.scss @@ -12,15 +12,15 @@ &:last-child { border: 0; } - &.blocked { - background: rgba($red-light, .2); - color: $red; - } >a { align-items: center; border-bottom: 0; display: flex; flex-direction: row; + &.blocked { + background: rgba($red-light, .2); + color: $red; + } } } .see-more { diff --git a/app/modules/home/home.module.coffee b/app/modules/home/home.module.coffee index 6893154e..a5152998 100644 --- a/app/modules/home/home.module.coffee +++ b/app/modules/home/home.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/home/home.service.coffee b/app/modules/home/home.service.coffee index 46cc0ea5..31b55ce0 100644 --- a/app/modules/home/home.service.coffee +++ b/app/modules/home/home.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/home/home.service.spec.coffee b/app/modules/home/home.service.spec.coffee index 791a82be..de5782d5 100644 --- a/app/modules/home/home.service.spec.coffee +++ b/app/modules/home/home.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/home/projects/home-project-list-directive.spec.coffee b/app/modules/home/projects/home-project-list-directive.spec.coffee index a6f8bd5d..d19de5ee 100644 --- a/app/modules/home/projects/home-project-list-directive.spec.coffee +++ b/app/modules/home/projects/home-project-list-directive.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/home/projects/home-project-list.directive.coffee b/app/modules/home/projects/home-project-list.directive.coffee index be30e9a8..d59a28e3 100644 --- a/app/modules/home/projects/home-project-list.directive.coffee +++ b/app/modules/home/projects/home-project-list.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/home/projects/home-project-list.jade b/app/modules/home/projects/home-project-list.jade index 789dca0d..0841af36 100644 --- a/app/modules/home/projects/home-project-list.jade +++ b/app/modules/home/projects/home-project-list.jade @@ -13,8 +13,8 @@ section.home-project-list(ng-if="vm.projects.size") href="#", ng-show="vm.projects.size", tg-nav="projects", - title="{{'PROJECT.NAVIGATION.SEE_MORE_PROJECTS' | translate}}", - translate="PROJECT.NAVIGATION.SEE_MORE_PROJECTS" + title="{{'PROJECT.NAVIGATION.MANAGE_PROJECTS' | translate}}", + translate="PROJECT.NAVIGATION.MANAGE_PROJECTS" ) section.projects-empty(ng-if="vm.projects != undefined && vm.projects.size === 0") diff --git a/app/modules/home/working-on/working-on.controller.coffee b/app/modules/home/working-on/working-on.controller.coffee index 7f7dd05b..dba27fc7 100644 --- a/app/modules/home/working-on/working-on.controller.coffee +++ b/app/modules/home/working-on/working-on.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/home/working-on/working-on.controller.spec.coffee b/app/modules/home/working-on/working-on.controller.spec.coffee index ed9f02d7..39d4c1e5 100644 --- a/app/modules/home/working-on/working-on.controller.spec.coffee +++ b/app/modules/home/working-on/working-on.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/home/working-on/working-on.directive.coffee b/app/modules/home/working-on/working-on.directive.coffee index 10ec4899..909f0669 100644 --- a/app/modules/home/working-on/working-on.directive.coffee +++ b/app/modules/home/working-on/working-on.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/home/working-on/working-on.jade b/app/modules/home/working-on/working-on.jade index dc4a70ca..13acd194 100644 --- a/app/modules/home/working-on/working-on.jade +++ b/app/modules/home/working-on/working-on.jade @@ -2,8 +2,10 @@ section.working-on-container .title-bar.working-on-title(translate="HOME.WORKING_ON_SECTION") .working-on(ng-if="vm.assignedTo.size") - .duty-single(tg-duty="duty", tg-repeat="duty in vm.assignedTo", ng-class="{blocked: duty.is_blocked}") - + .duty-single( + tg-duty="duty" + tg-repeat="duty in vm.assignedTo" + ) .working-on-empty(ng-if="vm.assignedTo != undefined && vm.assignedTo.size === 0") p(translate="HOME.EMPTY_WORKING_ON") include empty.jade @@ -12,7 +14,7 @@ section.watching-container .title-bar.watching-title(translate="HOME.WATCHING_SECTION") .watching(ng-if="vm.watching.size") - .duty-single(tg-duty="duty", tg-repeat="duty in vm.watching", ng-class="{blocked: duty.is_blocked}") + .duty-single(tg-duty="duty", tg-repeat="duty in vm.watching", ng-class="{'blocked': duty.is_blocked}") .watching-empty(ng-if="vm.watching != undefined && vm.watching.size === 0") p(translate="HOME.EMPTY_WATCHING") diff --git a/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.coffee b/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.coffee index d90d3f36..5d6cc400 100644 --- a/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.coffee +++ b/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.spec.coffee b/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.spec.coffee index 263b7f58..56bf5b94 100644 --- a/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.spec.coffee +++ b/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.jade b/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.jade index 234a4ba2..13b7097a 100644 --- a/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.jade +++ b/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.jade @@ -9,8 +9,8 @@ div.navbar-dropdown.dropdown-project-list a.see-more-projects-btn.button-gray( href="#", tg-nav="projects", - title="{{'PROJECT.NAVIGATION.SEE_MORE_PROJECTS' | translate}}", - translate="PROJECT.NAVIGATION.SEE_MORE_PROJECTS") + title="{{'PROJECT.NAVIGATION.MANAGE_PROJECTS' | translate}}", + translate="PROJECT.NAVIGATION.MANAGE_PROJECTS") div.create-options a.create-project-btn.button-green( diff --git a/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.coffee b/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.coffee index 3c6f9385..aeac042e 100644 --- a/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.coffee +++ b/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.spec.coffee b/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.spec.coffee index 62ce337f..d85e69fd 100644 --- a/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.spec.coffee +++ b/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/navigation-bar/navigation-bar.directive.coffee b/app/modules/navigation-bar/navigation-bar.directive.coffee index 8404cc91..67d4589d 100644 --- a/app/modules/navigation-bar/navigation-bar.directive.coffee +++ b/app/modules/navigation-bar/navigation-bar.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/navigation-bar/navigation-bar.directive.spec.coffee b/app/modules/navigation-bar/navigation-bar.directive.spec.coffee index 9195b70a..7c3251bc 100644 --- a/app/modules/navigation-bar/navigation-bar.directive.spec.coffee +++ b/app/modules/navigation-bar/navigation-bar.directive.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/navigation-bar/navigation-bar.jade b/app/modules/navigation-bar/navigation-bar.jade index f8202abf..54aa167e 100644 --- a/app/modules/navigation-bar/navigation-bar.jade +++ b/app/modules/navigation-bar/navigation-bar.jade @@ -7,17 +7,24 @@ nav.navbar(ng-if="vm.isEnabledHeader") include ../../svg/logo.svg - //a( - // href="#", - // title="{{'PROJECT.NAVIGATION.DISCOVER_TITLE' | translate}}", - // translate="PROJECT.NAVIGATION.DISCOVER") - a( href="https://taiga.io/support/", target="_blank", title="{{'PROJECT.NAVIGATION.HELP_TITLE' | translate}}", translate="PROJECT.NAVIGATION.HELP") + div.nav-right(ng-if="!vm.isAuthenticated") + a.login( + tg-nav="login", + href="#", + title="{{ 'LOGIN_COMMON.ACTION_SIGN_IN' | translate }}" + ) {{ 'LOGIN_COMMON.ACTION_SIGN_IN' | translate }} + a.register( + tg-nav="register", + href="#", + title="{{ 'REGISTER_FORM.ACTION_SIGN_UP' | translate }}" + ) {{ 'REGISTER_FORM.ACTION_SIGN_UP' | translate }} + div.nav-right(ng-if="vm.isAuthenticated") a(tg-nav="home", ng-class="{active: vm.active}", diff --git a/app/modules/navigation-bar/navigation-bar.module.coffee b/app/modules/navigation-bar/navigation-bar.module.coffee index b1acfa2d..94481f23 100644 --- a/app/modules/navigation-bar/navigation-bar.module.coffee +++ b/app/modules/navigation-bar/navigation-bar.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/navigation-bar/navigation-bar.scss b/app/modules/navigation-bar/navigation-bar.scss index 920a1eea..469ecb8d 100644 --- a/app/modules/navigation-bar/navigation-bar.scss +++ b/app/modules/navigation-bar/navigation-bar.scss @@ -5,7 +5,7 @@ $dropdown-width: 350px; height: $navbar; justify-content: space-between; position: relative; - &:after { + &::after { background-size: 200%; bottom: 0; content: ''; diff --git a/app/modules/navigation-bar/navigation-bar.service.coffee b/app/modules/navigation-bar/navigation-bar.service.coffee index dafdfaa0..c043fa4f 100644 --- a/app/modules/navigation-bar/navigation-bar.service.coffee +++ b/app/modules/navigation-bar/navigation-bar.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-bar/profile-bar.controller.coffee b/app/modules/profile/profile-bar/profile-bar.controller.coffee index 3c59817e..f317b71f 100644 --- a/app/modules/profile/profile-bar/profile-bar.controller.coffee +++ b/app/modules/profile/profile-bar/profile-bar.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-bar/profile-bar.controller.spec.coffee b/app/modules/profile/profile-bar/profile-bar.controller.spec.coffee index ca0c33c1..66c83ac5 100644 --- a/app/modules/profile/profile-bar/profile-bar.controller.spec.coffee +++ b/app/modules/profile/profile-bar/profile-bar.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-bar/profile-bar.directive.coffee b/app/modules/profile/profile-bar/profile-bar.directive.coffee index cc3ff48c..8e9a2a51 100644 --- a/app/modules/profile/profile-bar/profile-bar.directive.coffee +++ b/app/modules/profile/profile-bar/profile-bar.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-contacts/profile-contacts.controller.coffee b/app/modules/profile/profile-contacts/profile-contacts.controller.coffee index f675e5f7..81fa0e45 100644 --- a/app/modules/profile/profile-contacts/profile-contacts.controller.coffee +++ b/app/modules/profile/profile-contacts/profile-contacts.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-contacts/profile-contacts.controller.spec.coffee b/app/modules/profile/profile-contacts/profile-contacts.controller.spec.coffee index 0c060e78..2c265083 100644 --- a/app/modules/profile/profile-contacts/profile-contacts.controller.spec.coffee +++ b/app/modules/profile/profile-contacts/profile-contacts.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-contacts/profile-contacts.directive.coffee b/app/modules/profile/profile-contacts/profile-contacts.directive.coffee index 252a9e75..3fca94c3 100644 --- a/app/modules/profile/profile-contacts/profile-contacts.directive.coffee +++ b/app/modules/profile/profile-contacts/profile-contacts.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-contacts/profile-contacts.jade b/app/modules/profile/profile-contacts/profile-contacts.jade index 49a79f62..08ffe638 100644 --- a/app/modules/profile/profile-contacts/profile-contacts.jade +++ b/app/modules/profile/profile-contacts/profile-contacts.jade @@ -1,7 +1,7 @@ section.profile-contacts div(ng-if="vm.contacts === undefined") div.spin - img(src="/svg/spinner-circle.svg", alt="Loading...") + img(src="/#{v}/svg/spinner-circle.svg", alt="Loading...") div.empty-tab(ng-if="vm.contacts && !vm.contacts.size") include ../../../svg/hide.svg diff --git a/app/modules/profile/profile-favs/items/items.directive.coffee b/app/modules/profile/profile-favs/items/items.directive.coffee index 626ab237..8d1a437a 100644 --- a/app/modules/profile/profile-favs/items/items.directive.coffee +++ b/app/modules/profile/profile-favs/items/items.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-favs/items/ticket.jade b/app/modules/profile/profile-favs/items/ticket.jade index f8051bc4..a55ec8d0 100644 --- a/app/modules/profile/profile-favs/items/ticket.jade +++ b/app/modules/profile/profile-favs/items/ticket.jade @@ -16,7 +16,7 @@ div.list-itemtype-ticket title="{{ 'COMMON.ASSIGNED_TO.NOT_ASSIGNED'|translate }}" ) img( - src="/images/unnamed.png", + src="/#{v}/images/unnamed.png", alt="{{ 'COMMON.ASSIGNED_TO.NOT_ASSIGNED'|translate }}" ) diff --git a/app/modules/profile/profile-favs/profile-favs.controller.coffee b/app/modules/profile/profile-favs/profile-favs.controller.coffee index 2fe034f2..2022ee4a 100644 --- a/app/modules/profile/profile-favs/profile-favs.controller.coffee +++ b/app/modules/profile/profile-favs/profile-favs.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-favs/profile-favs.controller.spec.coffee b/app/modules/profile/profile-favs/profile-favs.controller.spec.coffee index 70ac3409..89ccd289 100644 --- a/app/modules/profile/profile-favs/profile-favs.controller.spec.coffee +++ b/app/modules/profile/profile-favs/profile-favs.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-favs/profile-favs.directive.coffee b/app/modules/profile/profile-favs/profile-favs.directive.coffee index a7e07e45..267236a0 100644 --- a/app/modules/profile/profile-favs/profile-favs.directive.coffee +++ b/app/modules/profile/profile-favs/profile-favs.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-favs/profile-favs.jade b/app/modules/profile/profile-favs/profile-favs.jade index 94e09e4c..3b1ece60 100644 --- a/app/modules/profile/profile-favs/profile-favs.jade +++ b/app/modules/profile/profile-favs/profile-favs.jade @@ -67,13 +67,13 @@ section.profile-favs div(ng-if="vm.isLoading") div.spin img( - src="/svg/spinner-circle.svg" + src="/#{v}/svg/spinner-circle.svg" alt="{{ 'COMMON.LOADING'|translate }}" ) .empty-search-results(ng-if="vm.hasNoResults && !vm.isLoading") img( - src="../../images/search-empty.png" + src="/#{v}/images/search-empty.png" alt="{{ 'USER.PROFILE_FAVS.EMPTY_TITLE' | translate }}" ) p.title {{ 'USER.PROFILE_FAVS.EMPTY_TITLE' | translate }} diff --git a/app/modules/profile/profile-hints/profile-hints.controller.coffee b/app/modules/profile/profile-hints/profile-hints.controller.coffee index 95261959..69992e28 100644 --- a/app/modules/profile/profile-hints/profile-hints.controller.coffee +++ b/app/modules/profile/profile-hints/profile-hints.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-hints/profile-hints.controller.spec.coffee b/app/modules/profile/profile-hints/profile-hints.controller.spec.coffee index bc192e7d..c91eea4d 100644 --- a/app/modules/profile/profile-hints/profile-hints.controller.spec.coffee +++ b/app/modules/profile/profile-hints/profile-hints.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-hints/profile-hints.directive.coffee b/app/modules/profile/profile-hints/profile-hints.directive.coffee index 5b1f77ec..4383b501 100644 --- a/app/modules/profile/profile-hints/profile-hints.directive.coffee +++ b/app/modules/profile/profile-hints/profile-hints.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-projects/profile-projects.controller.coffee b/app/modules/profile/profile-projects/profile-projects.controller.coffee index 26f2caa4..bd43164d 100644 --- a/app/modules/profile/profile-projects/profile-projects.controller.coffee +++ b/app/modules/profile/profile-projects/profile-projects.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-projects/profile-projects.controller.spec.coffee b/app/modules/profile/profile-projects/profile-projects.controller.spec.coffee index 9f8f0ee3..604c67b9 100644 --- a/app/modules/profile/profile-projects/profile-projects.controller.spec.coffee +++ b/app/modules/profile/profile-projects/profile-projects.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-projects/profile-projects.directive.coffee b/app/modules/profile/profile-projects/profile-projects.directive.coffee index 848d655a..2236e563 100644 --- a/app/modules/profile/profile-projects/profile-projects.directive.coffee +++ b/app/modules/profile/profile-projects/profile-projects.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-projects/profile-projects.jade b/app/modules/profile/profile-projects/profile-projects.jade index c9d10a0f..3d4e8b2c 100644 --- a/app/modules/profile/profile-projects/profile-projects.jade +++ b/app/modules/profile/profile-projects/profile-projects.jade @@ -1,7 +1,7 @@ section.profile-projects div(ng-if="vm.projects === undefined") div.spin - img(src="/svg/spinner-circle.svg", alt="Loading...") + img(src="/#{v}/svg/spinner-circle.svg", alt="Loading...") .empty-tab(ng-if="vm.projects && !vm.projects.size") include ../../../svg/hide.svg diff --git a/app/modules/profile/profile-tab/profile-tab.directive.coffee b/app/modules/profile/profile-tab/profile-tab.directive.coffee index 070613d1..308a97ba 100644 --- a/app/modules/profile/profile-tab/profile-tab.directive.coffee +++ b/app/modules/profile/profile-tab/profile-tab.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-tabs/profile-tabs.controller.coffee b/app/modules/profile/profile-tabs/profile-tabs.controller.coffee index 1908f035..3c32a897 100644 --- a/app/modules/profile/profile-tabs/profile-tabs.controller.coffee +++ b/app/modules/profile/profile-tabs/profile-tabs.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-tabs/profile-tabs.controller.spec.coffee b/app/modules/profile/profile-tabs/profile-tabs.controller.spec.coffee index ff241a4a..f8b1382f 100644 --- a/app/modules/profile/profile-tabs/profile-tabs.controller.spec.coffee +++ b/app/modules/profile/profile-tabs/profile-tabs.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile-tabs/profile-tabs.directive.coffee b/app/modules/profile/profile-tabs/profile-tabs.directive.coffee index 6fe64f37..2ccc23d5 100644 --- a/app/modules/profile/profile-tabs/profile-tabs.directive.coffee +++ b/app/modules/profile/profile-tabs/profile-tabs.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile.controller.coffee b/app/modules/profile/profile.controller.coffee index b27049f6..d275db72 100644 --- a/app/modules/profile/profile.controller.coffee +++ b/app/modules/profile/profile.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile.controller.spec.coffee b/app/modules/profile/profile.controller.spec.coffee index b75bac6a..df37298b 100644 --- a/app/modules/profile/profile.controller.spec.coffee +++ b/app/modules/profile/profile.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/profile.module.coffee b/app/modules/profile/profile.module.coffee index a37ea14d..4654dbc1 100644 --- a/app/modules/profile/profile.module.coffee +++ b/app/modules/profile/profile.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/profile/styles/profile-bar.scss b/app/modules/profile/styles/profile-bar.scss index 6cb27072..265fafe9 100644 --- a/app/modules/profile/styles/profile-bar.scss +++ b/app/modules/profile/styles/profile-bar.scss @@ -149,7 +149,7 @@ .profile-quote { @extend %light; @extend %large; - background: url('/images/quote.png') no-repeat top left; + background: url('../images/quote.png') no-repeat top left; line-height: 1.4; padding: .5rem; } diff --git a/app/modules/projects/components/like-project-button/like-project-button.controller.coffee b/app/modules/projects/components/like-project-button/like-project-button.controller.coffee index e40bbd48..0322e17d 100644 --- a/app/modules/projects/components/like-project-button/like-project-button.controller.coffee +++ b/app/modules/projects/components/like-project-button/like-project-button.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/projects/components/like-project-button/like-project-button.controller.spec.coffee b/app/modules/projects/components/like-project-button/like-project-button.controller.spec.coffee index b611a767..4669fd9b 100644 --- a/app/modules/projects/components/like-project-button/like-project-button.controller.spec.coffee +++ b/app/modules/projects/components/like-project-button/like-project-button.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/projects/components/like-project-button/like-project-button.directive.coffee b/app/modules/projects/components/like-project-button/like-project-button.directive.coffee index 205d6f26..7b9c1d60 100644 --- a/app/modules/projects/components/like-project-button/like-project-button.directive.coffee +++ b/app/modules/projects/components/like-project-button/like-project-button.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/projects/components/like-project-button/like-project-button.service.coffee b/app/modules/projects/components/like-project-button/like-project-button.service.coffee index a2747231..d8e5a7fa 100644 --- a/app/modules/projects/components/like-project-button/like-project-button.service.coffee +++ b/app/modules/projects/components/like-project-button/like-project-button.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/projects/components/like-project-button/like-project-button.service.spec.coffee b/app/modules/projects/components/like-project-button/like-project-button.service.spec.coffee index 2c07b487..cfb3285b 100644 --- a/app/modules/projects/components/like-project-button/like-project-button.service.spec.coffee +++ b/app/modules/projects/components/like-project-button/like-project-button.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/projects/components/sort-projects.directive.coffee b/app/modules/projects/components/sort-projects.directive.coffee index 2c4cd753..cb3cdfbd 100644 --- a/app/modules/projects/components/sort-projects.directive.coffee +++ b/app/modules/projects/components/sort-projects.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/projects/components/watch-project-button/watch-project-button.controller.coffee b/app/modules/projects/components/watch-project-button/watch-project-button.controller.coffee index d4c5ce85..e24316a4 100644 --- a/app/modules/projects/components/watch-project-button/watch-project-button.controller.coffee +++ b/app/modules/projects/components/watch-project-button/watch-project-button.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/projects/components/watch-project-button/watch-project-button.controller.spec.coffee b/app/modules/projects/components/watch-project-button/watch-project-button.controller.spec.coffee index cbbceab2..c58e4d0e 100644 --- a/app/modules/projects/components/watch-project-button/watch-project-button.controller.spec.coffee +++ b/app/modules/projects/components/watch-project-button/watch-project-button.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/projects/components/watch-project-button/watch-project-button.directive.coffee b/app/modules/projects/components/watch-project-button/watch-project-button.directive.coffee index 479e6bf4..048554cb 100644 --- a/app/modules/projects/components/watch-project-button/watch-project-button.directive.coffee +++ b/app/modules/projects/components/watch-project-button/watch-project-button.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/projects/components/watch-project-button/watch-project-button.service.coffee b/app/modules/projects/components/watch-project-button/watch-project-button.service.coffee index ac50e13f..52f4ec22 100644 --- a/app/modules/projects/components/watch-project-button/watch-project-button.service.coffee +++ b/app/modules/projects/components/watch-project-button/watch-project-button.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/projects/components/watch-project-button/watch-project-button.service.spec.coffee b/app/modules/projects/components/watch-project-button/watch-project-button.service.spec.coffee index 86c5a065..a782887d 100644 --- a/app/modules/projects/components/watch-project-button/watch-project-button.service.spec.coffee +++ b/app/modules/projects/components/watch-project-button/watch-project-button.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/projects/listing/projects-listing.controller.coffee b/app/modules/projects/listing/projects-listing.controller.coffee index 3f8fb291..d7a60304 100644 --- a/app/modules/projects/listing/projects-listing.controller.coffee +++ b/app/modules/projects/listing/projects-listing.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/projects/listing/projects-listing.controller.spec.coffee b/app/modules/projects/listing/projects-listing.controller.spec.coffee index 49fbd9eb..fe3d2b2b 100644 --- a/app/modules/projects/listing/projects-listing.controller.spec.coffee +++ b/app/modules/projects/listing/projects-listing.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/projects/project/project.controller.coffee b/app/modules/projects/project/project.controller.coffee index 0582d5f3..418afda7 100644 --- a/app/modules/projects/project/project.controller.coffee +++ b/app/modules/projects/project/project.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -36,9 +36,9 @@ class ProjectController @appMetaService.setfn @._setMeta.bind(this) _setMeta: (project)-> - metas = {} + return null if !@.project - return metas if !@.project + metas = {} ctx = {projectName: @.project.get("name")} diff --git a/app/modules/projects/project/project.controller.spec.coffee b/app/modules/projects/project/project.controller.spec.coffee index c215916a..dfcf812b 100644 --- a/app/modules/projects/project/project.controller.spec.coffee +++ b/app/modules/projects/project/project.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/projects/project/project.jade b/app/modules/projects/project/project.jade index 9f48bf12..8977c920 100644 --- a/app/modules/projects/project/project.jade +++ b/app/modules/projects/project/project.jade @@ -1,6 +1,6 @@ div.wrapper tg-project-menu - div.centered.single-project + div.single-project.centered section.single-project-intro div.intro-options h1 diff --git a/app/modules/projects/projects.module.coffee b/app/modules/projects/projects.module.coffee index 1197dad8..ab40dd05 100644 --- a/app/modules/projects/projects.module.coffee +++ b/app/modules/projects/projects.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/projects/projects.service.coffee b/app/modules/projects/projects.service.coffee index 5ad7c827..a7c2ab65 100644 --- a/app/modules/projects/projects.service.coffee +++ b/app/modules/projects/projects.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/projects/projects.service.spec.coffee b/app/modules/projects/projects.service.spec.coffee index 8e686d68..046d1d23 100644 --- a/app/modules/projects/projects.service.spec.coffee +++ b/app/modules/projects/projects.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/resources/external-apps-resource.service.coffee b/app/modules/resources/external-apps-resource.service.coffee index 4c6f7430..7dd02d27 100644 --- a/app/modules/resources/external-apps-resource.service.coffee +++ b/app/modules/resources/external-apps-resource.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/resources/issues-resource.service.coffee b/app/modules/resources/issues-resource.service.coffee index 7d4e6a26..2af88e73 100644 --- a/app/modules/resources/issues-resource.service.coffee +++ b/app/modules/resources/issues-resource.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/resources/projects-resource.service.coffee b/app/modules/resources/projects-resource.service.coffee index 3d7ae7a6..35de7d51 100644 --- a/app/modules/resources/projects-resource.service.coffee +++ b/app/modules/resources/projects-resource.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/resources/resources.coffee b/app/modules/resources/resources.coffee index b2a0051b..5669d85e 100644 --- a/app/modules/resources/resources.coffee +++ b/app/modules/resources/resources.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/resources/resources.module.coffee b/app/modules/resources/resources.module.coffee index bafccdd5..de2f52b5 100644 --- a/app/modules/resources/resources.module.coffee +++ b/app/modules/resources/resources.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/resources/tasks-resource.service.coffee b/app/modules/resources/tasks-resource.service.coffee index c1cb225d..1d056635 100644 --- a/app/modules/resources/tasks-resource.service.coffee +++ b/app/modules/resources/tasks-resource.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/resources/user-resource.service.coffee b/app/modules/resources/user-resource.service.coffee index 063ba18d..3967c6d6 100644 --- a/app/modules/resources/user-resource.service.coffee +++ b/app/modules/resources/user-resource.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/resources/users-resource.service.coffee b/app/modules/resources/users-resource.service.coffee index 09818777..1183fb09 100644 --- a/app/modules/resources/users-resource.service.coffee +++ b/app/modules/resources/users-resource.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/resources/userstories-resource.service.coffee b/app/modules/resources/userstories-resource.service.coffee index 22f68cae..ce2b7cd4 100644 --- a/app/modules/resources/userstories-resource.service.coffee +++ b/app/modules/resources/userstories-resource.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/services/app-meta.service.coffee b/app/modules/services/app-meta.service.coffee index 7c5ae20e..d0a4febf 100644 --- a/app/modules/services/app-meta.service.coffee +++ b/app/modules/services/app-meta.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -68,14 +68,14 @@ class AppMetaService @._set("twitter:site", "@taigaio") @._set("twitter:title", title) @._set("twitter:description", truncate(description, 300)) - @._set("twitter:image", "#{window.location.origin}/images/logo-color.png") + @._set("twitter:image", "#{window.location.origin}/#{window._version}/images/logo-color.png") setOpenGraphMetas: (title, description) -> @._set("og:type", "object") @._set("og:site_name", "Taiga - Love your projects") @._set("og:title", title) @._set("og:description", truncate(description, 300)) - @._set("og:image", "#{window.location.origin}/images/logo-color.png") + @._set("og:image", "#{window.location.origin}/#{window._version}/images/logo-color.png") @._set("og:url", window.location.href) setAll: (title, description) -> @@ -97,7 +97,8 @@ class AppMetaService @._listener() if @.listener @._listener = @rootScope.$watchCollection fn, (metas) => - @.setAll(metas.title, metas.description) - + if metas + @.setAll(metas.title, metas.description) + @._listener() angular.module("taigaCommon").service("tgAppMetaService", AppMetaService) diff --git a/app/modules/services/app-meta.service.spec.coffee b/app/modules/services/app-meta.service.spec.coffee index a8ae97ea..e1272dab 100644 --- a/app/modules/services/app-meta.service.spec.coffee +++ b/app/modules/services/app-meta.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -30,6 +30,9 @@ describe "AppMetaService", -> appMetaService = _tgAppMetaService_ $rootScope = _$rootScope_ + before -> + window._version = 1 + beforeEach -> module "taigaCommon" _inject() @@ -48,7 +51,7 @@ describe "AppMetaService", -> expect($("meta[name='twitter:site']")).to.have.attr("content", "@taigaio") expect($("meta[name='twitter:title']")).to.have.attr("content", data.title) expect($("meta[name='twitter:description']")).to.have.attr("content", data.description) - expect($("meta[name='twitter:image']")).to.have.attr("content", "#{window.location.origin}/images/logo-color.png") + expect($("meta[name='twitter:image']")).to.have.attr("content", "#{window.location.origin}/#{window._version}/images/logo-color.png") it "set meta for open graph", () -> appMetaService.setOpenGraphMetas(data.title, data.description) @@ -56,7 +59,7 @@ describe "AppMetaService", -> expect($("meta[property='og:site_name']")).to.have.attr("content", "Taiga - Love your projects") expect($("meta[property='og:title']")).to.have.attr("content", data.title) expect($("meta[property='og:description']")).to.have.attr("content", data.description) - expect($("meta[property='og:image']")).to.have.attr("content", "#{window.location.origin}/images/logo-color.png") + expect($("meta[property='og:image']")).to.have.attr("content", "#{window.location.origin}/#{window._version}/images/logo-color.png") expect($("meta[property='og:url']")).to.have.attr("content", window.location.href) it "set all meta", () -> @@ -67,12 +70,12 @@ describe "AppMetaService", -> expect($("meta[name='twitter:site']")).to.have.attr("content", "@taigaio") expect($("meta[name='twitter:title']")).to.have.attr("content", data.title) expect($("meta[name='twitter:description']")).to.have.attr("content", data.description) - expect($("meta[name='twitter:image']")).to.have.attr("content", "#{window.location.origin}/images/logo-color.png") + expect($("meta[name='twitter:image']")).to.have.attr("content", "#{window.location.origin}/#{window._version}/images/logo-color.png") expect($("meta[property='og:type']")).to.have.attr("content", "object") expect($("meta[property='og:site_name']")).to.have.attr("content", "Taiga - Love your projects") expect($("meta[property='og:title']")).to.have.attr("content", data.title) expect($("meta[property='og:description']")).to.have.attr("content", data.description) - expect($("meta[property='og:image']")).to.have.attr("content", "#{window.location.origin}/images/logo-color.png") + expect($("meta[property='og:image']")).to.have.attr("content", "#{window.location.origin}/#{window._version}/images/logo-color.png") expect($("meta[property='og:url']")).to.have.attr("content", window.location.href) it "set function to set the metas", () -> diff --git a/app/modules/services/check-permissions.service.coffee b/app/modules/services/check-permissions.service.coffee index c96fd0cc..5cac0802 100644 --- a/app/modules/services/check-permissions.service.coffee +++ b/app/modules/services/check-permissions.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/services/check-permissions.service.spec.coffee b/app/modules/services/check-permissions.service.spec.coffee index 160e8e8c..48f727b6 100644 --- a/app/modules/services/check-permissions.service.spec.coffee +++ b/app/modules/services/check-permissions.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/services/current-user.service.coffee b/app/modules/services/current-user.service.coffee index dbd2ee90..568c53f3 100644 --- a/app/modules/services/current-user.service.coffee +++ b/app/modules/services/current-user.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/services/current-user.service.spec.coffee b/app/modules/services/current-user.service.spec.coffee index 8ebf1b9b..a3fe43b7 100644 --- a/app/modules/services/current-user.service.spec.coffee +++ b/app/modules/services/current-user.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/services/lightbox-factory.service.coffee b/app/modules/services/lightbox-factory.service.coffee index f71b4ff3..33b92464 100644 --- a/app/modules/services/lightbox-factory.service.coffee +++ b/app/modules/services/lightbox-factory.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/services/lightbox-factory.service.spec.coffee b/app/modules/services/lightbox-factory.service.spec.coffee index 8762f390..96628e51 100644 --- a/app/modules/services/lightbox-factory.service.spec.coffee +++ b/app/modules/services/lightbox-factory.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/services/paginate-response.service.coffee b/app/modules/services/paginate-response.service.coffee index c27fc738..dce8b495 100644 --- a/app/modules/services/paginate-response.service.coffee +++ b/app/modules/services/paginate-response.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/services/paginate-response.service.spec.coffee b/app/modules/services/paginate-response.service.spec.coffee index a4d89fcd..e69e6906 100644 --- a/app/modules/services/paginate-response.service.spec.coffee +++ b/app/modules/services/paginate-response.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/services/project.service.coffee b/app/modules/services/project.service.coffee index 3294db67..1f576dc5 100644 --- a/app/modules/services/project.service.coffee +++ b/app/modules/services/project.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/services/project.service.spec.coffee b/app/modules/services/project.service.spec.coffee index 715f8032..18f91fa7 100644 --- a/app/modules/services/project.service.spec.coffee +++ b/app/modules/services/project.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/services/scope-event.service.coffee b/app/modules/services/scope-event.service.coffee index f49e9f5d..a3ba71ff 100644 --- a/app/modules/services/scope-event.service.coffee +++ b/app/modules/services/scope-event.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/services/scope-event.service.spec.coffee b/app/modules/services/scope-event.service.spec.coffee index 338fdd27..aced4eb3 100644 --- a/app/modules/services/scope-event.service.spec.coffee +++ b/app/modules/services/scope-event.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/services/theme.service.coffee b/app/modules/services/theme.service.coffee index 205a396d..d3b096e5 100644 --- a/app/modules/services/theme.service.coffee +++ b/app/modules/services/theme.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -22,13 +22,13 @@ taiga = @.taiga class ThemeService extends taiga.Service = -> use: (themeName) -> - stylesheetEl = $("link[rel='stylesheet']") + stylesheetEl = $("link[rel='stylesheet']:first") if stylesheetEl.length == 0 stylesheetEl = $("") $("head").append(stylesheetEl) - stylesheetEl.attr("href", "/styles/theme-#{themeName}.css") + stylesheetEl.attr("href", "/#{window._version}/styles/theme-#{themeName}.css") angular.module("taigaCommon").service("tgThemeService", ThemeService) diff --git a/app/modules/services/theme.service.spec.coffee b/app/modules/services/theme.service.spec.coffee index f2529504..4a7c3450 100644 --- a/app/modules/services/theme.service.spec.coffee +++ b/app/modules/services/theme.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -32,5 +32,6 @@ describe "ThemeService", -> _inject() it "use a test theme", () -> + window._version = '123' themeService.use(data.theme) - expect($("link[rel='stylesheet']")).to.have.attr("href", "/styles/theme-#{data.theme}.css") + expect($("link[rel='stylesheet']")).to.have.attr("href", "/123/styles/theme-#{data.theme}.css") diff --git a/app/modules/services/user.service.coffee b/app/modules/services/user.service.coffee index d9bdfbb4..b986c1f4 100644 --- a/app/modules/services/user.service.coffee +++ b/app/modules/services/user.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/services/user.service.spec.coffee b/app/modules/services/user.service.spec.coffee index 04629504..f721d19b 100644 --- a/app/modules/services/user.service.spec.coffee +++ b/app/modules/services/user.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/services/xhrError.service.coffee b/app/modules/services/xhrError.service.coffee index 86bbd3b7..9015e858 100644 --- a/app/modules/services/xhrError.service.coffee +++ b/app/modules/services/xhrError.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/services/xhrError.service.spec.coffee b/app/modules/services/xhrError.service.spec.coffee index af393641..f69ef84a 100644 --- a/app/modules/services/xhrError.service.spec.coffee +++ b/app/modules/services/xhrError.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/user-timeline/user-timeline-attachment/user-timeline-attachment.directive.coffee b/app/modules/user-timeline/user-timeline-attachment/user-timeline-attachment.directive.coffee index ad26327a..ced341ac 100644 --- a/app/modules/user-timeline/user-timeline-attachment/user-timeline-attachment.directive.coffee +++ b/app/modules/user-timeline/user-timeline-attachment/user-timeline-attachment.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/user-timeline/user-timeline-attachment/user-timeline-attachment.directive.spec.coffee b/app/modules/user-timeline/user-timeline-attachment/user-timeline-attachment.directive.spec.coffee index 31d6171e..e9c1d39b 100644 --- a/app/modules/user-timeline/user-timeline-attachment/user-timeline-attachment.directive.spec.coffee +++ b/app/modules/user-timeline/user-timeline-attachment/user-timeline-attachment.directive.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/user-timeline/user-timeline-item/user-timeline-item-title.service.coffee b/app/modules/user-timeline/user-timeline-item/user-timeline-item-title.service.coffee index 772d05e3..406b57eb 100644 --- a/app/modules/user-timeline/user-timeline-item/user-timeline-item-title.service.coffee +++ b/app/modules/user-timeline/user-timeline-item/user-timeline-item-title.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/user-timeline/user-timeline-item/user-timeline-item-title.service.spec.coffee b/app/modules/user-timeline/user-timeline-item/user-timeline-item-title.service.spec.coffee index 5855c0fc..64f306f4 100644 --- a/app/modules/user-timeline/user-timeline-item/user-timeline-item-title.service.spec.coffee +++ b/app/modules/user-timeline/user-timeline-item/user-timeline-item-title.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/user-timeline/user-timeline-item/user-timeline-item-type.service.coffee b/app/modules/user-timeline/user-timeline-item/user-timeline-item-type.service.coffee index 68b330cb..e5c36811 100644 --- a/app/modules/user-timeline/user-timeline-item/user-timeline-item-type.service.coffee +++ b/app/modules/user-timeline/user-timeline-item/user-timeline-item-type.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/user-timeline/user-timeline-item/user-timeline-item-type.service.spec.coffee b/app/modules/user-timeline/user-timeline-item/user-timeline-item-type.service.spec.coffee index 7ed49f79..9ac0339e 100644 --- a/app/modules/user-timeline/user-timeline-item/user-timeline-item-type.service.spec.coffee +++ b/app/modules/user-timeline/user-timeline-item/user-timeline-item-type.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/user-timeline/user-timeline-item/user-timeline-item.directive.coffee b/app/modules/user-timeline/user-timeline-item/user-timeline-item.directive.coffee index d0a18e2c..9fff02c3 100644 --- a/app/modules/user-timeline/user-timeline-item/user-timeline-item.directive.coffee +++ b/app/modules/user-timeline/user-timeline-item/user-timeline-item.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/user-timeline/user-timeline-item/user-timeline-item.jade b/app/modules/user-timeline/user-timeline-item/user-timeline-item.jade index e37c1dca..38a492ee 100644 --- a/app/modules/user-timeline/user-timeline-item/user-timeline-item.jade +++ b/app/modules/user-timeline/user-timeline-item/user-timeline-item.jade @@ -7,10 +7,10 @@ div.activity-item // profile image with url div.profile-contact-picture(ng-if="timeline.getIn(['data', 'user', 'is_profile_visible'])") a(tg-nav="user-profile:username=timeline.getIn(['data', 'user', 'username'])", title="{{::timeline.getIn(['data', 'user', 'name']) }}") - img(ng-src="{{::timeline.getIn(['data', 'user', 'photo']) || '/images/user-noimage.png'}}", alt="{{::timeline.getIn(['data', 'user', 'name'])}}") + img(ng-src="{{::timeline.getIn(['data', 'user', 'photo']) || '/#{v}/images/user-noimage.png'}}", alt="{{::timeline.getIn(['data', 'user', 'name'])}}") // profile image without url div.profile-contact-picture(ng-if="!timeline.getIn(['data', 'user', 'is_profile_visible'])") - img(ng-src="{{::timeline.getIn(['data', 'user', 'photo']) || '/images/user-noimage.png'}}", alt="{{::timeline.getIn(['data', 'user', 'name'])}}") + img(ng-src="{{::timeline.getIn(['data', 'user', 'photo']) || '/#{v}/images/user-noimage.png'}}", alt="{{::timeline.getIn(['data', 'user', 'name'])}}") p(tg-compile-html="timeline.get('title_html')") diff --git a/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.coffee b/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.coffee index 5a6b314b..616caf7e 100644 --- a/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.coffee +++ b/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.spec.coffee b/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.spec.coffee index f1cf0207..3ee1bf8d 100644 --- a/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.spec.coffee +++ b/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/user-timeline/user-timeline.module.coffee b/app/modules/user-timeline/user-timeline.module.coffee index c5eef5c7..3bdab1fe 100644 --- a/app/modules/user-timeline/user-timeline.module.coffee +++ b/app/modules/user-timeline/user-timeline.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/user-timeline/user-timeline/user-timeline.controller.coffee b/app/modules/user-timeline/user-timeline/user-timeline.controller.coffee index 5cb5c7e5..4641a76d 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.controller.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.controller.coffee @@ -1,7 +1,7 @@ ### -# Copyright (C) 2014-2015 Andrey Antukh -# Copyright (C) 2014-2015 Jesús Espino Garcia -# Copyright (C) 2014-2015 David Barragán Merino +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/user-timeline/user-timeline/user-timeline.controller.spec.coffee b/app/modules/user-timeline/user-timeline/user-timeline.controller.spec.coffee index 2f78a968..e66cf9b3 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.controller.spec.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/user-timeline/user-timeline/user-timeline.directive.coffee b/app/modules/user-timeline/user-timeline/user-timeline.directive.coffee index 8973e43f..fda9bb7b 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.directive.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/user-timeline/user-timeline/user-timeline.jade b/app/modules/user-timeline/user-timeline/user-timeline.jade index 3972492f..b227d860 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.jade +++ b/app/modules/user-timeline/user-timeline/user-timeline.jade @@ -1,7 +1,7 @@ section.profile-timeline div(ng-if="!vm.timelineList.size") div.spin - img(src="/svg/spinner-circle.svg", alt="Loading...") + img(src="/#{v}/svg/spinner-circle.svg", alt="Loading...") div(infinite-scroll="vm.loadTimeline()", infinite-scroll-disabled="vm.scrollDisabled") div(tg-repeat="timeline in vm.timelineList", tg-user-timeline-item="timeline") diff --git a/app/modules/user-timeline/user-timeline/user-timeline.service.coffee b/app/modules/user-timeline/user-timeline/user-timeline.service.coffee index 74d24ad1..42a72a06 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.service.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/user-timeline/user-timeline/user-timeline.service.spec.coffee b/app/modules/user-timeline/user-timeline/user-timeline.service.spec.coffee index 00000c1e..7e2b131d 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.service.spec.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/partials/admin/admin-project-export.jade b/app/partials/admin/admin-project-export.jade index eb68dc5e..04fd1af4 100644 --- a/app/partials/admin/admin-project-export.jade +++ b/app/partials/admin/admin-project-export.jade @@ -21,7 +21,7 @@ div.wrapper(ng-controller="ProjectProfileController as ctrl", div.admin-project-export-result.hidden div.spin.hidden - img(src="/svg/spinner-circle.svg", alt="{{ 'COMMON.LOADING' | translate }}") + img(src="/#{v}/svg/spinner-circle.svg", alt="{{ 'COMMON.LOADING' | translate }}") h3.result-title p.result-message diff --git a/app/partials/auth/change-password-from-recovery.jade b/app/partials/auth/change-password-from-recovery.jade index cb1cd82c..3f1da59f 100644 --- a/app/partials/auth/change-password-from-recovery.jade +++ b/app/partials/auth/change-password-from-recovery.jade @@ -4,7 +4,7 @@ div.wrapper div.auth div.auth-container div.logo-svg - include ../../svg/logo-moustache.svg + include ../../svg/logo-color.svg h1.logo Taiga include ../includes/modules/change-password-from-recovery-form diff --git a/app/partials/auth/forgot-password.jade b/app/partials/auth/forgot-password.jade index 34a16248..ceca6a3e 100644 --- a/app/partials/auth/forgot-password.jade +++ b/app/partials/auth/forgot-password.jade @@ -5,7 +5,7 @@ div.wrapper div.auth div.auth-container div.logo-svg - include ../../svg/logo-moustache.svg + include ../../svg/logo-color.svg h1.logo Taiga include ../includes/modules/forgot-form diff --git a/app/partials/auth/login.jade b/app/partials/auth/login.jade index 073ceed5..b5182527 100644 --- a/app/partials/auth/login.jade +++ b/app/partials/auth/login.jade @@ -7,7 +7,7 @@ div.wrapper div.auth div.auth-container div.logo-svg - include ../../svg/logo-moustache.svg + include ../../svg/logo-color.svg h1.logo Taiga h2.tagline(translate="COMMON.TAG_LINE_2") diff --git a/app/partials/auth/register.jade b/app/partials/auth/register.jade index 1bf2e176..9700012d 100644 --- a/app/partials/auth/register.jade +++ b/app/partials/auth/register.jade @@ -4,7 +4,7 @@ div.wrapper div.auth div.auth-container div.logo-svg - include ../../svg/logo-moustache.svg + include ../../svg/logo-color.svg h1.logo Taiga include ../includes/modules/register-form diff --git a/app/partials/backlog/backlog.jade b/app/partials/backlog/backlog.jade index 50bcb97f..b55788b4 100644 --- a/app/partials/backlog/backlog.jade +++ b/app/partials/backlog/backlog.jade @@ -55,7 +55,7 @@ div.wrapper(tg-backlog, ng-controller="BacklogController as ctrl", tg-backlog-empty-sortable ) img( - src="/images/backlog-empty.png" + src="/#{v}/images/backlog-empty.png" alt="{{'BACKLOG.EMPTY' | translate}}" ) p.title(translate="BACKLOG.EMPTY") diff --git a/app/partials/common/history/history-base.jade b/app/partials/common/history/history-base.jade index 4ca4a9af..0cb8289a 100644 --- a/app/partials/common/history/history-base.jade +++ b/app/partials/common/history/history-base.jade @@ -1,4 +1,4 @@ -section.history +section.history(tg-check-permission!="modify_<%- type %>") ul.history-tabs li a(href="#", class="active", data-section-class="history-comments") @@ -10,7 +10,7 @@ section.history span.tab-title(translate="ACTIVITY.TITLE") section.history-comments .comments-list - div(tg-check-permission!="modify_<%- type %>", tg-toggle-comment, class="add-comment") + div(tg-toggle-comment, class="add-comment") textarea(ng-attr-placeholder="{{'COMMENTS.TYPE_NEW_COMMENT' | translate}}", ng-model!="<%- ngmodel %>.comment", tg-markitup="tg-markitup") <% if (mode !== "edit") { %> a(class="help-markdown", href="https://taiga.io/support/taiga-markdown-syntax/", target="_blank", title="{{'COMMON.WYSIWYG.MARKDOWN_HELP' | translate}}") diff --git a/app/partials/contrib/main.jade b/app/partials/contrib/main.jade index e2b191b1..5ed1fd83 100644 --- a/app/partials/contrib/main.jade +++ b/app/partials/contrib/main.jade @@ -9,4 +9,4 @@ div.wrapper.roles(ng-init="section='admin'", ng-controller="ContribController as sidebar.menu-tertiary.sidebar include ../includes/modules/admin/admin-submenu-contrib - section.main.admin-common.admin-contrib(ng-include="pluginTemplate") + section.main.admin-common.admin-contrib(ng-include="currentPlugin.template") diff --git a/app/partials/error/error.jade b/app/partials/error/error.jade index 39629937..7e8fea99 100644 --- a/app/partials/error/error.jade +++ b/app/partials/error/error.jade @@ -2,8 +2,8 @@ doctype html div.error-main div.error-container - object.logo-svg(type="image/svg+xml", data="/svg/logo.svg") - img(src="/images/logo.png", alt="TAIGA") + object.logo-svg(type="image/svg+xml", data="/#{v}/svg/logo.svg") + img(src="/#{v}/images/logo.png", alt="TAIGA") h1.logo Taiga p.error-text(translate="ERROR.TEXT1") a(href="/", title="", translate="COMMON.GO_HOME") diff --git a/app/partials/error/not-found.jade b/app/partials/error/not-found.jade index 12172038..4470a474 100644 --- a/app/partials/error/not-found.jade +++ b/app/partials/error/not-found.jade @@ -2,8 +2,8 @@ doctype html div.error-main div.error-container - object.logo-svg(type="image/svg+xml", data="/svg/logo.svg") - img(src="/images/logo.png", alt="TAIGA") + object.logo-svg(type="image/svg+xml", data="/#{v}/svg/logo.svg") + img(src="/#{v}/images/logo.png", alt="TAIGA") h1.logo(translate="ERROR.NOT_FOUND") p.error-text(translate="ERROR.NOT_FOUND_TEXT") a(href="/", title="", translate="COMMON.GO_HOME") diff --git a/app/partials/error/permission-denied.jade b/app/partials/error/permission-denied.jade index 12869f63..fa1333fc 100644 --- a/app/partials/error/permission-denied.jade +++ b/app/partials/error/permission-denied.jade @@ -3,7 +3,7 @@ doctype html div.error-main div.error-container object.logo-svg(type="image/svg+xml", data="/svg/logo.svg") - img(src="/images/logo.png", alt="TAIGA") + img(src="/#{v}/images/logo.png", alt="TAIGA") h1.logo(translate="ERROR.PERMISSION_DENIED") p.error-text(translate="ERROR.PERMISSION_DENIED_TEXT") a(href="/", title="", translate="COMMON.GO_HOME") diff --git a/app/partials/includes/components/beta.jade b/app/partials/includes/components/beta.jade index a82f61ed..647d2108 100644 --- a/app/partials/includes/components/beta.jade +++ b/app/partials/includes/components/beta.jade @@ -1 +1 @@ -img.beta(src="/images/beta.png", title="{{'COMMON.BETA' | translate}}") +img.beta(src="/#{v}/images/beta.png", title="{{'COMMON.BETA' | translate}}") diff --git a/app/partials/includes/components/empty-search-results.jade b/app/partials/includes/components/empty-search-results.jade index be261c6c..f3248bd3 100644 --- a/app/partials/includes/components/empty-search-results.jade +++ b/app/partials/includes/components/empty-search-results.jade @@ -1,5 +1,5 @@ img( - src="../../images/search-empty.png" + src="/#{v}/images/search-empty.png" alt="{{ 'SEARCH.EMPTY_TITLE' | translate }}" ) p.title {{ 'SEARCH.EMPTY_TITLE' | translate }} diff --git a/app/partials/includes/modules/admin/admin-submenu-contrib.jade b/app/partials/includes/modules/admin/admin-submenu-contrib.jade index 6d072e95..3f5e903d 100644 --- a/app/partials/includes/modules/admin/admin-submenu-contrib.jade +++ b/app/partials/includes/modules/admin/admin-submenu-contrib.jade @@ -2,5 +2,9 @@ section.admin-submenu nav ul li#adminmenu-contrib(ng-repeat="plugin in adminPlugins") - a(href="", tg-nav="project-admin-contrib:project=projectSlug,plugin=plugin.slug" ng-class="{active: plugin.slug == currentPlugin.slug}") + a( + href="" + tg-nav="project-admin-contrib:project=projectSlug,plugin=plugin.slug" + ng-class="{active: plugin.slug == currentPlugin.slug}" + ) span.title {{ plugin.name }} diff --git a/app/partials/includes/modules/forgot-form.jade b/app/partials/includes/modules/forgot-form.jade index 6bd1e5cd..c218f382 100644 --- a/app/partials/includes/modules/forgot-form.jade +++ b/app/partials/includes/modules/forgot-form.jade @@ -8,6 +8,8 @@ div.forgot-form-container(tg-forgot-password) fieldset input( type="text" + autocorrect="off" + autocapitalize="none" name="username" ng-model="data.username" data-required="true" diff --git a/app/partials/includes/modules/invitation-login-form.jade b/app/partials/includes/modules/invitation-login-form.jade index 2d5e2a3f..816854c2 100644 --- a/app/partials/includes/modules/invitation-login-form.jade +++ b/app/partials/includes/modules/invitation-login-form.jade @@ -4,6 +4,8 @@ form.login-form fieldset input( type="text" + autocorrect="off" + autocapitalize="none" name="username" ng-model="dataLogin.username" data-required="true" diff --git a/app/partials/includes/modules/invitation-register-form.jade b/app/partials/includes/modules/invitation-register-form.jade index 911e62e0..b5921ffa 100644 --- a/app/partials/includes/modules/invitation-register-form.jade +++ b/app/partials/includes/modules/invitation-register-form.jade @@ -3,6 +3,8 @@ form.register-form fieldset input( type="text" + autocorrect="off" + autocapitalize="none" name="username" ng-model="dataRegister.username" data-required="true" @@ -23,7 +25,7 @@ form.register-form fieldset input( - type="text" + type="email" name="email" ng-model="dataRegister.email" data-required="true" diff --git a/app/partials/includes/modules/issues-table.jade b/app/partials/includes/modules/issues-table.jade index f696730d..ddf6ada0 100644 --- a/app/partials/includes/modules/issues-table.jade +++ b/app/partials/includes/modules/issues-table.jade @@ -53,7 +53,7 @@ section.issues-table.basic-table(ng-class="{empty: !issues.length}") section.empty-issues(ng-if="issues != undefined && issues.length == 0") img( - src="../../images/issues-empty.png", + src="/#{v}/images/issues-empty.png", alt="{{ISSUES.TABLE.EMPTY.TITLE | translate }}" ) p.title(translate="ISSUES.TABLE.EMPTY.TITLE") diff --git a/app/partials/includes/modules/lightbox-generic-loading.jade b/app/partials/includes/modules/lightbox-generic-loading.jade index 95d01cac..05c280d9 100644 --- a/app/partials/includes/modules/lightbox-generic-loading.jade +++ b/app/partials/includes/modules/lightbox-generic-loading.jade @@ -2,7 +2,7 @@ section div.spin.hidden - img(src="/svg/spinner-circle.svg", alt="{{'COMMON.LOADING' | translate}}") + img(src="/#{v}/svg/spinner-circle.svg", alt="{{'COMMON.LOADING' | translate}}") div.progress-bar-wrapper.hidden div.bar diff --git a/app/partials/includes/modules/login-form.jade b/app/partials/includes/modules/login-form.jade index 0d0fb609..87615f94 100644 --- a/app/partials/includes/modules/login-form.jade +++ b/app/partials/includes/modules/login-form.jade @@ -3,6 +3,8 @@ div.login-form-container(tg-login) fieldset input( type="text" + autocorrect="off" + autocapitalize="none" name="username" data-required="true" placeholder="{{'LOGIN_COMMON.PLACEHOLDER_AUTH_NAME' | translate}}" diff --git a/app/partials/includes/modules/register-form.jade b/app/partials/includes/modules/register-form.jade index 621b26b5..4d9d8c56 100644 --- a/app/partials/includes/modules/register-form.jade +++ b/app/partials/includes/modules/register-form.jade @@ -4,6 +4,8 @@ div.register-form-container(tg-register) fieldset input( type="text" + autocorrect="off" + autocapitalize="none" name="username" ng-model="data.username" data-required="true" @@ -24,7 +26,7 @@ div.register-form-container(tg-register) fieldset input( - type="text" + type="email" name="email" ng-model="data.email" data-required="true" diff --git a/app/partials/includes/modules/sprints.jade b/app/partials/includes/modules/sprints.jade index d333e52d..2e1b163f 100644 --- a/app/partials/includes/modules/sprints.jade +++ b/app/partials/includes/modules/sprints.jade @@ -17,7 +17,7 @@ section.sprints div.sprints-empty(ng-if="totalMilestones === 0") img( - src="/images/sprint-empty.png" + src="/#{v}/images/sprint-empty.png" alt="{{'BACKLOG.SPRINTS.EMPTY' | translate}}" ) p.title(translate="BACKLOG.SPRINTS.EMPTY") diff --git a/app/partials/user/cancel-account.jade b/app/partials/user/cancel-account.jade index 32df3953..632759d1 100644 --- a/app/partials/user/cancel-account.jade +++ b/app/partials/user/cancel-account.jade @@ -4,7 +4,7 @@ div.wrapper.cancel-account div.auth div.auth-container div.logo-svg - include ../../svg/logo-moustache.svg + include ../../svg/logo-color.svg h1.logo Taiga h2.tagline(translate="COMMON.TAG_LINE") diff --git a/app/partials/user/change-email.jade b/app/partials/user/change-email.jade index f464d4a7..a2b9b529 100644 --- a/app/partials/user/change-email.jade +++ b/app/partials/user/change-email.jade @@ -4,7 +4,7 @@ div.wrapper div.auth div.auth-container div.logo-svg - include ../../svg/logo-moustache.svg + include ../../svg/logo-color.svg h1.logo Taiga include ../includes/modules/change-email-form diff --git a/app/partials/user/user-profile.jade b/app/partials/user/user-profile.jade index 4e60adf1..7064ba34 100644 --- a/app/partials/user/user-profile.jade +++ b/app/partials/user/user-profile.jade @@ -19,7 +19,7 @@ div.wrapper(tg-user-profile, ng-controller="UserSettingsController as ctrl", img.avatar(ng-src="{{user.big_photo}}" alt="avatar") .overlay.hidden img.loading-spinner( - src="/svg/spinner-circle.svg", + src="/#{v}/svg/spinner-circle.svg", alt="{{'COMMON.LOADING' | translate}}" ) @@ -43,6 +43,8 @@ div.wrapper(tg-user-profile, ng-controller="UserSettingsController as ctrl", label(for="username", translate="USER_PROFILE.FIELD.USERNAME") input( type="text" + autocorrect="off" + autocapitalize="none" name="username" id="username" ng-model="user.username" @@ -55,7 +57,7 @@ div.wrapper(tg-user-profile, ng-controller="UserSettingsController as ctrl", fieldset label(for="email", translate="USER_PROFILE.FIELD.EMAIL") input( - type="text" + type="email" name="email" id="email" ng-model="user.email" diff --git a/app/partials/wiki/wiki.jade b/app/partials/wiki/wiki.jade index def34e10..ec699d01 100644 --- a/app/partials/wiki/wiki.jade +++ b/app/partials/wiki/wiki.jade @@ -6,13 +6,14 @@ div.wrapper(ng-controller="WikiDetailController as ctrl", sidebar.menu-secondary.extrabar(tg-check-permission="view_wiki_links") section.wiki-nav(tg-wiki-nav, ng-model="wikiLinks") section.main.wiki - .header + header h1 span(tg-bo-bind="project.name") span.green(translate="PROJECT.SECTION.WIKI") - span.wiki-title(ng-bind='wikiTitle') + div.summary.wiki-summary(tg-wiki-summary, ng-model="wiki", ng-if="wiki.id") + h2.wiki-title(ng-bind='wikiTitle') section.wiki-content(tg-editable-wiki-content, ng-model="wiki") tg-attachments(ng-model="wiki", type="wiki_page", ng-if="wiki.id") diff --git a/app/styles/components/list-items.scss b/app/styles/components/list-items.scss index ee3d198f..b042c028 100644 --- a/app/styles/components/list-items.scss +++ b/app/styles/components/list-items.scss @@ -82,6 +82,10 @@ color: $gray-light; margin-right: .3rem; } + .ticket-blocked { + color: $red; + margin-left: .3rem; + } } diff --git a/app/styles/components/notification-message.scss b/app/styles/components/notification-message.scss index daf23d06..a0c93c13 100644 --- a/app/styles/components/notification-message.scss +++ b/app/styles/components/notification-message.scss @@ -1,6 +1,6 @@ .notification-message-success { background: rgba($primary-light, .95); - box-shadow: 0 25px 10px -15px rgba(0, 0, 0, .05); + box-shadow: 0 25px 10px -15px rgba($black, .05); opacity: 1; right: -370px; top: 2%; diff --git a/app/styles/components/summary.scss b/app/styles/components/summary.scss index 25f26f33..cd25dc2f 100644 --- a/app/styles/components/summary.scss +++ b/app/styles/components/summary.scss @@ -44,6 +44,9 @@ $summary-background: $grayer; fill: $primary-light; transition: fill .2s; } + svg { + fill: $primary; + } } &.active { .white-line, @@ -53,9 +56,14 @@ $summary-background: $grayer; .graph { fill: $primary; } + svg { + fill: $primary; + } } svg { + fill: $black; height: 100%; + transition: all .2s; width: 100%; } .graph, diff --git a/app/styles/components/wysiwyg.scss b/app/styles/components/wysiwyg.scss index c742fbf3..56c46839 100644 --- a/app/styles/components/wysiwyg.scss +++ b/app/styles/components/wysiwyg.scss @@ -1,5 +1,6 @@ .wysiwyg { line-height: 1.4rem; + margin-bottom: 2rem; overflow: auto; padding: 1rem; h1 { @@ -46,7 +47,6 @@ } } p { - line-height: 1.4rem; margin-bottom: 1rem; } .codehilite { @@ -98,4 +98,8 @@ img { max-width: 100%; } + textarea { + background: $white; + max-height: none; + } } diff --git a/app/styles/core/elements.scss b/app/styles/core/elements.scss index 2d50b9f1..973d8346 100644 --- a/app/styles/core/elements.scss +++ b/app/styles/core/elements.scss @@ -11,7 +11,7 @@ blockquote { cite { @extend %small; display: block; - &:before { + &::before { content: '\2014 \0020'; } } diff --git a/app/styles/core/reset.scss b/app/styles/core/reset.scss index 99deddc2..1b431829 100644 --- a/app/styles/core/reset.scss +++ b/app/styles/core/reset.scss @@ -122,10 +122,10 @@ q { quotes: none; } -blockquote:before, -blockquote:after, -q:before, -q:after { +blockquote::before, +blockquote::after, +q::before, +q::after { content: ''; } diff --git a/app/styles/core/typography.scss b/app/styles/core/typography.scss index 0f450bb3..bf3d207c 100755 --- a/app/styles/core/typography.scss +++ b/app/styles/core/typography.scss @@ -1,14 +1,15 @@ // Typography // Font face -@each $font-face in OpenSans-CondLight, +@each $font-face in +OpenSans-CondLight, OpenSans-Light, -opensans-regular, -opensans-semibold, +Opensans-Regular, +Opensans-Bold, taiga { @font-face { font-family: '#{$font-face}'; - src: url('../fonts/#{$font-face}.eot?#iefix') format('embedded-opentype'), url('../fonts/#{$font-face}.woff') format('woff'), url('../fonts/#{$font-face}.ttf') format('truetype'), url('../fonts/#{$font-face}.svg#{$font-face}') format('svg'); + src: url('../fonts/#{$font-face}.ttf') format('truetype'); } } @@ -111,7 +112,7 @@ a:visited { } // Taiga Icons -[data-icon]:before { +[data-icon]::before { // scss-lint:disable ImportantRule content: attr(data-icon); @@ -126,8 +127,8 @@ a:visited { text-transform: none !important; } -[class^='icon-']:before, -[class*=' icon-']:before { +[class^='icon-']::before, +[class*=' icon-']::before { // scss-lint:disable ImportantRule font-family: 'taiga' !important; @@ -141,156 +142,156 @@ a:visited { text-transform: none !important; } -.icon-bug:before { +.icon-bug::before { content: 'a'; } -.icon-copy:before { +.icon-copy::before { content: 'b'; } -.icon-minimize:before { +.icon-minimize::before { content: 'c'; } -.icon-maximize:before { +.icon-maximize::before { content: 'd'; } -.icon-comment:before { +.icon-comment::before { content: 'e'; } -.icon-plus:before { +.icon-plus::before { content: 'f'; } -.icon-attachments:before { +.icon-attachments::before { content: 'g'; } -.icon-edit:before { +.icon-edit::before { content: 'h'; } -.icon-documents:before { +.icon-documents::before { content: 'i'; } -.icon-delete:before { +.icon-delete::before { content: 'j'; } -.icon-arrow-bottom:before { +.icon-arrow-bottom::before { content: 'k'; } -.icon-arrow-left:before { +.icon-arrow-left::before { content: 'l'; } -.icon-arrow-right:before { +.icon-arrow-right::before { content: 'm'; } -.icon-arrow-up:before { +.icon-arrow-up::before { content: 'n'; } -.icon-briefcase:before { +.icon-briefcase::before { content: 'o'; } -.icon-caret-down:before { +.icon-caret-down::before { content: 'p'; } -.icon-caret-up:before { +.icon-caret-up::before { content: 'q'; } -.icon-check-square:before { +.icon-check-square::before { content: 'r'; } -.icon-notification-error:before { +.icon-notification-error::before { content: 's'; } -.icon-settings:before { +.icon-settings::before { content: 't'; } -.icon-document:before { +.icon-document::before { content: 'u'; } -.icon-warning:before { +.icon-warning::before { content: 'v'; } -.icon-move:before { +.icon-move::before { content: 'w'; } -.icon-drag-v:before { +.icon-drag-v::before { content: 'x'; } -.icon-filter:before { +.icon-filter::before { content: 'y'; } -.icon-help:before { +.icon-help::before { content: 'z'; } -.icon-reload:before { +.icon-reload::before { content: 'A'; } -.icon-writer:before { +.icon-writer::before { content: 'B'; } -.icon-stats:before { +.icon-stats::before { content: 'C'; } -.icon-floppy:before { +.icon-floppy::before { content: 'D'; } -.icon-warning-alt:before { +.icon-warning-alt::before { content: 'E'; } -.icon-video:before { +.icon-video::before { content: 'F'; } -.icon-bulk:before { +.icon-bulk::before { content: 'G'; } -.icon-vunfold:before { +.icon-vunfold::before { content: 'H'; } -.icon-tasks:before { +.icon-tasks::before { content: 'I'; } -.icon-kanban:before { +.icon-kanban::before { content: 'J'; } -.icon-search:before { +.icon-search::before { content: 'K'; } -.icon-wiki:before { +.icon-wiki::before { content: 'L'; } -.icon-team:before { +.icon-team::before { content: 'M'; } -.icon-vfold:before { +.icon-vfold::before { content: 'N'; } -.icon-issues:before { +.icon-issues::before { content: 'O'; } -.icon-iocaine:before { +.icon-iocaine::before { content: 'P'; } -.icon-archive:before { +.icon-archive::before { content: 'Q'; } -.icon-capslock:before { +.icon-capslock::before { content: 'R'; } -.icon-upload:before { +.icon-upload::before { content: 'S'; } -.icon-github:before { +.icon-github::before { content: 'T'; } -.icon-timeline:before { +.icon-timeline::before { content: 'U'; } -.icon-scrum:before { +.icon-scrum::before { content: 'V'; } -.icon-project:before { +.icon-project::before { content: 'W'; } -.icon-heart:before { +.icon-heart::before { content: 'X'; } -.icon-eye:before { +.icon-eye::before { content: 'Y'; } diff --git a/app/styles/dependencies/responsive.scss b/app/styles/dependencies/responsive.scss index e426b4e6..d3ecb5e0 100644 --- a/app/styles/dependencies/responsive.scss +++ b/app/styles/dependencies/responsive.scss @@ -7,7 +7,7 @@ @media (min-width: 1200px) { @content ; } } @else if $point == laptop { - @media (max-width: 1200px) { @content ; } + @media (max-width: 1280px) { @content ; } } @else if $point == tablet { @media (max-width: 767px) { @content ; } diff --git a/app/styles/layout/auth.scss b/app/styles/layout/auth.scss index 14d7265c..393e1eb6 100644 --- a/app/styles/layout/auth.scss +++ b/app/styles/layout/auth.scss @@ -14,6 +14,7 @@ flex-basis: 400px; } .logo-svg { + max-height: 140px; padding: 0 33%; text-align: center; width: 100%; diff --git a/app/styles/layout/wiki-edit.scss b/app/styles/layout/wiki-edit.scss index f1ee14a4..1fe76b62 100644 --- a/app/styles/layout/wiki-edit.scss +++ b/app/styles/layout/wiki-edit.scss @@ -1,10 +1,3 @@ -.wysiwyg { - margin-bottom: 2rem; - textarea { - background: $white; - max-height: none; - } -} .save-wiki { float: right; } diff --git a/app/styles/layout/wiki.scss b/app/styles/layout/wiki.scss index 62fb3b23..1285b1d9 100644 --- a/app/styles/layout/wiki.scss +++ b/app/styles/layout/wiki.scss @@ -1,4 +1,8 @@ .wiki { + .wiki-title { + @extend %light; + @extend %larger; + } .remove { @extend %small; color: $gray-light; diff --git a/app/styles/modules/backlog/backlog-table.scss b/app/styles/modules/backlog/backlog-table.scss index a902d070..9b84249f 100644 --- a/app/styles/modules/backlog/backlog-table.scss +++ b/app/styles/modules/backlog/backlog-table.scss @@ -46,7 +46,7 @@ width: 100%; } .status { - flex-basis: 150px; + flex-basis: 100px; flex-grow: 0; flex-shrink: 0; } @@ -156,6 +156,7 @@ &.ui-sortable-helper { background: lighten($primary, 60%); box-shadow: 1px 1px 10px rgba($black, .1); + opacity: .9; transition: background .2s ease-in; } .points { @@ -189,10 +190,9 @@ @extend %light; display: inline-block; flex: 1; - max-width: 90%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; + } + span { + line-height: 1.5; } } .tags-block { diff --git a/app/styles/modules/backlog/sprints.scss b/app/styles/modules/backlog/sprints.scss index c022fa62..40e4a071 100644 --- a/app/styles/modules/backlog/sprints.scss +++ b/app/styles/modules/backlog/sprints.scss @@ -178,6 +178,7 @@ &.ui-sortable-helper { background: lighten($primary, 60%); box-shadow: 1px 1px 10px rgba($black, .1); + opacity: .9; transition: background .2s ease-in; } diff --git a/app/styles/modules/common/nav.scss b/app/styles/modules/common/nav.scss index 82d6c1d6..6dca70cf 100644 --- a/app/styles/modules/common/nav.scss +++ b/app/styles/modules/common/nav.scss @@ -25,7 +25,7 @@ tg-project-menu { .helper { @extend %small; animation: slideLeft 200ms ease-in-out both; - background: linear-gradient(to right, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, .8) 100%); + background: linear-gradient(to right, rgba($black, 1) 0%, rgba($black, .8) 100%); color: $white; display: block; left: 50px; @@ -36,7 +36,7 @@ tg-project-menu { transition: all .2s; white-space: nowrap; z-index: 99; - &:after { + &::after { background: rgba($blackish, 1); content: ''; height: $label-arrow-wh; diff --git a/app/styles/modules/issues/issues-table.scss b/app/styles/modules/issues/issues-table.scss index 3b4f8a26..d9468859 100644 --- a/app/styles/modules/issues/issues-table.scss +++ b/app/styles/modules/issues/issues-table.scss @@ -140,13 +140,6 @@ display: none; } } - .level-field, - .created-field, - .assigned-field { - @include breakpoint(tablet) { - display: none; - } - } } .empty-issues { diff --git a/app/styles/modules/kanban/kanban-table.scss b/app/styles/modules/kanban/kanban-table.scss index 2b7737d3..544e08f1 100644 --- a/app/styles/modules/kanban/kanban-table.scss +++ b/app/styles/modules/kanban/kanban-table.scss @@ -81,6 +81,9 @@ $column-margin: 0 10px 0 0; &:last-child { margin-right: 0; } + span { + @include ellipsis(65%); + } .icon { @extend %medium; color: $gray-light; diff --git a/app/styles/shame/shame.scss b/app/styles/shame/shame.scss index 9342e459..152b9fa4 100644 --- a/app/styles/shame/shame.scss +++ b/app/styles/shame/shame.scss @@ -6,3 +6,11 @@ _:-ms-fullscreen, min-height: auto; } } + + +// External lybrary makes weird things. Please destroy +.markItUpEditor { + @extend %small; + line-height: 1.5; + font-family: monospace; +} diff --git a/app/themes/high-contrast/custom.scss b/app/themes/high-contrast/custom.scss index 1bb79bd3..a133091b 100644 --- a/app/themes/high-contrast/custom.scss +++ b/app/themes/high-contrast/custom.scss @@ -137,7 +137,7 @@ cite { // Top navigation bar .navbar { background: $black; - &:after { + &::after { background: url('../images/menu-vert.png') repeat top left; } a { diff --git a/app/themes/material-design/custom.scss b/app/themes/material-design/custom.scss index 472ad2b4..e37abb23 100644 --- a/app/themes/material-design/custom.scss +++ b/app/themes/material-design/custom.scss @@ -125,7 +125,7 @@ cite { // Top navigation bar .navbar { background: rgba($red-amaranth, .6); - &:after { + &::after { background: url('../images/menu-vert.png') repeat top left; } } diff --git a/app/themes/taiga/custom.scss b/app/themes/taiga/custom.scss index 6bb7c4c8..08adf274 100644 --- a/app/themes/taiga/custom.scss +++ b/app/themes/taiga/custom.scss @@ -107,7 +107,7 @@ cite { // Top navigation bar .navbar { background: rgba($black, .5); - &:after { + &::after { background: url('../images/menu-vert.png') repeat top left; } } diff --git a/app/themes/taiga/variables.scss b/app/themes/taiga/variables.scss index 96d36e86..12202bf2 100755 --- a/app/themes/taiga/variables.scss +++ b/app/themes/taiga/variables.scss @@ -31,6 +31,10 @@ $red-amaranth: #e43050; $purple-eggplant: #810061; $yellow-pear: #bbe831; +$tribe-primary: #98e0eb; +$tribe-secondary: #107a8a; + + $top-icon-color: #11241f; $dropdown-color: rgba(darken($grayer, 20%), 1); @@ -63,11 +67,11 @@ $dropdown-color: rgba(darken($grayer, 20%), 1); // Background images %triangled-bg { - background: url('/images/bg.png') no-repeat center center; + background: url('../images/bg.png') no-repeat center center; background-size: cover; } %background-taiga { - background: url('/images/invitation_bg.jpg') no-repeat center center; + background: url('../images/invitation_bg.jpg') no-repeat center center; background-size: cover; } diff --git a/bower.json b/bower.json index 6f177a36..55f63b40 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "taiga-layout", - "version": "0.1.0", + "version": "1.9.1", "homepage": "https://github.com/taiga.io/taiga-layout", "authors": [ { @@ -76,6 +76,7 @@ "raven-js": "~1.1.16", "l.js": "~0.1.0", "angular-translate": "~2.8.1", + "angular-translate-loader-partial": "~2.8.1", "angular-translate-loader-static-files": "~2.8.1", "angular-translate-interpolation-messageformat": "~2.8.1", "ngInfiniteScroll": "1.2.1", diff --git a/conf.e2e.js b/conf.e2e.js index b974004a..e0b11b37 100644 --- a/conf.e2e.js +++ b/conf.e2e.js @@ -27,20 +27,20 @@ exports.config = { // version: '11' // }, suites: { - auth: "e2e/auth/*.e2e.js", - public: "e2e/public/**/*.e2e.js", - wiki: "e2e/full/wiki.e2e.js", - admin: "e2e/full/admin/**/*.e2e.js", - issues: "e2e/full/issues/*.e2e.js", - tasks: "e2e/full/tasks/*.e2e.js", - userProfile: "e2e/full/user-profile/*.e2e.js", - userStories: "e2e/full/user-stories/*.e2e.js", - backlog: "e2e/full/backlog.e2e.js", - home: "e2e/full/home.e2e.js", - kanban: "e2e/full/kanban.e2e.js", - projectHome: "e2e/full/project-home.e2e.js", - search: "e2e/full/search.e2e.js", - team: "e2e/full/team.e2e.js" + auth: "e2e/suites/auth/*.e2e.js", + public: "e2e/suites/public/**/*.e2e.js", + wiki: "e2e/suites/wiki.e2e.js", + admin: "e2e/suites/admin/**/*.e2e.js", + issues: "e2e/suites/issues/*.e2e.js", + tasks: "e2e/suites/tasks/*.e2e.js", + userProfile: "e2e/suites/user-profile/*.e2e.js", + userStories: "e2e/suites/user-stories/*.e2e.js", + backlog: "e2e/suites/backlog.e2e.js", + home: "e2e/suites/home.e2e.js", + kanban: "e2e/suites/kanban.e2e.js", + projectHome: "e2e/suites/project-home.e2e.js", + search: "e2e/suites/search.e2e.js", + team: "e2e/suites/team.e2e.js" }, onPrepare: function() { // track mouse movements @@ -81,8 +81,7 @@ exports.config = { setTimeout(function() { dotEl.remove(); - }, 1000) - + }, 1000); } $document.on({ diff --git a/conf/conf.example.json b/conf/conf.example.json index d039bb77..1779eec1 100644 --- a/conf/conf.example.json +++ b/conf/conf.example.json @@ -1,6 +1,8 @@ { "api": "http://localhost:8000/api/v1/", "eventsUrl": null, + "eventsMaxMissedHeartbeats": 5, + "eventsHeartbeatIntervalTime": 60000, "debug": true, "debugInfo": false, "defaultLanguage": "en", diff --git a/e2e/README.md b/e2e/README.md index 04372833..c39d4c9f 100644 --- a/e2e/README.md +++ b/e2e/README.md @@ -19,14 +19,8 @@ After taiga-back and taiga-front are running webdriver-manager start ``` -for auth test: +run test: ``` -protractor conf.e2e.js --suite=auth -``` - -For full tests - -``` -protractor conf.e2e.js --suite=full +protractor conf.e2e.js --suite=suiteName ``` diff --git a/e2e/helpers/admin-memberships.js b/e2e/helpers/admin-memberships.js index d4ecc384..5fbe7c34 100644 --- a/e2e/helpers/admin-memberships.js +++ b/e2e/helpers/admin-memberships.js @@ -62,5 +62,5 @@ helper.setRole = function(elm, index) { }; helper.sendInvitation = function(elm) { - $$('.pending').first().click(); + elm.$('.resend').click(); }; diff --git a/e2e/helpers/common-helper.js b/e2e/helpers/common-helper.js index fc1ee715..6bd7ee3e 100644 --- a/e2e/helpers/common-helper.js +++ b/e2e/helpers/common-helper.js @@ -12,6 +12,9 @@ helper.assignToLightbox = function() { waitClose: function() { return utils.lightbox.close(el); }, + close: function() { + el.$$('.icon-delete').first().click(); + }, selectFirst: function() { el.$$('div[data-user-id]').first().click(); }, diff --git a/e2e/helpers/detail-helper.js b/e2e/helpers/detail-helper.js index bc787d86..370d6804 100644 --- a/e2e/helpers/detail-helper.js +++ b/e2e/helpers/detail-helper.js @@ -412,6 +412,9 @@ helper.watchersLightbox = function() { waitClose: function() { return utils.lightbox.close(el); }, + close: function() { + el.$$('.icon-delete').first().click(); + }, selectFirst: async function() { el.$$('div[data-user-id]').first().click(); await browser.waitForAngular(); @@ -427,7 +430,7 @@ helper.watchersLightbox = function() { }, userList: function() { return el.$$('.user-list-single'); - } + } }; return obj; diff --git a/e2e/helpers/us-detail-helper.js b/e2e/helpers/us-detail-helper.js index 3a6bf3c4..946bb6ef 100644 --- a/e2e/helpers/us-detail-helper.js +++ b/e2e/helpers/us-detail-helper.js @@ -82,7 +82,11 @@ helper.editRelatedTasks = function(taskIndex, name, status, assigned_to) { helper.deleteRelatedTask = function(taskIndex, name, status, assigned_to) { let task = helper.relatedTasks().get(taskIndex); - task.$('.icon-delete').click(); + browser + .actions() + .mouseMove(task.$('.icon-delete')) + .click() + .perform(); utils.lightbox.confirm.ok(); }; diff --git a/e2e/screenshots_old/auth/delete-account.png b/e2e/screenshots_old/auth/delete-account.png new file mode 100644 index 00000000..9049e866 Binary files /dev/null and b/e2e/screenshots_old/auth/delete-account.png differ diff --git a/e2e/screenshots_old/auth/login.png b/e2e/screenshots_old/auth/login.png new file mode 100644 index 00000000..d4b12126 Binary files /dev/null and b/e2e/screenshots_old/auth/login.png differ diff --git a/e2e/screenshots_old/auth/register-validation.png b/e2e/screenshots_old/auth/register-validation.png new file mode 100644 index 00000000..42a65746 Binary files /dev/null and b/e2e/screenshots_old/auth/register-validation.png differ diff --git a/e2e/screenshots_old/auth/register.png b/e2e/screenshots_old/auth/register.png new file mode 100644 index 00000000..c5079a35 Binary files /dev/null and b/e2e/screenshots_old/auth/register.png differ diff --git a/e2e/screenshots_old/auth/remember-password-success.png b/e2e/screenshots_old/auth/remember-password-success.png new file mode 100644 index 00000000..603195a1 Binary files /dev/null and b/e2e/screenshots_old/auth/remember-password-success.png differ diff --git a/e2e/screenshots_old/auth/remember-password.png b/e2e/screenshots_old/auth/remember-password.png new file mode 100644 index 00000000..4e21f916 Binary files /dev/null and b/e2e/screenshots_old/auth/remember-password.png differ diff --git a/e2e/screenshots_old/backlog/backlog-filters.png b/e2e/screenshots_old/backlog/backlog-filters.png new file mode 100644 index 00000000..8cdf08f0 Binary files /dev/null and b/e2e/screenshots_old/backlog/backlog-filters.png differ diff --git a/e2e/screenshots_old/backlog/backlog-tags.png b/e2e/screenshots_old/backlog/backlog-tags.png new file mode 100644 index 00000000..5e56c5bb Binary files /dev/null and b/e2e/screenshots_old/backlog/backlog-tags.png differ diff --git a/e2e/screenshots_old/backlog/backlog.png b/e2e/screenshots_old/backlog/backlog.png new file mode 100644 index 00000000..4525b9c4 Binary files /dev/null and b/e2e/screenshots_old/backlog/backlog.png differ diff --git a/e2e/screenshots_old/backlog/create-milestone.png b/e2e/screenshots_old/backlog/create-milestone.png new file mode 100644 index 00000000..5917c29d Binary files /dev/null and b/e2e/screenshots_old/backlog/create-milestone.png differ diff --git a/e2e/screenshots_old/backlog/create-us-filled.png b/e2e/screenshots_old/backlog/create-us-filled.png new file mode 100644 index 00000000..ac9181d1 Binary files /dev/null and b/e2e/screenshots_old/backlog/create-us-filled.png differ diff --git a/e2e/screenshots_old/backlog/create-us.png b/e2e/screenshots_old/backlog/create-us.png new file mode 100644 index 00000000..c71cb967 Binary files /dev/null and b/e2e/screenshots_old/backlog/create-us.png differ diff --git a/app/plugins/.gitignore b/e2e/screenshots_old/chrome/.gitignore similarity index 51% rename from app/plugins/.gitignore rename to e2e/screenshots_old/chrome/.gitignore index 61d16771..d6b7ef32 100644 --- a/app/plugins/.gitignore +++ b/e2e/screenshots_old/chrome/.gitignore @@ -1,3 +1,2 @@ * !.gitignore -!main.coffee diff --git a/e2e/screenshots_old/firefox/.gitignore b/e2e/screenshots_old/firefox/.gitignore new file mode 100644 index 00000000..d6b7ef32 --- /dev/null +++ b/e2e/screenshots_old/firefox/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/e2e/screenshots_old/home/dashboard.png b/e2e/screenshots_old/home/dashboard.png new file mode 100644 index 00000000..6e97fe91 Binary files /dev/null and b/e2e/screenshots_old/home/dashboard.png differ diff --git a/e2e/screenshots_old/home/projects.png b/e2e/screenshots_old/home/projects.png new file mode 100644 index 00000000..d29794c1 Binary files /dev/null and b/e2e/screenshots_old/home/projects.png differ diff --git a/e2e/screenshots_old/ie/.gitignore b/e2e/screenshots_old/ie/.gitignore new file mode 100644 index 00000000..d6b7ef32 --- /dev/null +++ b/e2e/screenshots_old/ie/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/e2e/screenshots_old/issues/detail updated.png b/e2e/screenshots_old/issues/detail updated.png new file mode 100644 index 00000000..017dffa1 Binary files /dev/null and b/e2e/screenshots_old/issues/detail updated.png differ diff --git a/e2e/screenshots_old/issues/detail.png b/e2e/screenshots_old/issues/detail.png new file mode 100644 index 00000000..f1a09176 Binary files /dev/null and b/e2e/screenshots_old/issues/detail.png differ diff --git a/e2e/screenshots_old/kanban/archive-open.png b/e2e/screenshots_old/kanban/archive-open.png new file mode 100644 index 00000000..bbd8a950 Binary files /dev/null and b/e2e/screenshots_old/kanban/archive-open.png differ diff --git a/e2e/screenshots_old/kanban/archive.png b/e2e/screenshots_old/kanban/archive.png new file mode 100644 index 00000000..d2a54cf7 Binary files /dev/null and b/e2e/screenshots_old/kanban/archive.png differ diff --git a/e2e/screenshots_old/kanban/create-us.png b/e2e/screenshots_old/kanban/create-us.png new file mode 100644 index 00000000..e2c67f1b Binary files /dev/null and b/e2e/screenshots_old/kanban/create-us.png differ diff --git a/e2e/screenshots_old/kanban/edit-us.png b/e2e/screenshots_old/kanban/edit-us.png new file mode 100644 index 00000000..f5ff0a73 Binary files /dev/null and b/e2e/screenshots_old/kanban/edit-us.png differ diff --git a/e2e/screenshots_old/kanban/fold-cards.png b/e2e/screenshots_old/kanban/fold-cards.png new file mode 100644 index 00000000..def85c5f Binary files /dev/null and b/e2e/screenshots_old/kanban/fold-cards.png differ diff --git a/e2e/screenshots_old/kanban/fold-column.png b/e2e/screenshots_old/kanban/fold-column.png new file mode 100644 index 00000000..ebace3d0 Binary files /dev/null and b/e2e/screenshots_old/kanban/fold-column.png differ diff --git a/e2e/screenshots_old/kanban/kanban.png b/e2e/screenshots_old/kanban/kanban.png new file mode 100644 index 00000000..15e538bf Binary files /dev/null and b/e2e/screenshots_old/kanban/kanban.png differ diff --git a/e2e/screenshots_old/project/home.png b/e2e/screenshots_old/project/home.png new file mode 100644 index 00000000..030acf2b Binary files /dev/null and b/e2e/screenshots_old/project/home.png differ diff --git a/e2e/screenshots_old/safari/.gitignore b/e2e/screenshots_old/safari/.gitignore new file mode 100644 index 00000000..d6b7ef32 --- /dev/null +++ b/e2e/screenshots_old/safari/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/e2e/screenshots_old/taskboard/create-task-filled.png b/e2e/screenshots_old/taskboard/create-task-filled.png new file mode 100644 index 00000000..55983e47 Binary files /dev/null and b/e2e/screenshots_old/taskboard/create-task-filled.png differ diff --git a/e2e/screenshots_old/taskboard/create-task.png b/e2e/screenshots_old/taskboard/create-task.png new file mode 100644 index 00000000..950c5670 Binary files /dev/null and b/e2e/screenshots_old/taskboard/create-task.png differ diff --git a/e2e/screenshots_old/taskboard/edit-task-filled.png b/e2e/screenshots_old/taskboard/edit-task-filled.png new file mode 100644 index 00000000..f8102976 Binary files /dev/null and b/e2e/screenshots_old/taskboard/edit-task-filled.png differ diff --git a/e2e/screenshots_old/taskboard/edit-task.png b/e2e/screenshots_old/taskboard/edit-task.png new file mode 100644 index 00000000..375e0742 Binary files /dev/null and b/e2e/screenshots_old/taskboard/edit-task.png differ diff --git a/e2e/screenshots_old/taskboard/fold-column-row.png b/e2e/screenshots_old/taskboard/fold-column-row.png new file mode 100644 index 00000000..e76b077c Binary files /dev/null and b/e2e/screenshots_old/taskboard/fold-column-row.png differ diff --git a/e2e/screenshots_old/taskboard/fold-column.png b/e2e/screenshots_old/taskboard/fold-column.png new file mode 100644 index 00000000..039c5d07 Binary files /dev/null and b/e2e/screenshots_old/taskboard/fold-column.png differ diff --git a/e2e/screenshots_old/taskboard/fold-row.png b/e2e/screenshots_old/taskboard/fold-row.png new file mode 100644 index 00000000..a457c271 Binary files /dev/null and b/e2e/screenshots_old/taskboard/fold-row.png differ diff --git a/e2e/screenshots_old/taskboard/grap-open.png b/e2e/screenshots_old/taskboard/grap-open.png new file mode 100644 index 00000000..139f239d Binary files /dev/null and b/e2e/screenshots_old/taskboard/grap-open.png differ diff --git a/e2e/screenshots_old/taskboard/taskboard.png b/e2e/screenshots_old/taskboard/taskboard.png new file mode 100644 index 00000000..974fdd08 Binary files /dev/null and b/e2e/screenshots_old/taskboard/taskboard.png differ diff --git a/e2e/screenshots_old/tasks/detail updated.png b/e2e/screenshots_old/tasks/detail updated.png new file mode 100644 index 00000000..8cc838cd Binary files /dev/null and b/e2e/screenshots_old/tasks/detail updated.png differ diff --git a/e2e/screenshots_old/tasks/detail.png b/e2e/screenshots_old/tasks/detail.png new file mode 100644 index 00000000..c42b287c Binary files /dev/null and b/e2e/screenshots_old/tasks/detail.png differ diff --git a/e2e/screenshots_old/team/after-leaving.png b/e2e/screenshots_old/team/after-leaving.png new file mode 100644 index 00000000..a41259b4 Binary files /dev/null and b/e2e/screenshots_old/team/after-leaving.png differ diff --git a/e2e/screenshots_old/team/filtering-by-role.png b/e2e/screenshots_old/team/filtering-by-role.png new file mode 100644 index 00000000..160a6af4 Binary files /dev/null and b/e2e/screenshots_old/team/filtering-by-role.png differ diff --git a/e2e/screenshots_old/team/searching-by-name.png b/e2e/screenshots_old/team/searching-by-name.png new file mode 100644 index 00000000..e6007b10 Binary files /dev/null and b/e2e/screenshots_old/team/searching-by-name.png differ diff --git a/e2e/screenshots_old/team/team.png b/e2e/screenshots_old/team/team.png new file mode 100644 index 00000000..7ec1101e Binary files /dev/null and b/e2e/screenshots_old/team/team.png differ diff --git a/e2e/screenshots_old/user-stories/detail updated.png b/e2e/screenshots_old/user-stories/detail updated.png new file mode 100644 index 00000000..52554197 Binary files /dev/null and b/e2e/screenshots_old/user-stories/detail updated.png differ diff --git a/e2e/screenshots_old/user-stories/detail.png b/e2e/screenshots_old/user-stories/detail.png new file mode 100644 index 00000000..fb59d862 Binary files /dev/null and b/e2e/screenshots_old/user-stories/detail.png differ diff --git a/e2e/screenshots_old/wiki/deleting-the-created-link.png b/e2e/screenshots_old/wiki/deleting-the-created-link.png new file mode 100644 index 00000000..991c80da Binary files /dev/null and b/e2e/screenshots_old/wiki/deleting-the-created-link.png differ diff --git a/e2e/screenshots_old/wiki/empty.png b/e2e/screenshots_old/wiki/empty.png new file mode 100644 index 00000000..02d9c249 Binary files /dev/null and b/e2e/screenshots_old/wiki/empty.png differ diff --git a/e2e/screenshots_old/wiki/home-edition-preview.png b/e2e/screenshots_old/wiki/home-edition-preview.png new file mode 100644 index 00000000..34ef06d2 Binary files /dev/null and b/e2e/screenshots_old/wiki/home-edition-preview.png differ diff --git a/e2e/screenshots_old/wiki/home-edition.png b/e2e/screenshots_old/wiki/home-edition.png new file mode 100644 index 00000000..10b94df5 Binary files /dev/null and b/e2e/screenshots_old/wiki/home-edition.png differ diff --git a/e2e/screenshots_old/wiki/new-link-created-with-empty-wiki-page.png b/e2e/screenshots_old/wiki/new-link-created-with-empty-wiki-page.png new file mode 100644 index 00000000..3c8af836 Binary files /dev/null and b/e2e/screenshots_old/wiki/new-link-created-with-empty-wiki-page.png differ diff --git a/e2e/utils/detail.js b/e2e/shared/detail.js similarity index 93% rename from e2e/utils/detail.js rename to e2e/shared/detail.js index eb65b555..1bfeece9 100644 --- a/e2e/utils/detail.js +++ b/e2e/shared/detail.js @@ -2,7 +2,8 @@ var path = require('path'); var detailHelper = require('../helpers').detail; var commonHelper = require('../helpers').common; var customFieldsHelper = require('../helpers/custom-fields-helper'); -var commonUtil = require('./common'); +var commonUtil = require('../utils/common'); +var notifications = require('../utils/notifications'); var chai = require('chai'); var chaiAsPromised = require('chai-as-promised'); @@ -10,9 +11,9 @@ var chaiAsPromised = require('chai-as-promised'); chai.use(chaiAsPromised); var expect = chai.expect; -var helper = module.exports; +var shared = module.exports; -helper.titleTesting = async function() { +shared.titleTesting = async function() { let titleHelper = detailHelper.title(); let title = await titleHelper.getTitle(); let date = Date.now(); @@ -21,7 +22,7 @@ helper.titleTesting = async function() { expect(newTitle).to.be.not.equal(title); } -helper.tagsTesting = async function() { +shared.tagsTesting = async function() { let tagsHelper = detailHelper.tags(); let tagsText = await tagsHelper.getTagsText(); await tagsHelper.clearTags(); @@ -34,7 +35,7 @@ helper.tagsTesting = async function() { expect(newtagsText).to.be.not.eql(tagsText); } -helper.descriptionTesting = async function() { +shared.descriptionTesting = async function() { let descriptionHelper = detailHelper.description(); let description = await descriptionHelper.getInnerHtml(); let date = Date.now(); @@ -45,7 +46,7 @@ helper.descriptionTesting = async function() { expect(newDescription).to.be.not.equal(description); } -helper.statusTesting = async function() { +shared.statusTesting = async function() { let statusHelper = detailHelper.statusSelector(); // Current status @@ -70,11 +71,11 @@ helper.statusTesting = async function() { expect(newGenericStatus).to.be.not.equal(genericStatus); } -helper.assignedToTesting = function() { +shared.assignedToTesting = function() { before(function () { let assignedTo = detailHelper.assignedTo(); return assignedTo.clear(); - }) + }); it('assign', async function() { let assignedTo = detailHelper.assignedTo(); @@ -124,6 +125,7 @@ helper.assignedToTesting = function() { assignToLightbox.selectFirst(); await assignToLightbox.waitClose(); + await notifications.success.close(); }); it('keyboard navigatin', async function() { @@ -147,10 +149,14 @@ helper.assignedToTesting = function() { let isSelected = await commonUtil.hasClass(selected, 'selected'); expect(isSelected).to.be.true; + + assignToLightbox.close(); + + await assignToLightbox.waitClose(); }); } -helper.historyTesting = async function() { +shared.historyTesting = async function() { let historyHelper = detailHelper.history(); //Adding a comment @@ -182,7 +188,7 @@ helper.historyTesting = async function() { expect(activitiesCounter).to.be.least(newCommentsCounter); } -helper.blockTesting = async function() { +shared.blockTesting = async function() { let blockHelper = detailHelper.block(); let blockLightboxHelper = detailHelper.blockLightbox(); @@ -202,7 +208,7 @@ helper.blockTesting = async function() { expect($('.block-description').isDisplayed()).to.be.eventually.false; } -helper.attachmentTesting = async function() { +shared.attachmentTesting = async function() { let attachmentHelper = detailHelper.attachment(); let date = Date.now(); @@ -250,16 +256,16 @@ helper.attachmentTesting = async function() { expect(newAttachmentsLength).to.be.equal(attachmentsLength - 1); } -helper.deleteTesting = async function() { +shared.deleteTesting = async function() { let deleteHelper = detailHelper.delete(); await deleteHelper.delete(); } -helper.watchersTesting = function() { +shared.watchersTesting = function() { before(function () { let watchersHelper = detailHelper.watchers(); return watchersHelper.removeAllWatchers(); - }) + }); it('add watcher', async function() { let watchersHelper = detailHelper.watchers(); @@ -309,6 +315,7 @@ helper.watchersTesting = function() { await watchersLightboxHelper.selectFirst(); await watchersLightboxHelper.waitClose(); + await notifications.success.close(); }); it('keyboard navigatin', async function() { @@ -331,10 +338,14 @@ helper.watchersTesting = function() { let isSelected = await commonUtil.hasClass(selected, 'selected'); expect(isSelected).to.be.true; + + watchersLightboxHelper.close(); + + await watchersLightboxHelper.waitClose(); }); } -helper.customFields = function(typeIndex) { +shared.customFields = function(typeIndex) { before(async function() { let url = await browser.getCurrentUrl(); diff --git a/e2e/full/admin/attributes/custom-fields.e2e.js b/e2e/suites/admin/attributes/custom-fields.e2e.js similarity index 100% rename from e2e/full/admin/attributes/custom-fields.e2e.js rename to e2e/suites/admin/attributes/custom-fields.e2e.js diff --git a/e2e/full/admin/attributes/points.e2e.js b/e2e/suites/admin/attributes/points.e2e.js similarity index 100% rename from e2e/full/admin/attributes/points.e2e.js rename to e2e/suites/admin/attributes/points.e2e.js diff --git a/e2e/full/admin/attributes/priorities.e2e.js b/e2e/suites/admin/attributes/priorities.e2e.js similarity index 100% rename from e2e/full/admin/attributes/priorities.e2e.js rename to e2e/suites/admin/attributes/priorities.e2e.js diff --git a/e2e/full/admin/attributes/severities.e2e.js b/e2e/suites/admin/attributes/severities.e2e.js similarity index 100% rename from e2e/full/admin/attributes/severities.e2e.js rename to e2e/suites/admin/attributes/severities.e2e.js diff --git a/e2e/full/admin/attributes/status.e2e.js b/e2e/suites/admin/attributes/status.e2e.js similarity index 100% rename from e2e/full/admin/attributes/status.e2e.js rename to e2e/suites/admin/attributes/status.e2e.js diff --git a/e2e/full/admin/attributes/types.e2e.js b/e2e/suites/admin/attributes/types.e2e.js similarity index 100% rename from e2e/full/admin/attributes/types.e2e.js rename to e2e/suites/admin/attributes/types.e2e.js diff --git a/e2e/full/admin/integrations/bitbucket.e2e.js b/e2e/suites/admin/integrations/bitbucket.e2e.js similarity index 100% rename from e2e/full/admin/integrations/bitbucket.e2e.js rename to e2e/suites/admin/integrations/bitbucket.e2e.js diff --git a/e2e/full/admin/integrations/github.e2e.js b/e2e/suites/admin/integrations/github.e2e.js similarity index 100% rename from e2e/full/admin/integrations/github.e2e.js rename to e2e/suites/admin/integrations/github.e2e.js diff --git a/e2e/full/admin/integrations/gitlab.e2e.js b/e2e/suites/admin/integrations/gitlab.e2e.js similarity index 100% rename from e2e/full/admin/integrations/gitlab.e2e.js rename to e2e/suites/admin/integrations/gitlab.e2e.js diff --git a/e2e/full/admin/integrations/webhooks.e2e.js b/e2e/suites/admin/integrations/webhooks.e2e.js similarity index 100% rename from e2e/full/admin/integrations/webhooks.e2e.js rename to e2e/suites/admin/integrations/webhooks.e2e.js diff --git a/e2e/full/admin/members.e2e.js b/e2e/suites/admin/members.e2e.js similarity index 98% rename from e2e/full/admin/members.e2e.js rename to e2e/suites/admin/members.e2e.js index 77618ee1..9a024a12 100644 --- a/e2e/full/admin/members.e2e.js +++ b/e2e/suites/admin/members.e2e.js @@ -107,7 +107,7 @@ describe('admin - members', function() { it('resend invitation', async function() { let member = adminMembershipsHelper.getMembers().last(); - adminMembershipsHelper.sendInvitation(); + adminMembershipsHelper.sendInvitation(member); expect(utils.notifications.success.open()).to.be.eventually.true; diff --git a/e2e/full/admin/permissions.e2e.js b/e2e/suites/admin/permissions.e2e.js similarity index 100% rename from e2e/full/admin/permissions.e2e.js rename to e2e/suites/admin/permissions.e2e.js diff --git a/e2e/full/admin/project/create-delete.e2e.js b/e2e/suites/admin/project/create-delete.e2e.js similarity index 100% rename from e2e/full/admin/project/create-delete.e2e.js rename to e2e/suites/admin/project/create-delete.e2e.js diff --git a/e2e/full/admin/project/default-values.e2e.js b/e2e/suites/admin/project/default-values.e2e.js similarity index 100% rename from e2e/full/admin/project/default-values.e2e.js rename to e2e/suites/admin/project/default-values.e2e.js diff --git a/e2e/full/admin/project/modules.e2e.js b/e2e/suites/admin/project/modules.e2e.js similarity index 100% rename from e2e/full/admin/project/modules.e2e.js rename to e2e/suites/admin/project/modules.e2e.js diff --git a/e2e/full/admin/project/project-detail.e2e.js b/e2e/suites/admin/project/project-detail.e2e.js similarity index 100% rename from e2e/full/admin/project/project-detail.e2e.js rename to e2e/suites/admin/project/project-detail.e2e.js diff --git a/e2e/full/admin/project/reports.e2e.js b/e2e/suites/admin/project/reports.e2e.js similarity index 100% rename from e2e/full/admin/project/reports.e2e.js rename to e2e/suites/admin/project/reports.e2e.js diff --git a/e2e/auth/auth.e2e.js b/e2e/suites/auth/auth.e2e.js similarity index 99% rename from e2e/auth/auth.e2e.js rename to e2e/suites/auth/auth.e2e.js index 6a77adad..f7b7b502 100644 --- a/e2e/auth/auth.e2e.js +++ b/e2e/suites/auth/auth.e2e.js @@ -1,4 +1,4 @@ -var utils = require('../utils'); +var utils = require('../../utils'); var chai = require('chai'); var chaiAsPromised = require('chai-as-promised'); diff --git a/e2e/full/backlog.e2e.js b/e2e/suites/backlog.e2e.js similarity index 100% rename from e2e/full/backlog.e2e.js rename to e2e/suites/backlog.e2e.js diff --git a/e2e/full/home.e2e.js b/e2e/suites/home.e2e.js similarity index 100% rename from e2e/full/home.e2e.js rename to e2e/suites/home.e2e.js diff --git a/e2e/full/issues/issue-detail.e2e.js b/e2e/suites/issues/issue-detail.e2e.js similarity index 56% rename from e2e/full/issues/issue-detail.e2e.js rename to e2e/suites/issues/issue-detail.e2e.js index 5419b19f..28467ab7 100644 --- a/e2e/full/issues/issue-detail.e2e.js +++ b/e2e/suites/issues/issue-detail.e2e.js @@ -1,4 +1,5 @@ var utils = require('../../utils'); +var sharedDetail = require('../../shared/detail'); var chai = require('chai'); var chaiAsPromised = require('chai-as-promised'); @@ -6,7 +7,7 @@ var chaiAsPromised = require('chai-as-promised'); chai.use(chaiAsPromised); var expect = chai.expect; -describe('Issue detail', async function(){ +describe.only('Issue detail', async function(){ let issueUrl = ''; before(async function(){ @@ -24,32 +25,32 @@ describe('Issue detail', async function(){ await utils.common.takeScreenshot("issues", "detail"); }); - it('title edition', utils.detail.titleTesting); + it('title edition', sharedDetail.titleTesting); - it('tags edition', utils.detail.tagsTesting); + it('tags edition', sharedDetail.tagsTesting); - it('description edition', utils.detail.descriptionTesting); + it('description edition', sharedDetail.descriptionTesting); - it('status edition', utils.detail.statusTesting); + it('status edition', sharedDetail.statusTesting); - describe('assigned to edition', utils.detail.assignedToTesting); + describe('assigned to edition', sharedDetail.assignedToTesting); - describe('watchers edition', utils.detail.watchersTesting); + describe('watchers edition', sharedDetail.watchersTesting); - it('history', utils.detail.historyTesting); + it('history', sharedDetail.historyTesting); - it('block', utils.detail.blockTesting); + it('block', sharedDetail.blockTesting); - it('attachments', utils.detail.attachmentTesting); + it('attachments', sharedDetail.attachmentTesting); - describe('custom-fields', utils.detail.customFields.bind(this, 2)); + describe('custom-fields', sharedDetail.customFields.bind(this, 2)); it('screenshot', async function() { await utils.common.takeScreenshot("issues", "detail updated"); }); describe('delete & redirect', function() { - it('delete', utils.detail.deleteTesting); + it('delete', sharedDetail.deleteTesting); it('redirected', async function (){ let url = await browser.getCurrentUrl(); diff --git a/e2e/full/issues/issues.e2e.js b/e2e/suites/issues/issues.e2e.js similarity index 100% rename from e2e/full/issues/issues.e2e.js rename to e2e/suites/issues/issues.e2e.js diff --git a/e2e/full/kanban.e2e.js b/e2e/suites/kanban.e2e.js similarity index 100% rename from e2e/full/kanban.e2e.js rename to e2e/suites/kanban.e2e.js diff --git a/e2e/full/project-home.e2e.js b/e2e/suites/project-home.e2e.js similarity index 100% rename from e2e/full/project-home.e2e.js rename to e2e/suites/project-home.e2e.js diff --git a/e2e/public/public.e2e.js b/e2e/suites/public/public.e2e.js similarity index 95% rename from e2e/public/public.e2e.js rename to e2e/suites/public/public.e2e.js index aabe20d9..bfe04d31 100644 --- a/e2e/public/public.e2e.js +++ b/e2e/suites/public/public.e2e.js @@ -1,4 +1,4 @@ -var utils = require('../utils'); +var utils = require('../../utils'); var chai = require('chai'); var chaiAsPromised = require('chai-as-promised'); @@ -20,7 +20,7 @@ describe('Public', async function(){ await utils.notifications.success.close(); //We need this click on firefox, probably the mouse is in a previous input - $('body').click() + $('body').click(); return utils.common.logout(); }); @@ -82,8 +82,8 @@ describe('Public', async function(){ utils.common.takeScreenshot('public', 'issue-detail'); }); - it('task detail', function() { - browser.get(browser.params.glob.host + 'project/project-1/backlog'); + it('task detail', async function() { + browser.get(browser.params.glob.host + 'project/project-3/backlog'); utils.nav .init() diff --git a/e2e/full/search.e2e.js b/e2e/suites/search.e2e.js similarity index 100% rename from e2e/full/search.e2e.js rename to e2e/suites/search.e2e.js diff --git a/e2e/full/tasks/task-detail.e2e.js b/e2e/suites/tasks/task-detail.e2e.js similarity index 70% rename from e2e/full/tasks/task-detail.e2e.js rename to e2e/suites/tasks/task-detail.e2e.js index 8739b1bd..f5907c96 100644 --- a/e2e/full/tasks/task-detail.e2e.js +++ b/e2e/suites/tasks/task-detail.e2e.js @@ -1,4 +1,5 @@ var utils = require('../../utils'); +var sharedDetail = require('../../shared/detail'); var taskDetailHelper = require('../../helpers').taskDetail; var chai = require('chai'); @@ -26,17 +27,17 @@ describe('Task detail', function(){ await utils.common.takeScreenshot("tasks", "detail"); }); - it('title edition', utils.detail.titleTesting); + it('title edition', sharedDetail.titleTesting); - it('tags edition', utils.detail.tagsTesting); + it('tags edition', sharedDetail.tagsTesting); - it('description edition', utils.detail.descriptionTesting); + it('description edition', sharedDetail.descriptionTesting); - it('status edition', utils.detail.statusTesting); + it('status edition', sharedDetail.statusTesting); - describe('assigned to edition', utils.detail.assignedToTesting); + describe('assigned to edition', sharedDetail.assignedToTesting); - describe('watchers edition', utils.detail.watchersTesting); + describe('watchers edition', sharedDetail.watchersTesting); it('iocaine edition', async function() { // Toggle iocaine status @@ -52,20 +53,20 @@ describe('Task detail', function(){ expect(newIsIocaine).to.be.equal(isIocaine); }); - it('history', utils.detail.historyTesting); + it('history', sharedDetail.historyTesting); - it('block', utils.detail.blockTesting); + it('block', sharedDetail.blockTesting); - it('attachments', utils.detail.attachmentTesting); + it('attachments', sharedDetail.attachmentTesting); - describe('custom-fields', utils.detail.customFields.bind(this, 1)); + describe('custom-fields', sharedDetail.customFields.bind(this, 1)); it('screenshot', async function() { await utils.common.takeScreenshot("tasks", "detail updated"); }); describe('delete & redirect', function() { - it('delete', utils.detail.deleteTesting); + it('delete', sharedDetail.deleteTesting); it('redirected', async function (){ let url = await browser.getCurrentUrl(); diff --git a/e2e/full/tasks/taskboard.e2e.js b/e2e/suites/tasks/taskboard.e2e.js similarity index 100% rename from e2e/full/tasks/taskboard.e2e.js rename to e2e/suites/tasks/taskboard.e2e.js diff --git a/e2e/full/team.e2e.js b/e2e/suites/team.e2e.js similarity index 100% rename from e2e/full/team.e2e.js rename to e2e/suites/team.e2e.js diff --git a/e2e/full/user-profile/change-password.e2e.js b/e2e/suites/user-profile/change-password.e2e.js similarity index 100% rename from e2e/full/user-profile/change-password.e2e.js rename to e2e/suites/user-profile/change-password.e2e.js diff --git a/e2e/full/user-profile/edit-user-profile.e2e.js b/e2e/suites/user-profile/edit-user-profile.e2e.js similarity index 100% rename from e2e/full/user-profile/edit-user-profile.e2e.js rename to e2e/suites/user-profile/edit-user-profile.e2e.js diff --git a/e2e/full/user-profile/email-notification.e2e.js b/e2e/suites/user-profile/email-notification.e2e.js similarity index 100% rename from e2e/full/user-profile/email-notification.e2e.js rename to e2e/suites/user-profile/email-notification.e2e.js diff --git a/e2e/full/user-profile/feedback.e2e.js b/e2e/suites/user-profile/feedback.e2e.js similarity index 100% rename from e2e/full/user-profile/feedback.e2e.js rename to e2e/suites/user-profile/feedback.e2e.js diff --git a/e2e/full/user-profile/user-profile-activity.e2e.js b/e2e/suites/user-profile/user-profile-activity.e2e.js similarity index 100% rename from e2e/full/user-profile/user-profile-activity.e2e.js rename to e2e/suites/user-profile/user-profile-activity.e2e.js diff --git a/e2e/full/user-profile/user-profile-contacts.e2e.js b/e2e/suites/user-profile/user-profile-contacts.e2e.js similarity index 100% rename from e2e/full/user-profile/user-profile-contacts.e2e.js rename to e2e/suites/user-profile/user-profile-contacts.e2e.js diff --git a/e2e/full/user-profile/user-profile-likes.e2e.js b/e2e/suites/user-profile/user-profile-likes.e2e.js similarity index 100% rename from e2e/full/user-profile/user-profile-likes.e2e.js rename to e2e/suites/user-profile/user-profile-likes.e2e.js diff --git a/e2e/full/user-profile/user-profile-projects.e2e.js b/e2e/suites/user-profile/user-profile-projects.e2e.js similarity index 100% rename from e2e/full/user-profile/user-profile-projects.e2e.js rename to e2e/suites/user-profile/user-profile-projects.e2e.js diff --git a/e2e/full/user-profile/user-profile-votes.e2e.js b/e2e/suites/user-profile/user-profile-votes.e2e.js similarity index 100% rename from e2e/full/user-profile/user-profile-votes.e2e.js rename to e2e/suites/user-profile/user-profile-votes.e2e.js diff --git a/e2e/full/user-profile/user-profile-watched.e2e.js b/e2e/suites/user-profile/user-profile-watched.e2e.js similarity index 100% rename from e2e/full/user-profile/user-profile-watched.e2e.js rename to e2e/suites/user-profile/user-profile-watched.e2e.js diff --git a/e2e/full/user-stories/user-story-detail.e2e.js b/e2e/suites/user-stories/user-story-detail.e2e.js similarity index 79% rename from e2e/full/user-stories/user-story-detail.e2e.js rename to e2e/suites/user-stories/user-story-detail.e2e.js index 88849eac..911f0013 100644 --- a/e2e/full/user-stories/user-story-detail.e2e.js +++ b/e2e/suites/user-stories/user-story-detail.e2e.js @@ -1,4 +1,5 @@ var utils = require('../../utils'); +var sharedDetail = require('../../shared/detail'); var usDetailHelper = require('../../helpers').usDetail; var chai = require('chai'); @@ -25,15 +26,15 @@ describe('User story detail', function(){ await utils.common.takeScreenshot("user-stories", "detail"); }); - it('title edition', utils.detail.titleTesting); + it('title edition', sharedDetail.titleTesting); - it('tags edition', utils.detail.tagsTesting); + it('tags edition', sharedDetail.tagsTesting); - it('description edition', utils.detail.descriptionTesting); + it('description edition', sharedDetail.descriptionTesting); - it('status edition', utils.detail.statusTesting); + it('status edition', sharedDetail.statusTesting); - describe('assigned to edition', utils.detail.assignedToTesting); + describe('assigned to edition', sharedDetail.assignedToTesting); it('team requirement edition', async function() { let requirementHelper = usDetailHelper.teamRequirement(); @@ -65,15 +66,15 @@ describe('User story detail', function(){ expect(isRequired).to.be.equal(newIsRequired); }); - describe('watchers edition', utils.detail.watchersTesting); + describe('watchers edition', sharedDetail.watchersTesting); - it('history', utils.detail.historyTesting); + it('history', sharedDetail.historyTesting); - it('block', utils.detail.blockTesting); + it('block', sharedDetail.blockTesting); - it('attachments', utils.detail.attachmentTesting); + it('attachments', sharedDetail.attachmentTesting); - describe('custom-fields', utils.detail.customFields.bind(this, 0)); + describe('custom-fields', sharedDetail.customFields.bind(this, 0)); describe('related tasks', function() { it('create', async function() { @@ -83,6 +84,8 @@ describe('User story detail', function(){ expect(utils.notifications.success.open()).to.be.eventually.true; + utils.notifications.success.close(); + let relatedTaskCount = usDetailHelper.relatedTasks().count(); expect(relatedTaskCount).to.be.eventually.equal(oldRelatedTaskCount + 1); @@ -92,6 +95,8 @@ describe('User story detail', function(){ usDetailHelper.editRelatedTasks(0, 'test2', 2, 2); expect(utils.notifications.success.open()).to.be.eventually.true; + + utils.notifications.success.close(); }); it('delete', async function() { @@ -101,6 +106,8 @@ describe('User story detail', function(){ expect(utils.notifications.success.open()).to.be.eventually.true; + utils.notifications.success.close(); + let relatedTaskCount = usDetailHelper.relatedTasks().count(); expect(relatedTaskCount).to.be.eventually.equal(oldRelatedTaskCount - 1); @@ -112,7 +119,7 @@ describe('User story detail', function(){ }); describe('delete & redirect', function() { - it('delete', utils.detail.deleteTesting); + it('delete', sharedDetail.deleteTesting); it('redirected', async function (){ let url = await browser.getCurrentUrl(); diff --git a/e2e/full/wiki.e2e.js b/e2e/suites/wiki.e2e.js similarity index 97% rename from e2e/full/wiki.e2e.js rename to e2e/suites/wiki.e2e.js index 86dbfe6c..d3610580 100644 --- a/e2e/full/wiki.e2e.js +++ b/e2e/suites/wiki.e2e.js @@ -1,4 +1,5 @@ var utils = require('../utils'); +var sharedDetail = require('../shared/detail'); var wikiHelper = require('../helpers').wiki; var chai = require('chai'); @@ -71,7 +72,7 @@ describe('wiki', function() { await utils.common.takeScreenshot("wiki", "home-edition"); }); - it('attachments', utils.detail.attachmentTesting); + it('attachments', sharedDetail.attachmentTesting); it('delete', async function() { await wikiHelper.editor().delete(); diff --git a/e2e/utils/index.js b/e2e/utils/index.js index 34d7ac6a..677b2422 100644 --- a/e2e/utils/index.js +++ b/e2e/utils/index.js @@ -2,5 +2,4 @@ module.exports.common = require("./common"); module.exports.notifications = require("./notifications"); module.exports.lightbox = require("./lightbox"); module.exports.popover = require("./popover"); -module.exports.detail = require("./detail"); module.exports.nav = require("./nav"); diff --git a/gulpfile.js b/gulpfile.js index 066f2951..bb1848e8 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -25,6 +25,8 @@ var gulp = require("gulp"), order = require("gulp-order"), print = require('gulp-print'), del = require("del"), + livereload = require('gulp-livereload'), + gulpFilter = require('gulp-filter'), coffeelint = require('gulp-coffeelint'); var argv = require('minimist')(process.argv.slice(2)); @@ -37,9 +39,12 @@ if (argv.theme) { themes.set(argv.theme); } +var version = "v-" + Date.now(); + var paths = {}; paths.app = "app/"; paths.dist = "dist/"; +paths.distVersion = paths.dist + version + "/"; paths.tmp = "tmp/"; paths.extras = "extras/"; paths.vendor = "vendor/"; @@ -51,7 +56,6 @@ paths.jade = [ paths.htmlPartials = [ paths.tmp + "partials/**/*.html", paths.tmp + "modules/**/*.html", - paths.tmp + "plugins/**/*.html", "!" + paths.tmp + "partials/includes/**/*.html", "!" + paths.tmp + "/modules/**/includes/**/*.html" ]; @@ -81,8 +85,7 @@ paths.styles_dependencies = [ paths.css = [ paths.tmp + "styles/**/*.css", - paths.tmp + "modules/**/*.css", - paths.tmp + "plugins/**/*.css" + paths.tmp + "modules/**/*.css" ]; paths.css_order = [ @@ -98,7 +101,6 @@ paths.css_order = [ paths.tmp + "styles/modules/**/*.css", paths.tmp + "modules/**/*.css", paths.tmp + "styles/shame/*.css", - paths.tmp + "plugins/**/*.css", paths.tmp + "themes/**/*.css" ]; @@ -130,9 +132,7 @@ paths.coffee_order = [ paths.app + "coffee/modules/user-settings/*.coffee", paths.app + "coffee/modules/integrations/*.coffee", paths.app + "modules/**/*.module.coffee", - paths.app + "modules/**/*.coffee", - paths.app + "plugins/*.coffee", - paths.app + "plugins/**/*.coffee" + paths.app + "modules/**/*.coffee" ]; paths.libs = [ @@ -148,6 +148,7 @@ paths.libs = [ paths.vendor + "angular-animate/angular-animate.js", paths.vendor + "angular-aria/angular-aria.js", paths.vendor + "angular-translate/angular-translate.js", + paths.vendor + "angular-translate-loader-partial/angular-translate-loader-partial.js", paths.vendor + "angular-translate-loader-static-files/angular-translate-loader-static-files.js", paths.vendor + "angular-translate-interpolation-messageformat/angular-translate-interpolation-messageformat.js", paths.vendor + "moment/min/moment-with-locales.js", @@ -189,7 +190,7 @@ gulp.task("jade", function() { return gulp.src(paths.jade) .pipe(plumber()) .pipe(cached("jade")) - .pipe(jade({pretty: true, locals:{v:(new Date()).getTime()}})) + .pipe(jade({pretty: true, locals:{v:version}})) .pipe(gulp.dest(paths.tmp)); }); @@ -198,7 +199,7 @@ gulp.task("jade-inheritance", function() { .pipe(plumber()) .pipe(cached("jade")) .pipe(jadeInheritance({basedir: "./app/"})) - .pipe(jade({pretty: true, locals:{v:(new Date()).getTime()}})) + .pipe(jade({pretty: true, locals:{v: version}})) .pipe(gulp.dest(paths.tmp)); }); @@ -210,7 +211,8 @@ gulp.task("copy-index", function() { gulp.task("template-cache", function() { return gulp.src(paths.htmlPartials) .pipe(templateCache({standalone: true})) - .pipe(gulp.dest(paths.dist + "js/")); + .pipe(gulp.dest(paths.distVersion + "js/")) + .pipe(gulpif(!isDeploy, livereload())); }); gulp.task("jade-deploy", function(cb) { @@ -315,7 +317,8 @@ gulp.task("main-css", function() { return gulp.src(_paths) .pipe(concat("theme-" + themes.current.name + ".css")) .pipe(gulpif(isDeploy, minifyCSS({noAdvanced: true}))) - .pipe(gulp.dest(paths.dist + "styles/")); + .pipe(gulp.dest(paths.distVersion + "styles/")) + .pipe(livereload()); }); var compileThemes = function (cb) { @@ -364,19 +367,19 @@ gulp.task("styles-dependencies", function(cb) { */ gulp.task("conf", function() { return gulp.src(["conf/conf.example.json"]) - .pipe(gulp.dest(paths.dist + "js/")); + .pipe(gulp.dest(paths.dist)); }); gulp.task("app-loader", function() { return gulp.src("app-loader/app-loader.coffee") - .pipe(replace("___VERSION___", (new Date()).getTime())) + .pipe(replace("___VERSION___", version)) .pipe(coffee()) - .pipe(gulp.dest(paths.dist + "js/")); + .pipe(gulp.dest(paths.distVersion + "js/")); }); gulp.task("locales", function() { return gulp.src(paths.locales) - .pipe(gulp.dest(paths.dist + "locales")); + .pipe(gulp.dest(paths.distVersion + "locales")); }); gulp.task("coffee-lint", function () { @@ -401,6 +404,8 @@ gulp.task("coffee-lint", function () { }); gulp.task("coffee", function() { + var filter = gulpFilter(['*', '!*.map']); + return gulp.src(paths.coffee) .pipe(order(paths.coffee_order, {base: '.'})) .pipe(sourcemaps.init()) @@ -411,14 +416,16 @@ gulp.task("coffee", function() { }) .pipe(concat("app.js")) .pipe(sourcemaps.write('./maps')) - .pipe(gulp.dest(paths.dist + "js/")); + .pipe(gulp.dest(paths.distVersion + "js/")) + .pipe(filter) + .pipe(livereload()); }); gulp.task("jslibs-watch", function() { return gulp.src(paths.libs) .pipe(plumber()) .pipe(concat("libs.js")) - .pipe(gulp.dest(paths.dist + "js/")); + .pipe(gulp.dest(paths.distVersion + "js/")); }); gulp.task("jslibs-deploy", function() { @@ -428,19 +435,17 @@ gulp.task("jslibs-deploy", function() { .pipe(concat("libs.js")) .pipe(uglify({mangle:false, preserveComments: false})) .pipe(sourcemaps.write("./maps")) - .pipe(gulp.dest(paths.dist + "js/")); + .pipe(gulp.dest(paths.distVersion + "js/")); }); gulp.task("app-watch", ["coffee-lint", "coffee", "conf", "locales", "app-loader"]); gulp.task("app-deploy", ["coffee", "conf", "locales", "app-loader"], function() { - return gulp.src(paths.dist) - .pipe(order(paths.coffee_order, {base: '.'})) + return gulp.src(paths.distVersion + "js/app.js") .pipe(sourcemaps.init()) - .pipe(concat("app.js")) .pipe(uglify({mangle:false, preserveComments: false})) .pipe(sourcemaps.write("./maps")) - .pipe(gulp.dest(paths.dist + "js/")); + .pipe(gulp.dest(paths.distVersion + "js/")); }); /* @@ -455,45 +460,34 @@ gulp.task("clear", ["clear-sass-cache"], function(done) { //SVG gulp.task("copy-svg", function() { return gulp.src(paths.app + "/svg/**/*") - .pipe(gulp.dest(paths.dist + "/svg/")); + .pipe(gulp.dest(paths.distVersion + "/svg/")); }); gulp.task("copy-theme-svg", function() { return gulp.src(themes.current.path + "/svg/**/*") - .pipe(gulp.dest(paths.dist + "/svg/" + themes.current.name)); + .pipe(gulp.dest(paths.distVersion + "/svg/" + themes.current.name)); }); gulp.task("copy-fonts", function() { return gulp.src(paths.app + "/fonts/*") - .pipe(gulp.dest(paths.dist + "/fonts/")); + .pipe(gulp.dest(paths.distVersion + "/fonts/")); }); gulp.task("copy-theme-fonts", function() { return gulp.src(themes.current.path + "/fonts/*") - .pipe(gulp.dest(paths.dist + "/fonts/" + themes.current.name)); + .pipe(gulp.dest(paths.distVersion + "/fonts/" + themes.current.name)); }); gulp.task("copy-images", function() { return gulp.src(paths.app + "/images/**/*") .pipe(gulpif(isDeploy, imagemin({progressive: true}))) - .pipe(gulp.dest(paths.dist + "/images/")); + .pipe(gulp.dest(paths.distVersion + "/images/")); }); gulp.task("copy-theme-images", function() { return gulp.src(themes.current.path + "/images/**/*") .pipe(gulpif(isDeploy, imagemin({progressive: true}))) - .pipe(gulp.dest(paths.dist + "/images/" + themes.current.name)); -}); - -gulp.task("copy-images-plugins", function() { - return gulp.src(paths.app + "/plugins/**/images/*") - .pipe(flatten()) - .pipe(gulp.dest(paths.dist + "/images/")); -}); - -gulp.task("copy-plugin-templates", function() { - return gulp.src(paths.app + "/plugins/**/templates/**/*.html") - .pipe(gulp.dest(paths.dist + "/plugins/")); + .pipe(gulp.dest(paths.distVersion + "/images/" + themes.current.name)); }); gulp.task("copy-extras", function() { @@ -506,13 +500,15 @@ gulp.task("copy", [ "copy-theme-fonts", "copy-images", "copy-theme-images", - "copy-images-plugins", - "copy-plugin-templates", "copy-svg", "copy-theme-svg", "copy-extras" ]); +gulp.task("delete-old-version", function() { + del.sync(paths.dist + "v-*"); +}); + gulp.task("delete-tmp", function() { del.sync(paths.tmp); }); @@ -521,15 +517,19 @@ gulp.task("express", function() { var express = require("express"); var app = express(); - app.use("/js", express.static(__dirname + "/dist/js")); - app.use("/styles", express.static(__dirname + "/dist/styles")); - app.use("/images", express.static(__dirname + "/dist/images")); - app.use("/svg", express.static(__dirname + "/dist/svg")); - app.use("/partials", express.static(__dirname + "/dist/partials")); - app.use("/fonts", express.static(__dirname + "/dist/fonts")); + app.use("/" + version + "/js", express.static(__dirname + "/dist/" + version + "/js")); + app.use("/" + version + "/styles", express.static(__dirname + "/dist/" + version + "/styles")); + app.use("/" + version + "/images", express.static(__dirname + "/dist/" + version + "/images")); + app.use("/" + version + "/svg", express.static(__dirname + "/dist/" + version + "/svg")); + app.use("/" + version + "/partials", express.static(__dirname + "/dist/" + version + "/partials")); + app.use("/" + version + "/fonts", express.static(__dirname + "/dist/" + version + "/fonts")); + app.use("/" + version + "/locales", express.static(__dirname + "/dist/" + version + "/locales")); + app.use("/" + version + "/maps", express.static(__dirname + "/dist/" + version + "/maps")); app.use("/plugins", express.static(__dirname + "/dist/plugins")); - app.use("/locales", express.static(__dirname + "/dist/locales")); - app.use("/maps", express.static(__dirname + "/dist/maps")); + app.use("/conf.json", express.static(__dirname + "/dist/conf.json")); + app.use(require('connect-livereload')({ + port: 35729 + })); app.all("/*", function(req, res, next) { //Just send the index.html for other files to support HTML5Mode @@ -541,6 +541,8 @@ gulp.task("express", function() { //Rerun the task when a file changes gulp.task("watch", function() { + livereload.listen(); + gulp.watch(paths.jade, ["jade-watch"]); gulp.watch(paths.sass_watch, ["styles"]); gulp.watch(paths.styles_dependencies, ["styles-dependencies"]); @@ -553,7 +555,7 @@ gulp.task("watch", function() { }); gulp.task("deploy", function(cb) { - runSequence("clear", "delete-tmp", [ + runSequence("clear", "delete-old-version", "delete-tmp", [ "copy", "jade-deploy", "app-deploy", @@ -563,7 +565,7 @@ gulp.task("deploy", function(cb) { }); //The default task (called when you run gulp from cli) gulp.task("default", function(cb) { - runSequence("delete-tmp", [ + runSequence("delete-old-version", "delete-tmp", [ "copy", "styles", "app-watch", diff --git a/karma.conf.js b/karma.conf.js index f60b812e..4e24c1ec 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -2,9 +2,6 @@ // Generated on Wed Apr 15 2015 09:44:14 GMT+0200 (CEST) // this is needed by theme.service.spec -var fs = require('fs'); -fs.writeFileSync('dist/styles/empty.css', ''); - module.exports = function(config) { var configuration = { @@ -20,7 +17,7 @@ module.exports = function(config) { // list of files / patterns to load in the browser files: [ 'karma.app.conf.js', - 'dist/js/libs.js', + 'dist/**/js/libs.js', 'node_modules/angular-mocks/angular-mocks.js', 'vendor/bluebird/js/browser/bluebird.js', 'node_modules/chai-jquery/chai-jquery.js', @@ -28,8 +25,8 @@ module.exports = function(config) { 'vendor/lodash/dist/lodash.js', 'vendor/underscore.string/lib/underscore.string.js', 'test-utils.js', - 'dist/js/app.js', - 'dist/js/templates.js', + 'dist/**/js/app.js', + 'dist/**/js/templates.js', 'app/**/*spec.coffee' ], @@ -96,8 +93,7 @@ module.exports = function(config) { proxies: { '/images/': 'http://localhost:9001/images/', '/base/dist/js/maps/': 'http://localhost:9001/js/maps/', - '/base/dist/js/maps/': 'http://localhost:9001/js/maps/', - '/styles/theme-testTheme.css': 'http://localhost:9001/styles/empty.css' + '/base/dist/js/maps/': 'http://localhost:9001/js/maps/' }, // Continuous Integration mode diff --git a/package.json b/package.json index 61462503..7d326400 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "TaigaIO", - "version": "0.0.1", + "version": "1.9.1", "description": "Taiga project management system (frontend)", "main": "index.js", "keywords": [ @@ -21,7 +21,7 @@ "e2e": "node ./node_modules/babel/bin/babel-node.js --stage=1 ./run-e2e.js" }, "devDependencies": { - "angular-mocks": "^1.5.0-beta.0", + "angular-mocks": "^1.4.7", "babel": "^5.6.5", "bluebird": "^3.0.2", "chai": "^3.3.0", @@ -29,6 +29,7 @@ "chai-jquery": "^2.0.0", "cli-color": "^1.0.0", "coffee-script": "^1.9.1", + "connect-livereload": "^0.5.4", "del": "^2.0.2", "express": "^4.12.0", "glob": "^5.0.14", @@ -41,12 +42,14 @@ "gulp-coffeelint": "^0.5.0", "gulp-concat": "^2.5.2", "gulp-csslint": "^0.2.0", + "gulp-filter": "^3.0.1", "gulp-flatten": "0.2.0", "gulp-if": "^2.0.0", "gulp-imagemin": "^2.2.1", "gulp-insert": "^0.5.0", "gulp-jade": "^1.0.0", "gulp-jade-inheritance": "0.5.3", + "gulp-livereload": "^3.8.1", "gulp-minify-css": "^0.4.6", "gulp-order": "^1.1.1", "gulp-plumber": "^1.0.1", diff --git a/scripts/add_licanse_to_coffee_files.py b/scripts/add_licanse_to_coffee_files.py index 9d456e30..4c8c2a55 100644 --- a/scripts/add_licanse_to_coffee_files.py +++ b/scripts/add_licanse_to_coffee_files.py @@ -1,7 +1,7 @@ import os, sys LICENSE = """### -# Copyright (C) 2014-2015 Taiga Agile LLC +# Copyright (C) 2014-2016 Taiga Agile LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as